diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index a485b0ab5..000000000 --- a/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "src/modules"] - path = src/modules - url = https://github.com/AppiumTestDistribution/device-farm-pro.git -[submodule "dashboard-frontend"] - path = dashboard-frontend - url = https://github.com/AppiumTestDistribution/appium-dashboard.git diff --git a/LICENSE b/LICENSE index dca8d65c9..7600e0cd7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,40 +1,191 @@ -Appium Device Farm Plugin License -The Appium Device Farm Plugin is dual-licensed: + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -1. Open Source Components License (MIT License) + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -Copyright (c) 2024 Appium Test Distribution aka Appium Device Farm + 1. Definitions. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. + "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. -This license applies to all files and directories in this project except those -listed under "Proprietary Components" below. + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. -2. Proprietary Components + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. -The following components are proprietary and subject to the Appium Device Farm -Proprietary License: + "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. -- src/modules/dashboard -- src/modules/device-control -- dashboard-frontend + "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). -For the full text of the proprietary license, see the accompanying -PROPRIETARY-LICENSE.txt file. + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to the Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by the Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding any notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2024 Appium Test Distribution + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/PROPRIETARY-LICENSE.txt b/PROPRIETARY-LICENSE.txt deleted file mode 100644 index 03cdcbe4e..000000000 --- a/PROPRIETARY-LICENSE.txt +++ /dev/null @@ -1,45 +0,0 @@ -APPIUM DEVICE FARM PLUGIN PROPRIETARY LICENSE - -1. License Grant - Subject to the terms and conditions of this License, the core maintainers of the Appium Device Farm Plugin project ("Licensors") hereby grant to you ("Licensee") a non-exclusive, non-transferable, limited license to use the proprietary components of the Appium Device Farm Plugin ("Proprietary Software") solely for your internal business purposes. - -2. Proprietary Components - This License applies exclusively to the following components of the Appium Device Farm Plugin: - - src/modules/ - - dashboard-frontend - -3. Restrictions - Licensee shall not, and shall not permit others to: - a) Copy, modify, translate, adapt, alter, decompile, disassemble, or reverse engineer the Proprietary Software; - b) Create derivative works based on the Proprietary Software; - c) Distribute, sublicense, lease, rent, loan, or otherwise transfer the Proprietary Software to any third party; - d) Remove, alter, or obscure any proprietary notices on the Proprietary Software; - e) Use the Proprietary Software for any purpose other than as expressly permitted in this License. - -4. Ownership - Licensors retain all right, title, and interest in and to the Proprietary Software, including all intellectual property rights therein. This License does not grant Licensee any rights to patents, copyrights, trade secrets, trade names, trademarks, or any other rights in respect to the Proprietary Software. - -5. Confidentiality - Licensee acknowledges that the Proprietary Software contains valuable trade secrets of Licensor. Licensee agrees to maintain the confidentiality of the Proprietary Software and to use at least the same degree of care to prevent its unauthorized use or disclosure as Licensee uses with respect to its own confidential information. - -6. No Warranty - THE PROPRIETARY SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. LICENSOR DISCLAIMS ALL WARRANTIES, WHETHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. - -7. Limitation of Liability - IN NO EVENT SHALL LICENSOR BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, OR DAMAGES FOR LOSS OF PROFITS, REVENUE, DATA, OR USE, INCURRED BY LICENSEE OR ANY THIRD PARTY, WHETHER IN AN ACTION IN CONTRACT OR TORT, EVEN IF SUCH PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -8. Termination - This License is effective until terminated. Licensor may terminate this License at any time if Licensee breaches any of its terms. Upon termination, Licensee shall immediately cease all use of the Proprietary Software and destroy all copies thereof. - -9. Export Compliance - Licensee shall comply with all applicable export laws and regulations in its use of the Proprietary Software. - -10. Governing Law and Jurisdiction - This License shall be governed by and construed in accordance with the laws of the jurisdiction where the majority of core maintainers reside, without giving effect to any choice of law rule. Any legal action or proceeding relating to this License shall be instituted in a court of competent jurisdiction in that same jurisdiction. - -By using the Proprietary Software, you acknowledge that you have read this License, understand it, and agree to be bound by its terms and conditions. - -Appium Device Farm Plugin Project -https://github.com/AppiumTestDistribution/appium-device-farm - -Last Updated: 20/AUG/2024 \ No newline at end of file diff --git a/README.md b/README.md index f7e84ea6c..2f9c32376 100644 --- a/README.md +++ b/README.md @@ -198,46 +198,16 @@ npm run build:docs Navigate to site directory and open index.html to view the site locally. -## Licensing +## License -The Appium Device Farm Plugin uses a hybrid licensing model to balance open-source principles with the protection of certain proprietary components: +This project is fully open source and licensed under the [Apache License 2.0](LICENSE). -1. **Open Source Components**: - The majority of this project is open source and licensed under the MIT License. This includes all files and directories except those explicitly listed as proprietary. - -2. **Proprietary Components**: - The following components, while included in the distribution, are proprietary and provided in an obfuscated form: - - - src/modules/ - - dashboard-frontend - - These components are integral parts of the plugin but their source code is not open for modification or redistribution. - -### Using the Appium Device Farm Plugin - -The Appium Device Farm Plugin, including both open source and obfuscated proprietary components, is freely available for use under the terms specified in the LICENSE file. Users can utilize all functionalities provided by the plugin, including those powered by the proprietary components. - -### Important Notes on Proprietary Components - -- While the proprietary components are included in the distribution, their source code is not available for viewing, modification, or redistribution. -- These components are provided in an obfuscated form to protect our intellectual property. -- Users are granted the right to use these components as part of the Appium Device Farm Plugin, but not to decompile, reverse engineer, or attempt to extract the original source code. - -### Contributions and Modifications - -- Contributions and modifications to the open-source portions of the plugin are welcome. -- Please note that it is not possible to contribute to or modify the proprietary components due to their obfuscated nature. - -For full license details, please see the [LICENSE](LICENSE) file in this repository. If you have any questions about the licensing or use of the Appium Device Farm Plugin, please open an issue in this repository. +Contributions are welcome! Please see the [LICENSE](LICENSE) file for details. ### Devices Page ![alt text](assets/image.png) -### Use Devices Page - -![alt text](assets/image-4.png) - ### Builds Page ![alt text](assets/image-1.png) diff --git a/dashboard-frontend b/dashboard-frontend deleted file mode 160000 index c1135b6de..000000000 --- a/dashboard-frontend +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c1135b6de2e2ceeb39dd2ae54a1c2e7351513a46 diff --git a/dashboard-frontend/.gitignore b/dashboard-frontend/.gitignore new file mode 100644 index 000000000..7b855ada4 --- /dev/null +++ b/dashboard-frontend/.gitignore @@ -0,0 +1,15 @@ +node_modules +.idea +lib/ +dist/ +.DS_Store +.history +.vscode +local_appium_home/ +.nyc_output/ +site +appium-e2e-test +temp-appium +.env +src/public/* +docs/reference diff --git a/dashboard-frontend/README.md b/dashboard-frontend/README.md new file mode 100644 index 000000000..9076384af --- /dev/null +++ b/dashboard-frontend/README.md @@ -0,0 +1 @@ +# appium-dashboard diff --git a/dashboard-frontend/index.html b/dashboard-frontend/index.html new file mode 100644 index 000000000..4b4273042 --- /dev/null +++ b/dashboard-frontend/index.html @@ -0,0 +1,15 @@ + + + + + + + Appium Device Farm + + + + +
+ + + diff --git a/dashboard-frontend/package-lock.json b/dashboard-frontend/package-lock.json new file mode 100644 index 000000000..bcbed9c25 --- /dev/null +++ b/dashboard-frontend/package-lock.json @@ -0,0 +1,12013 @@ +{ + "name": "modernweb", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "modernweb", + "version": "0.0.0", + "dependencies": { + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.5", + "@heroicons/react": "^2.2.0", + "@mui/icons-material": "^5.15.20", + "@mui/material": "^5.15.20", + "@types/react-router-dom": "^5.3.3", + "@types/react-window": "^1.8.8", + "@types/xterm": "^2.0.3", + "@xterm/addon-fit": "^0.10.0", + "@xterm/addon-ligatures": "^0.9.0", + "@xterm/addon-search": "^0.15.0", + "@xterm/addon-unicode11": "^0.8.0", + "@xterm/addon-web-links": "^0.11.0", + "@xterm/xterm": "^5.5.0", + "chart.js": "^4.4.2", + "date-fns": "^3.6.0", + "file-saver": "^2.0.5", + "flowbite": "^2.5.2", + "flowbite-react": "^0.7.8", + "framer-motion": "^12.4.7", + "jszip": "^3.10.1", + "lucide-react": "^0.424.0", + "pretty-ms": "^8.0.0", + "prism-react-renderer": "^2.4.1", + "react": "^18.2.0", + "react-chartjs-2": "^5.2.0", + "react-datepicker": "^8.1.0", + "react-dom": "^18.2.0", + "react-dropzone": "^14.2.3", + "react-json-tree": "^0.19.0", + "react-modal": "^3.16.1", + "react-router-dom": "^6.22.3", + "react-split": "^2.0.14", + "react-tag-input-component": "^2.0.2", + "react-toastify": "^10.0.5", + "react-use-websocket": "^4.8.1", + "react-virtualized-auto-sizer": "^1.0.25", + "react-window": "^1.8.11", + "recharts": "^2.12.7", + "xterm": "^5.3.0", + "xterm-addon-fit": "^0.8.0", + "xterm-addon-ligatures": "^0.7.0", + "xterm-addon-search": "^0.13.0", + "xterm-addon-unicode11": "^0.6.0", + "xterm-addon-web-links": "^0.9.0" + }, + "devDependencies": { + "@types/dompurify": "^3.2.0", + "@types/file-saver": "^2.0.7", + "@types/react": "^18.2.64", + "@types/react-datepicker": "^7.0.0", + "@types/react-dom": "^18.2.21", + "@types/react-modal": "^3.16.3", + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.18", + "eslint": "^8.57.0", + "eslint-plugin-react": "^7.34.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", + "postcss": "^8.4.36", + "tailwindcss": "^3.4.1", + "typescript": "^5.4.2", + "vite": "^5.1.6" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.1.tgz", + "integrity": "sha512-bC49z4spJQR3j8vFtJBLqzyzFV0ciuL5HYX7qfSl3KEqeMVV+eTquRvmXxpvB0AMubRrvv7y5DILiLLPi57Ewg==", + "dependencies": { + "@babel/highlight": "^7.24.1", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", + "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.1.tgz", + "integrity": "sha512-HfEWzysMyOa7xI5uQHc/OcZf67/jc+xe/RZlznWQHhbb8Pg1SkRdbK4yEi61aY8wxQA7PkSfoojtLQP/Kpe3og==", + "dependencies": { + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.1.tgz", + "integrity": "sha512-EPmDPxidWe/Ex+HTFINpvXdPHRmgSF3T8hGvzondYjmgzTQ/0EbLpSxyt+w3zzlYSk9cNBQNF9k0dT5Z2NiBjw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz", + "integrity": "sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", + "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", + "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", + "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz", + "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/styled": { + "version": "11.11.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.5.tgz", + "integrity": "sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.2", + "@emotion/serialize": "^1.1.4", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "dependencies": { + "@floating-ui/utils": "^0.2.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/react": { + "version": "0.26.10", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.10.tgz", + "integrity": "sha512-sh6f9gVvWQdEzLObrWbJ97c0clJObiALsFe0LiR/kb3tDRKwEhObASEH2QyfdoO/ZBPzwxa9j+nYFo+sqgbioA==", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@floating-ui/utils": "^0.2.0", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==" + }, + "node_modules/@heroicons/react": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.2.0.tgz", + "integrity": "sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==", + "license": "MIT", + "peerDependencies": { + "react": ">= 16 || ^19.0.0-rc" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.40", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", + "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@floating-ui/react-dom": "^2.0.8", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", + "@popperjs/core": "^2.11.8", + "clsx": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.20.tgz", + "integrity": "sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.20.tgz", + "integrity": "sha512-oGcKmCuHaYbAAoLN67WKSXtHmEgyWcJToT1uRtmPyxMj9N5uqwc/mRtEnst4Wj/eGr+zYH2FiZQ79v9k7kSk1Q==", + "dependencies": { + "@babel/runtime": "^7.23.9" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.20.tgz", + "integrity": "sha512-tVq3l4qoXx/NxUgIx/x3lZiPn/5xDbdTE8VrLczNpfblLYZzlrbxA7kb9mI8NoBF6+w9WE9IrxWnKK5KlPI2bg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/base": "5.0.0-beta.40", + "@mui/core-downloads-tracker": "^5.15.20", + "@mui/system": "^5.15.20", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.20", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/@mui/private-theming": { + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.20.tgz", + "integrity": "sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.15.20", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz", + "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.20.tgz", + "integrity": "sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.15.20", + "@mui/styled-engine": "^5.15.14", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.20", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.14", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", + "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.20.tgz", + "integrity": "sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@types/prop-types": "^15.7.11", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@remix-run/router": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz", + "integrity": "sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", + "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", + "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", + "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", + "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", + "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", + "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", + "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", + "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", + "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", + "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", + "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", + "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", + "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", + "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" + }, + "node_modules/@types/dompurify": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.2.0.tgz", + "integrity": "sha512-Fgg31wv9QbLDA0SpTOXO3MaxySc4DKGLi8sna4/Utjo4r3ZRPdCt4UQee8BWr+Q5z21yifghREPJGYaEOEIACg==", + "deprecated": "This is a stub types definition. dompurify provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "dompurify": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/file-saver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz", + "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==", + "dev": true + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + }, + "node_modules/@types/lodash": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==" + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/prismjs": { + "version": "1.26.5", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", + "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + }, + "node_modules/@types/react": { + "version": "18.2.67", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.67.tgz", + "integrity": "sha512-vkIE2vTIMHQ/xL0rgmuoECBCkZFZeHr49HeWSc24AptMbNRo7pwSBvj73rlJJs9fGKj0koS+V7kQB1jHS0uCgw==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-datepicker": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/react-datepicker/-/react-datepicker-7.0.0.tgz", + "integrity": "sha512-4tWwOUq589tozyQPBVEqGNng5DaZkomx5IVNuur868yYdgjH6RaL373/HKiVt1IDoNNXYiTGspm1F7kjrarM8Q==", + "deprecated": "This is a stub types definition. react-datepicker provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "react-datepicker": "*" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.22", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.22.tgz", + "integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-modal": { + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/@types/react-modal/-/react-modal-3.16.3.tgz", + "integrity": "sha512-xXuGavyEGaFQDgBv4UVm8/ZsG+qxeQ7f77yNrW3n+1J6XAstUy5rYHeIHPh1KzsGc6IkCIdu6lQ2xWzu1jBTLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-window": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/@types/react-window/-/react-window-1.8.8.tgz", + "integrity": "sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "optional": true + }, + "node_modules/@types/xterm": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/xterm/-/xterm-2.0.3.tgz", + "integrity": "sha512-Owlz29ThHtn2RQry87juaNYeIc4Dr8ykLLX0JKKt4SdO6ujwJnsXCpBAr6bwo/f4L3xSfM9KA7OnPPf9Xit6tA==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/@xterm/addon-fit": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-fit/-/addon-fit-0.10.0.tgz", + "integrity": "sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ==", + "license": "MIT", + "peerDependencies": { + "@xterm/xterm": "^5.0.0" + } + }, + "node_modules/@xterm/addon-ligatures": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-ligatures/-/addon-ligatures-0.9.0.tgz", + "integrity": "sha512-zVV1AHV1SIm/rdzR5VDPyg+qUnR1SjH4H75iXiB7r6YDa1yEHIqc/EwnUIwz+yeeZozkh8hjbH80L7luEgtxtQ==", + "license": "MIT", + "dependencies": { + "font-finder": "^1.1.0", + "font-ligatures": "^1.4.1" + }, + "engines": { + "node": ">8.0.0" + }, + "peerDependencies": { + "@xterm/xterm": "^5.0.0" + } + }, + "node_modules/@xterm/addon-search": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.15.0.tgz", + "integrity": "sha512-ZBZKLQ+EuKE83CqCmSSz5y1tx+aNOCUaA7dm6emgOX+8J9H1FWXZyrKfzjwzV+V14TV3xToz1goIeRhXBS5qjg==", + "license": "MIT", + "peerDependencies": { + "@xterm/xterm": "^5.0.0" + } + }, + "node_modules/@xterm/addon-unicode11": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.8.0.tgz", + "integrity": "sha512-LxinXu8SC4OmVa6FhgwsVCBZbr8WoSGzBl2+vqe8WcQ6hb1r6Gj9P99qTNdPiFPh4Ceiu2pC8xukZ6+2nnh49Q==", + "license": "MIT", + "peerDependencies": { + "@xterm/xterm": "^5.0.0" + } + }, + "node_modules/@xterm/addon-web-links": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-web-links/-/addon-web-links-0.11.0.tgz", + "integrity": "sha512-nIHQ38pQI+a5kXnRaTgwqSHnX7KE6+4SVoceompgHL26unAxdfP6IPqUTSYPQgSwM56hsElfoNrrW5V7BUED/Q==", + "license": "MIT", + "peerDependencies": { + "@xterm/xterm": "^5.0.0" + } + }, + "node_modules/@xterm/xterm": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.5.0.tgz", + "integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz", + "integrity": "sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/attr-accept": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", + "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.18", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", + "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001591", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-macros/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001599", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001599.tgz", + "integrity": "sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chart.js": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.2.tgz", + "integrity": "sha512-6GD7iKwFpP5kbSD4MeRRRlTnQvxfQREy36uEtm1hzHzcOqwWx0YEHuspuoNlslu+nciLIB7fjjsHkUv/FzFcOg==", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/debounce": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-2.0.0.tgz", + "integrity": "sha512-xRetU6gL1VJbs85Mc4FoEGSjQxzpdxRyFhe3lmWFyy2EzydIcD4xzUvRJMD+NPDfMwKNhxa3PvsIOU32luIWeA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dompurify": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.4.tgz", + "integrity": "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==", + "dev": true, + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.710", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.710.tgz", + "integrity": "sha512-w+9yAVHoHhysCa+gln7AzbO9CdjFcL/wN/5dd+XW/Msl2d/4+WisEaCF1nty0xbAKaxdaJfgLB2296U7zZB7BA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-ex/node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/es-abstract": { + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", + "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", + "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.17", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.10" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz", + "integrity": "sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==", + "license": "BSD-3-Clause" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-equals": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", + "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, + "node_modules/file-selector": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz", + "integrity": "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/flowbite": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-2.5.2.tgz", + "integrity": "sha512-kwFD3n8/YW4EG8GlY3Od9IoKND97kitO+/ejISHSqpn3vw2i5K/+ZI8Jm2V+KC4fGdnfi0XZ+TzYqQb4Q1LshA==", + "dependencies": { + "@popperjs/core": "^2.9.3", + "flowbite-datepicker": "^1.3.0", + "mini-svg-data-uri": "^1.4.3" + } + }, + "node_modules/flowbite-datepicker": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/flowbite-datepicker/-/flowbite-datepicker-1.3.2.tgz", + "integrity": "sha512-6Nfm0MCVX3mpaR7YSCjmEO2GO8CDt6CX8ZpQnGdeu03WUCWtEPQ/uy0PUiNtIJjJZWnX0Cm3H55MOhbD1g+E/g==", + "dependencies": { + "@rollup/plugin-node-resolve": "^15.2.3", + "flowbite": "^2.0.0" + } + }, + "node_modules/flowbite-react": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/flowbite-react/-/flowbite-react-0.7.8.tgz", + "integrity": "sha512-hYYPvIixokNgAlPbmxNAYFLlLi61z492v8hj1jQHykhuesPGTifDFeQcDxKgQvENqc4bRdBdjrKOvnq7D+pm7g==", + "dependencies": { + "@floating-ui/core": "1.6.0", + "@floating-ui/react": "0.26.10", + "classnames": "2.5.1", + "debounce": "2.0.0", + "flowbite": "2.3.0", + "react-icons": "5.0.1", + "tailwind-merge": "2.2.2" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18", + "tailwindcss": "^3" + } + }, + "node_modules/flowbite-react/node_modules/flowbite": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-2.3.0.tgz", + "integrity": "sha512-pm3JRo8OIJHGfFYWgaGpPv8E+UdWy0Z3gEAGufw+G/1dusaU/P1zoBLiQpf2/+bYAi+GBQtPVG86KYlV0W+AFQ==", + "dependencies": { + "@popperjs/core": "^2.9.3", + "mini-svg-data-uri": "^1.4.3" + } + }, + "node_modules/font-finder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/font-finder/-/font-finder-1.1.0.tgz", + "integrity": "sha512-wpCL2uIbi6GurJbU7ZlQ3nGd61Ho+dSU6U83/xJT5UPFfN35EeCW/rOtS+5k+IuEZu2SYmHzDIPL9eA5tSYRAw==", + "license": "MIT", + "dependencies": { + "get-system-fonts": "^2.0.0", + "promise-stream-reader": "^1.0.1" + }, + "engines": { + "node": ">8.0.0" + } + }, + "node_modules/font-ligatures": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/font-ligatures/-/font-ligatures-1.4.1.tgz", + "integrity": "sha512-7W6zlfyhvCqShZ5ReUWqmSd9vBaUudW0Hxis+tqUjtHhsPU+L3Grf8mcZAtCiXHTzorhwdRTId2WeH/88gdFkw==", + "license": "MIT", + "dependencies": { + "font-finder": "^1.0.3", + "lru-cache": "^6.0.0", + "opentype.js": "^0.8.0" + }, + "engines": { + "node": ">8.0.0" + } + }, + "node_modules/font-ligatures/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/font-ligatures/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "12.4.7", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.4.7.tgz", + "integrity": "sha512-VhrcbtcAMXfxlrjeHPpWVu2+mkcoR31e02aNSR7OUS/hZAciKa8q6o3YN2mA1h+jjscRsSyKvX6E1CiY/7OLMw==", + "dependencies": { + "motion-dom": "^12.4.5", + "motion-utils": "^12.0.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-system-fonts": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-system-fonts/-/get-system-fonts-2.0.2.tgz", + "integrity": "sha512-zzlgaYnHMIEgHRrfC7x0Qp0Ylhw/sHpM6MHXeVBTYIsvGf5GpbnClB+Q6rAPdn+0gd2oZZIo6Tj3EaWrt4VhDQ==", + "license": "MIT", + "engines": { + "node": ">8.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.424.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.424.0.tgz", + "integrity": "sha512-x2Nj2aytk1iOyHqt4hKenfVlySq0rYxNeEf8hE0o+Yh0iE36Rqz0rkngVdv2uQtjZ70LAE73eeplhhptYt9x4Q==", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" + } + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/motion-dom": { + "version": "12.4.5", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.4.5.tgz", + "integrity": "sha512-Q2xmhuyYug1CGTo0jdsL05EQ4RhIYXlggFS/yPhQQRNzbrhjKQ1tbjThx5Plv68aX31LsUQRq4uIkuDxdO5vRQ==", + "dependencies": { + "motion-utils": "^12.0.0" + } + }, + "node_modules/motion-utils": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.0.0.tgz", + "integrity": "sha512-MNFiBKbbqnmvOjkPyOKgHUp3Q6oiokLkI1bEwm5QA28cxMZrv0CbbBGDNmhF6DIXsi1pCQBSs0dX8xjeER1tmA==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opentype.js": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/opentype.js/-/opentype.js-0.8.0.tgz", + "integrity": "sha512-FQHR4oGP+a0m/f6yHoRpBOIbn/5ZWxKd4D/djHVJu8+KpBTYrJda0b7mLcgDEMWXE9xBCJm+qb0yv6FcvPjukg==", + "license": "MIT", + "dependencies": { + "tiny-inflate": "^1.0.2" + }, + "bin": { + "ot": "bin/ot" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-ms": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", + "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.36.tgz", + "integrity": "sha512-/n7eumA6ZjFHAsbX30yhHup/IMkOmlmvtEi7P+6RMYf+bGJSUHc3geH4a0NSZxAz/RJfiS9tooCTs9LAVYUZKw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-import/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-ms": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", + "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", + "dependencies": { + "parse-ms": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prism-react-renderer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", + "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", + "dependencies": { + "@types/prismjs": "^1.26.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise-stream-reader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-stream-reader/-/promise-stream-reader-1.0.1.tgz", + "integrity": "sha512-Tnxit5trUjBAqqZCGWwjyxhmgMN4hGrtpW3Oc/tRI4bpm/O2+ej72BB08l6JBnGQgVDGCLvHFGjGgQS6vzhwXg==", + "license": "MIT", + "engines": { + "node": ">8.0.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-base16-styling": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.10.0.tgz", + "integrity": "sha512-H1k2eFB6M45OaiRru3PBXkuCcn2qNmx+gzLb4a9IPMR7tMH8oBRXU5jGbPDYG1Hz+82d88ED0vjR8BmqU3pQdg==", + "dependencies": { + "@types/lodash": "^4.17.0", + "color": "^4.2.3", + "csstype": "^3.1.3", + "lodash-es": "^4.17.21" + } + }, + "node_modules/react-chartjs-2": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz", + "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==", + "peerDependencies": { + "chart.js": "^4.1.1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-datepicker": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-8.1.0.tgz", + "integrity": "sha512-11gIOrBGK1MOvl4+wxGv4YxTqXf+uoRPtKstYhb/P1cBdRdOP1sL26VE31apmDnvw8wSYfJe9AWwWbKqmM9tzw==", + "dependencies": { + "@floating-ui/react": "^0.27.3", + "clsx": "^2.1.1", + "date-fns": "^4.1.0" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc", + "react-dom": "^16.9.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" + } + }, + "node_modules/react-datepicker/node_modules/@floating-ui/react": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.27.4.tgz", + "integrity": "sha512-05mXdkUiVh8NCEcYKQ2C9SV9IkZ9k/dFtYmaEIN2riLv80UHoXylgBM76cgPJYfLJM3dJz7UE5MOVH0FypMd2Q==", + "dependencies": { + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.9", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, + "node_modules/react-datepicker/node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-dropzone": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", + "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", + "dependencies": { + "attr-accept": "^2.2.2", + "file-selector": "^0.6.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" + } + }, + "node_modules/react-icons": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.0.1.tgz", + "integrity": "sha512-WqLZJ4bLzlhmsvme6iFdgO8gfZP17rfjYEJ2m9RsZjZ+cc4k1hTzknEz63YS1MeT50kVzoa1Nz36f4BEx+Wigw==", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-json-tree": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/react-json-tree/-/react-json-tree-0.19.0.tgz", + "integrity": "sha512-PqT1WRVcWP+RROsZPQfNEKIC1iM/ZMfY4g5jN6oDnXp5593PPRAYgoHcgYCDjflAHQMtxl8XGdlTwIBdEGUXvw==", + "dependencies": { + "@types/lodash": "^4.17.0", + "react-base16-styling": "^0.10.0" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "license": "MIT" + }, + "node_modules/react-modal": { + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.3.tgz", + "integrity": "sha512-yCYRJB5YkeQDQlTt17WGAgFJ7jr2QYcWa1SHqZ3PluDmnKJ/7+tVU+E6uKyZ0nODaeEj+xCpK4LcSnKXLMC0Nw==", + "license": "MIT", + "dependencies": { + "exenv": "^1.2.0", + "prop-types": "^15.7.2", + "react-lifecycles-compat": "^3.0.0", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19", + "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.22.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz", + "integrity": "sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==", + "dependencies": { + "@remix-run/router": "1.15.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.22.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz", + "integrity": "sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==", + "dependencies": { + "@remix-run/router": "1.15.3", + "react-router": "6.22.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-smooth": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz", + "integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==", + "dependencies": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-split": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/react-split/-/react-split-2.0.14.tgz", + "integrity": "sha512-bKWydgMgaKTg/2JGQnaJPg51T6dmumTWZppFgEbbY0Fbme0F5TuatAScCLaqommbGQQf/ZT1zaejuPDriscISA==", + "dependencies": { + "prop-types": "^15.5.7", + "split.js": "^1.6.0" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-tag-input-component": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/react-tag-input-component/-/react-tag-input-component-2.0.2.tgz", + "integrity": "sha512-dydI9luVwwv9vrjE5u1TTnkcOVkOVL6mhFti8r6hLi78V2F2EKWQOLptURz79UYbDHLSk6tnbvGl8FE+sMpADg==", + "peerDependencies": { + "react": "^16 || ^17 || ^18", + "react-dom": "^16 || ^17 || ^18" + } + }, + "node_modules/react-toastify": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-10.0.5.tgz", + "integrity": "sha512-mNKt2jBXJg4O7pSdbNUfDdTsK9FIdikfsIE/yUCxbAEXl4HMyJaivrVFcn3Elvt5xvCQYhUZm+hqTIu1UXM3Pw==", + "dependencies": { + "clsx": "^2.1.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/react-use-websocket": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/react-use-websocket/-/react-use-websocket-4.8.1.tgz", + "integrity": "sha512-FTXuG5O+LFozmu1BRfrzl7UIQngECvGJmL7BHsK4TYXuVt+mCizVA8lT0hGSIF0Z0TedF7bOo1nRzOUdginhDw==", + "peerDependencies": { + "react": ">= 18.0.0", + "react-dom": ">= 18.0.0" + } + }, + "node_modules/react-virtualized-auto-sizer": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.25.tgz", + "integrity": "sha512-YHsksEGDfsHbHuaBVDYwJmcktblcHGafz4ZVuYPQYuSHMUGjpwmUCrAOcvMSGMwwk1eFWj1M/1GwYpNPuyhaBg==", + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-window": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.11.tgz", + "integrity": "sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "memoize-one": ">=3.1.1 <6" + }, + "engines": { + "node": ">8.0.0" + }, + "peerDependencies": { + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recharts": { + "version": "2.12.7", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.7.tgz", + "integrity": "sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^16.10.2", + "react-smooth": "^4.0.0", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", + "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "devOptional": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.13.0", + "@rollup/rollup-android-arm64": "4.13.0", + "@rollup/rollup-darwin-arm64": "4.13.0", + "@rollup/rollup-darwin-x64": "4.13.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", + "@rollup/rollup-linux-arm64-gnu": "4.13.0", + "@rollup/rollup-linux-arm64-musl": "4.13.0", + "@rollup/rollup-linux-riscv64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-musl": "4.13.0", + "@rollup/rollup-win32-arm64-msvc": "4.13.0", + "@rollup/rollup-win32-ia32-msvc": "4.13.0", + "@rollup/rollup-win32-x64-msvc": "4.13.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split.js": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/split.js/-/split.js-1.6.5.tgz", + "integrity": "sha512-mPTnGCiS/RiuTNsVhCm9De9cCAUsrNFFviRbADdKiiV+Kk8HKp/0fWu7Kr8pi3/yBmsqLFHuXGT9UUZ+CNLwFw==" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + }, + "node_modules/tailwind-merge": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.2.tgz", + "integrity": "sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==", + "dependencies": { + "@babel/runtime": "^7.24.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", + "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/vite": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz", + "integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xterm": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/xterm/-/xterm-5.3.0.tgz", + "integrity": "sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==", + "deprecated": "This package is now deprecated. Move to @xterm/xterm instead.", + "license": "MIT" + }, + "node_modules/xterm-addon-fit": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.8.0.tgz", + "integrity": "sha512-yj3Np7XlvxxhYF/EJ7p3KHaMt6OdwQ+HDu573Vx1lRXsVxOcnVJs51RgjZOouIZOczTsskaS+CpXspK81/DLqw==", + "deprecated": "This package is now deprecated. Move to @xterm/addon-fit instead.", + "license": "MIT", + "peerDependencies": { + "xterm": "^5.0.0" + } + }, + "node_modules/xterm-addon-ligatures": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/xterm-addon-ligatures/-/xterm-addon-ligatures-0.7.0.tgz", + "integrity": "sha512-5HXKCN5vB8KkqLIloItZkYAwMWF4Y2yOQsc4oFUXOjV3GnZskZpH0W+8rJH+80wxLNym7OMpdmg3a/Vd/+owDg==", + "deprecated": "This package is now deprecated. Move to @xterm/addon-ligatures instead.", + "license": "MIT", + "dependencies": { + "font-finder": "^1.1.0", + "font-ligatures": "^1.4.1" + }, + "engines": { + "node": ">8.0.0" + }, + "peerDependencies": { + "xterm": "^5.0.0" + } + }, + "node_modules/xterm-addon-search": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/xterm-addon-search/-/xterm-addon-search-0.13.0.tgz", + "integrity": "sha512-sDUwG4CnqxUjSEFh676DlS3gsh3XYCzAvBPSvJ5OPgF3MRL3iHLPfsb06doRicLC2xXNpeG2cWk8x1qpESWJMA==", + "deprecated": "This package is now deprecated. Move to @xterm/addon-search instead.", + "license": "MIT", + "peerDependencies": { + "xterm": "^5.0.0" + } + }, + "node_modules/xterm-addon-unicode11": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xterm-addon-unicode11/-/xterm-addon-unicode11-0.6.0.tgz", + "integrity": "sha512-5pkb8YoS/deRtNqQRw8t640mu+Ga8B2MG3RXGQu0bwgcfr8XiXIRI880TWM49ICAHhTmnOLPzIIBIjEnCq7k2A==", + "deprecated": "This package is now deprecated. Move to @xterm/addon-unicode11 instead.", + "license": "MIT", + "peerDependencies": { + "xterm": "^5.0.0" + } + }, + "node_modules/xterm-addon-web-links": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/xterm-addon-web-links/-/xterm-addon-web-links-0.9.0.tgz", + "integrity": "sha512-LIzi4jBbPlrKMZF3ihoyqayWyTXAwGfu4yprz1aK2p71e9UKXN6RRzVONR0L+Zd+Ik5tPVI9bwp9e8fDTQh49Q==", + "deprecated": "This package is now deprecated. Move to @xterm/addon-web-links instead.", + "license": "MIT", + "peerDependencies": { + "xterm": "^5.0.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" + }, + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@babel/code-frame": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.1.tgz", + "integrity": "sha512-bC49z4spJQR3j8vFtJBLqzyzFV0ciuL5HYX7qfSl3KEqeMVV+eTquRvmXxpvB0AMubRrvv7y5DILiLLPi57Ewg==", + "requires": { + "@babel/highlight": "^7.24.1", + "picocolors": "^1.0.0" + } + }, + "@babel/compat-data": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "dev": true + }, + "@babel/core": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.1.tgz", + "integrity": "sha512-F82udohVyIgGAY2VVj/g34TpFUG606rumIHjTfVbssPg2zTR7PuuEpZcX8JA6sgBfIYmJrFtWgPvHQuJamVqZQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + } + }, + "@babel/generator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "dev": true, + "requires": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.1.tgz", + "integrity": "sha512-HfEWzysMyOa7xI5uQHc/OcZf67/jc+xe/RZlznWQHhbb8Pg1SkRdbK4yEi61aY8wxQA7PkSfoojtLQP/Kpe3og==", + "requires": { + "@babel/types": "^7.24.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==" + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + }, + "@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "dev": true, + "requires": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + } + }, + "@babel/highlight": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.1.tgz", + "integrity": "sha512-EPmDPxidWe/Ex+HTFINpvXdPHRmgSF3T8hGvzondYjmgzTQ/0EbLpSxyt+w3zzlYSk9cNBQNF9k0dT5Z2NiBjw==", + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + }, + "@babel/parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "dev": true + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz", + "integrity": "sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", + "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.24.0" + } + }, + "@babel/runtime": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", + "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + } + }, + "@babel/traverse": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + } + } + }, + "@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "requires": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "requires": { + "@emotion/memoize": "^0.8.1" + } + }, + "@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "@emotion/react": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", + "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz", + "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==", + "requires": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "@emotion/styled": { + "version": "11.11.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.5.tgz", + "integrity": "sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==", + "requires": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.2", + "@emotion/serialize": "^1.1.4", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + } + }, + "@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "requires": {} + }, + "@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, + "@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true + }, + "@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "requires": { + "@floating-ui/utils": "^0.2.1" + } + }, + "@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "requires": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "@floating-ui/react": { + "version": "0.26.10", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.10.tgz", + "integrity": "sha512-sh6f9gVvWQdEzLObrWbJ97c0clJObiALsFe0LiR/kb3tDRKwEhObASEH2QyfdoO/ZBPzwxa9j+nYFo+sqgbioA==", + "requires": { + "@floating-ui/react-dom": "^2.0.0", + "@floating-ui/utils": "^0.2.0", + "tabbable": "^6.0.0" + } + }, + "@floating-ui/react-dom": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "requires": { + "@floating-ui/dom": "^1.0.0" + } + }, + "@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==" + }, + "@heroicons/react": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.2.0.tgz", + "integrity": "sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==", + "requires": {} + }, + "@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, + "@mui/base": { + "version": "5.0.0-beta.40", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", + "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==", + "requires": { + "@babel/runtime": "^7.23.9", + "@floating-ui/react-dom": "^2.0.8", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", + "@popperjs/core": "^2.11.8", + "clsx": "^2.1.0", + "prop-types": "^15.8.1" + } + }, + "@mui/core-downloads-tracker": { + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.20.tgz", + "integrity": "sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==" + }, + "@mui/icons-material": { + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.20.tgz", + "integrity": "sha512-oGcKmCuHaYbAAoLN67WKSXtHmEgyWcJToT1uRtmPyxMj9N5uqwc/mRtEnst4Wj/eGr+zYH2FiZQ79v9k7kSk1Q==", + "requires": { + "@babel/runtime": "^7.23.9" + } + }, + "@mui/material": { + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.20.tgz", + "integrity": "sha512-tVq3l4qoXx/NxUgIx/x3lZiPn/5xDbdTE8VrLczNpfblLYZzlrbxA7kb9mI8NoBF6+w9WE9IrxWnKK5KlPI2bg==", + "requires": { + "@babel/runtime": "^7.23.9", + "@mui/base": "5.0.0-beta.40", + "@mui/core-downloads-tracker": "^5.15.20", + "@mui/system": "^5.15.20", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.20", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "dependencies": { + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + } + } + }, + "@mui/private-theming": { + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.20.tgz", + "integrity": "sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==", + "requires": { + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.15.20", + "prop-types": "^15.8.1" + } + }, + "@mui/styled-engine": { + "version": "5.15.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz", + "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==", + "requires": { + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + } + }, + "@mui/system": { + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.20.tgz", + "integrity": "sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==", + "requires": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.15.20", + "@mui/styled-engine": "^5.15.14", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.20", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + } + }, + "@mui/types": { + "version": "7.2.14", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", + "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", + "requires": {} + }, + "@mui/utils": { + "version": "5.15.20", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.20.tgz", + "integrity": "sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==", + "requires": { + "@babel/runtime": "^7.23.9", + "@types/prop-types": "^15.7.11", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "dependencies": { + "react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true + }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" + }, + "@remix-run/router": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz", + "integrity": "sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==" + }, + "@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "requires": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "dependencies": { + "resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "requires": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "dependencies": { + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==" + } + } + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", + "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", + "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", + "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", + "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", + "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", + "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", + "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", + "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", + "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", + "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", + "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", + "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", + "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "dev": true, + "optional": true + }, + "@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==" + }, + "@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + }, + "@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==" + }, + "@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "requires": { + "@types/d3-color": "*" + } + }, + "@types/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==" + }, + "@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "requires": { + "@types/d3-time": "*" + } + }, + "@types/d3-shape": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", + "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "requires": { + "@types/d3-path": "*" + } + }, + "@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" + }, + "@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" + }, + "@types/dompurify": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.2.0.tgz", + "integrity": "sha512-Fgg31wv9QbLDA0SpTOXO3MaxySc4DKGLi8sna4/Utjo4r3ZRPdCt4UQee8BWr+Q5z21yifghREPJGYaEOEIACg==", + "dev": true, + "requires": { + "dompurify": "*" + } + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "@types/file-saver": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz", + "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==", + "dev": true + }, + "@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + }, + "@types/lodash": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==" + }, + "@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "@types/prismjs": { + "version": "1.26.5", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", + "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==" + }, + "@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + }, + "@types/react": { + "version": "18.2.67", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.67.tgz", + "integrity": "sha512-vkIE2vTIMHQ/xL0rgmuoECBCkZFZeHr49HeWSc24AptMbNRo7pwSBvj73rlJJs9fGKj0koS+V7kQB1jHS0uCgw==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-datepicker": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/react-datepicker/-/react-datepicker-7.0.0.tgz", + "integrity": "sha512-4tWwOUq589tozyQPBVEqGNng5DaZkomx5IVNuur868yYdgjH6RaL373/HKiVt1IDoNNXYiTGspm1F7kjrarM8Q==", + "dev": true, + "requires": { + "react-datepicker": "*" + } + }, + "@types/react-dom": { + "version": "18.2.22", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.22.tgz", + "integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-modal": { + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/@types/react-modal/-/react-modal-3.16.3.tgz", + "integrity": "sha512-xXuGavyEGaFQDgBv4UVm8/ZsG+qxeQ7f77yNrW3n+1J6XAstUy5rYHeIHPh1KzsGc6IkCIdu6lQ2xWzu1jBTLg==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "@types/react-transition-group": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "requires": { + "@types/react": "*" + } + }, + "@types/react-window": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/@types/react-window/-/react-window-1.8.8.tgz", + "integrity": "sha512-8Ls660bHR1AUA2kuRvVG9D/4XpRC6wjAaPT9dil7Ckc76eP9TKWZwwmgfq8Q1LANX3QNDnoU4Zp48A3w+zK69Q==", + "requires": { + "@types/react": "*" + } + }, + "@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" + }, + "@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + }, + "@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "optional": true + }, + "@types/xterm": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/xterm/-/xterm-2.0.3.tgz", + "integrity": "sha512-Owlz29ThHtn2RQry87juaNYeIc4Dr8ykLLX0JKKt4SdO6ujwJnsXCpBAr6bwo/f4L3xSfM9KA7OnPPf9Xit6tA==" + }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "@vitejs/plugin-react": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "dev": true, + "requires": { + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.0" + } + }, + "@xterm/addon-fit": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-fit/-/addon-fit-0.10.0.tgz", + "integrity": "sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ==", + "requires": {} + }, + "@xterm/addon-ligatures": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-ligatures/-/addon-ligatures-0.9.0.tgz", + "integrity": "sha512-zVV1AHV1SIm/rdzR5VDPyg+qUnR1SjH4H75iXiB7r6YDa1yEHIqc/EwnUIwz+yeeZozkh8hjbH80L7luEgtxtQ==", + "requires": { + "font-finder": "^1.1.0", + "font-ligatures": "^1.4.1" + } + }, + "@xterm/addon-search": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.15.0.tgz", + "integrity": "sha512-ZBZKLQ+EuKE83CqCmSSz5y1tx+aNOCUaA7dm6emgOX+8J9H1FWXZyrKfzjwzV+V14TV3xToz1goIeRhXBS5qjg==", + "requires": {} + }, + "@xterm/addon-unicode11": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.8.0.tgz", + "integrity": "sha512-LxinXu8SC4OmVa6FhgwsVCBZbr8WoSGzBl2+vqe8WcQ6hb1r6Gj9P99qTNdPiFPh4Ceiu2pC8xukZ6+2nnh49Q==", + "requires": {} + }, + "@xterm/addon-web-links": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@xterm/addon-web-links/-/addon-web-links-0.11.0.tgz", + "integrity": "sha512-nIHQ38pQI+a5kXnRaTgwqSHnX7KE6+4SVoceompgHL26unAxdfP6IPqUTSYPQgSwM56hsElfoNrrW5V7BUED/Q==", + "requires": {} + }, + "@xterm/xterm": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.5.0.tgz", + "integrity": "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==" + }, + "acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + } + }, + "array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + } + }, + "array.prototype.findlast": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz", + "integrity": "sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + } + }, + "attr-accept": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz", + "integrity": "sha512-7prDjvt9HmqiZ0cl5CRjtS84sEyhsHP2coDkaZKRKVfCDo9s7iw7ChVmar78Gu9pC4SoR/28wFu/G5JJhTnqEg==" + }, + "autoprefixer": { + "version": "10.4.18", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", + "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", + "dev": true, + "requires": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001591", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, + "babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "dependencies": { + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + } + }, + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, + "caniuse-lite": { + "version": "1.0.30001599", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001599.tgz", + "integrity": "sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chart.js": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.2.tgz", + "integrity": "sha512-6GD7iKwFpP5kbSD4MeRRRlTnQvxfQREy36uEtm1hzHzcOqwWx0YEHuspuoNlslu+nciLIB7fjjsHkUv/FzFcOg==", + "requires": { + "@kurkle/color": "^0.3.0" + } + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" + }, + "color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "dependencies": { + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + } + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "requires": { + "internmap": "1 - 2" + } + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" + }, + "d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" + }, + "d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" + }, + "d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "requires": { + "d3-color": "1 - 3" + } + }, + "d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" + }, + "d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "requires": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + } + }, + "d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "requires": { + "d3-path": "^3.1.0" + } + }, + "d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "requires": { + "d3-array": "2 - 3" + } + }, + "d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "requires": { + "d3-time": "1 - 3" + } + }, + "d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" + }, + "data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==" + }, + "debounce": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-2.0.0.tgz", + "integrity": "sha512-xRetU6gL1VJbs85Mc4FoEGSjQxzpdxRyFhe3lmWFyy2EzydIcD4xzUvRJMD+NPDfMwKNhxa3PvsIOU32luIWeA==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "dompurify": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.4.tgz", + "integrity": "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==", + "dev": true, + "requires": { + "@types/trusted-types": "^2.0.7" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "electron-to-chromium": { + "version": "1.4.710", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.710.tgz", + "integrity": "sha512-w+9yAVHoHhysCa+gln7AzbO9CdjFcL/wN/5dd+XW/Msl2d/4+WisEaCF1nty0xbAKaxdaJfgLB2296U7zZB7BA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + } + } + }, + "es-abstract": { + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", + "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + } + }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, + "es-iterator-helpers": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", + "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + } + }, + "es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + } + }, + "es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-plugin-react": { + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", + "dev": true, + "requires": { + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.17", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.10" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "requires": {} + }, + "eslint-plugin-react-refresh": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz", + "integrity": "sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-equals": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", + "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==" + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, + "file-selector": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.6.0.tgz", + "integrity": "sha512-QlZ5yJC0VxHxQQsQhXvBaC7VRJ2uaxTf+Tfpu4Z/OcVQJVpZO+DGU0rkoVW5ce2SccxugvpBJoMvUs59iILYdw==", + "requires": { + "tslib": "^2.4.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "flowbite": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-2.5.2.tgz", + "integrity": "sha512-kwFD3n8/YW4EG8GlY3Od9IoKND97kitO+/ejISHSqpn3vw2i5K/+ZI8Jm2V+KC4fGdnfi0XZ+TzYqQb4Q1LshA==", + "requires": { + "@popperjs/core": "^2.9.3", + "flowbite-datepicker": "^1.3.0", + "mini-svg-data-uri": "^1.4.3" + } + }, + "flowbite-datepicker": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/flowbite-datepicker/-/flowbite-datepicker-1.3.2.tgz", + "integrity": "sha512-6Nfm0MCVX3mpaR7YSCjmEO2GO8CDt6CX8ZpQnGdeu03WUCWtEPQ/uy0PUiNtIJjJZWnX0Cm3H55MOhbD1g+E/g==", + "requires": { + "@rollup/plugin-node-resolve": "^15.2.3", + "flowbite": "^2.0.0" + } + }, + "flowbite-react": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/flowbite-react/-/flowbite-react-0.7.8.tgz", + "integrity": "sha512-hYYPvIixokNgAlPbmxNAYFLlLi61z492v8hj1jQHykhuesPGTifDFeQcDxKgQvENqc4bRdBdjrKOvnq7D+pm7g==", + "requires": { + "@floating-ui/core": "1.6.0", + "@floating-ui/react": "0.26.10", + "classnames": "2.5.1", + "debounce": "2.0.0", + "flowbite": "2.3.0", + "react-icons": "5.0.1", + "tailwind-merge": "2.2.2" + }, + "dependencies": { + "flowbite": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/flowbite/-/flowbite-2.3.0.tgz", + "integrity": "sha512-pm3JRo8OIJHGfFYWgaGpPv8E+UdWy0Z3gEAGufw+G/1dusaU/P1zoBLiQpf2/+bYAi+GBQtPVG86KYlV0W+AFQ==", + "requires": { + "@popperjs/core": "^2.9.3", + "mini-svg-data-uri": "^1.4.3" + } + } + } + }, + "font-finder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/font-finder/-/font-finder-1.1.0.tgz", + "integrity": "sha512-wpCL2uIbi6GurJbU7ZlQ3nGd61Ho+dSU6U83/xJT5UPFfN35EeCW/rOtS+5k+IuEZu2SYmHzDIPL9eA5tSYRAw==", + "requires": { + "get-system-fonts": "^2.0.0", + "promise-stream-reader": "^1.0.1" + } + }, + "font-ligatures": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/font-ligatures/-/font-ligatures-1.4.1.tgz", + "integrity": "sha512-7W6zlfyhvCqShZ5ReUWqmSd9vBaUudW0Hxis+tqUjtHhsPU+L3Grf8mcZAtCiXHTzorhwdRTId2WeH/88gdFkw==", + "requires": { + "font-finder": "^1.0.3", + "lru-cache": "^6.0.0", + "opentype.js": "^0.8.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true + }, + "framer-motion": { + "version": "12.4.7", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.4.7.tgz", + "integrity": "sha512-VhrcbtcAMXfxlrjeHPpWVu2+mkcoR31e02aNSR7OUS/hZAciKa8q6o3YN2mA1h+jjscRsSyKvX6E1CiY/7OLMw==", + "requires": { + "motion-dom": "^12.4.5", + "motion-utils": "^12.0.0", + "tslib": "^2.4.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + } + }, + "get-system-fonts": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-system-fonts/-/get-system-fonts-2.0.2.tgz", + "integrity": "sha512-zzlgaYnHMIEgHRrfC7x0Qp0Ylhw/sHpM6MHXeVBTYIsvGf5GpbnClB+Q6rAPdn+0gd2oZZIo6Tj3EaWrt4VhDQ==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + } + }, + "internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" + }, + "is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + } + }, + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "requires": { + "hasown": "^2.0.2" + } + }, + "is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "requires": { + "is-typed-array": "^1.1.13" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.14" + } + }, + "is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "requires": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + } + }, + "jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "requires": { + "immediate": "~3.0.5" + } + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==" + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "lucide-react": { + "version": "0.424.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.424.0.tgz", + "integrity": "sha512-x2Nj2aytk1iOyHqt4hKenfVlySq0rYxNeEf8hE0o+Yh0iE36Rqz0rkngVdv2uQtjZ70LAE73eeplhhptYt9x4Q==", + "requires": {} + }, + "memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + }, + "motion-dom": { + "version": "12.4.5", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.4.5.tgz", + "integrity": "sha512-Q2xmhuyYug1CGTo0jdsL05EQ4RhIYXlggFS/yPhQQRNzbrhjKQ1tbjThx5Plv68aX31LsUQRq4uIkuDxdO5vRQ==", + "requires": { + "motion-utils": "^12.0.0" + } + }, + "motion-utils": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.0.0.tgz", + "integrity": "sha512-MNFiBKbbqnmvOjkPyOKgHUp3Q6oiokLkI1bEwm5QA28cxMZrv0CbbBGDNmhF6DIXsi1pCQBSs0dX8xjeER1tmA==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + } + }, + "object.hasown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", + "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "dev": true, + "requires": { + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opentype.js": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/opentype.js/-/opentype.js-0.8.0.tgz", + "integrity": "sha512-FQHR4oGP+a0m/f6yHoRpBOIbn/5ZWxKd4D/djHVJu8+KpBTYrJda0b7mLcgDEMWXE9xBCJm+qb0yv6FcvPjukg==", + "requires": { + "tiny-inflate": "^1.0.2" + } + }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse-ms": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", + "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==" + } + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==" + }, + "possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true + }, + "postcss": { + "version": "8.4.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.36.tgz", + "integrity": "sha512-/n7eumA6ZjFHAsbX30yhHup/IMkOmlmvtEi7P+6RMYf+bGJSUHc3geH4a0NSZxAz/RJfiS9tooCTs9LAVYUZKw==", + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.1.0" + } + }, + "postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "requires": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "dependencies": { + "lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==" + } + } + }, + "postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "requires": { + "postcss-selector-parser": "^6.0.11" + } + }, + "postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "pretty-ms": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", + "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", + "requires": { + "parse-ms": "^3.0.0" + } + }, + "prism-react-renderer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", + "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", + "requires": { + "@types/prismjs": "^1.26.0", + "clsx": "^2.0.0" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise-stream-reader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-stream-reader/-/promise-stream-reader-1.0.1.tgz", + "integrity": "sha512-Tnxit5trUjBAqqZCGWwjyxhmgMN4hGrtpW3Oc/tRI4bpm/O2+ej72BB08l6JBnGQgVDGCLvHFGjGgQS6vzhwXg==" + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-base16-styling": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.10.0.tgz", + "integrity": "sha512-H1k2eFB6M45OaiRru3PBXkuCcn2qNmx+gzLb4a9IPMR7tMH8oBRXU5jGbPDYG1Hz+82d88ED0vjR8BmqU3pQdg==", + "requires": { + "@types/lodash": "^4.17.0", + "color": "^4.2.3", + "csstype": "^3.1.3", + "lodash-es": "^4.17.21" + } + }, + "react-chartjs-2": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz", + "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==", + "requires": {} + }, + "react-datepicker": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-8.1.0.tgz", + "integrity": "sha512-11gIOrBGK1MOvl4+wxGv4YxTqXf+uoRPtKstYhb/P1cBdRdOP1sL26VE31apmDnvw8wSYfJe9AWwWbKqmM9tzw==", + "requires": { + "@floating-ui/react": "^0.27.3", + "clsx": "^2.1.1", + "date-fns": "^4.1.0" + }, + "dependencies": { + "@floating-ui/react": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.27.4.tgz", + "integrity": "sha512-05mXdkUiVh8NCEcYKQ2C9SV9IkZ9k/dFtYmaEIN2riLv80UHoXylgBM76cgPJYfLJM3dJz7UE5MOVH0FypMd2Q==", + "requires": { + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.9", + "tabbable": "^6.0.0" + } + }, + "date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==" + } + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "react-dropzone": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.2.3.tgz", + "integrity": "sha512-O3om8I+PkFKbxCukfIR3QAGftYXDZfOE2N1mr/7qebQJHs7U+/RSL/9xomJNpRg9kM5h9soQSdf0Gc7OHF5Fug==", + "requires": { + "attr-accept": "^2.2.2", + "file-selector": "^0.6.0", + "prop-types": "^15.8.1" + } + }, + "react-icons": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.0.1.tgz", + "integrity": "sha512-WqLZJ4bLzlhmsvme6iFdgO8gfZP17rfjYEJ2m9RsZjZ+cc4k1hTzknEz63YS1MeT50kVzoa1Nz36f4BEx+Wigw==", + "requires": {} + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-json-tree": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/react-json-tree/-/react-json-tree-0.19.0.tgz", + "integrity": "sha512-PqT1WRVcWP+RROsZPQfNEKIC1iM/ZMfY4g5jN6oDnXp5593PPRAYgoHcgYCDjflAHQMtxl8XGdlTwIBdEGUXvw==", + "requires": { + "@types/lodash": "^4.17.0", + "react-base16-styling": "^0.10.0" + } + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-modal": { + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.3.tgz", + "integrity": "sha512-yCYRJB5YkeQDQlTt17WGAgFJ7jr2QYcWa1SHqZ3PluDmnKJ/7+tVU+E6uKyZ0nODaeEj+xCpK4LcSnKXLMC0Nw==", + "requires": { + "exenv": "^1.2.0", + "prop-types": "^15.7.2", + "react-lifecycles-compat": "^3.0.0", + "warning": "^4.0.3" + } + }, + "react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true + }, + "react-router": { + "version": "6.22.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz", + "integrity": "sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==", + "requires": { + "@remix-run/router": "1.15.3" + } + }, + "react-router-dom": { + "version": "6.22.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz", + "integrity": "sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==", + "requires": { + "@remix-run/router": "1.15.3", + "react-router": "6.22.3" + } + }, + "react-smooth": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz", + "integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==", + "requires": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + } + }, + "react-split": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/react-split/-/react-split-2.0.14.tgz", + "integrity": "sha512-bKWydgMgaKTg/2JGQnaJPg51T6dmumTWZppFgEbbY0Fbme0F5TuatAScCLaqommbGQQf/ZT1zaejuPDriscISA==", + "requires": { + "prop-types": "^15.5.7", + "split.js": "^1.6.0" + } + }, + "react-tag-input-component": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/react-tag-input-component/-/react-tag-input-component-2.0.2.tgz", + "integrity": "sha512-dydI9luVwwv9vrjE5u1TTnkcOVkOVL6mhFti8r6hLi78V2F2EKWQOLptURz79UYbDHLSk6tnbvGl8FE+sMpADg==", + "requires": {} + }, + "react-toastify": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-10.0.5.tgz", + "integrity": "sha512-mNKt2jBXJg4O7pSdbNUfDdTsK9FIdikfsIE/yUCxbAEXl4HMyJaivrVFcn3Elvt5xvCQYhUZm+hqTIu1UXM3Pw==", + "requires": { + "clsx": "^2.1.0" + } + }, + "react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, + "react-use-websocket": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/react-use-websocket/-/react-use-websocket-4.8.1.tgz", + "integrity": "sha512-FTXuG5O+LFozmu1BRfrzl7UIQngECvGJmL7BHsK4TYXuVt+mCizVA8lT0hGSIF0Z0TedF7bOo1nRzOUdginhDw==", + "requires": {} + }, + "react-virtualized-auto-sizer": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.25.tgz", + "integrity": "sha512-YHsksEGDfsHbHuaBVDYwJmcktblcHGafz4ZVuYPQYuSHMUGjpwmUCrAOcvMSGMwwk1eFWj1M/1GwYpNPuyhaBg==", + "requires": {} + }, + "react-window": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.11.tgz", + "integrity": "sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "memoize-one": ">=3.1.1 <6" + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "requires": { + "pify": "^2.3.0" + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "recharts": { + "version": "2.12.7", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.7.tgz", + "integrity": "sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==", + "requires": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^16.10.2", + "react-smooth": "^4.0.0", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + } + }, + "recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "requires": { + "decimal.js-light": "^2.4.1" + } + }, + "reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + } + }, + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + } + }, + "resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", + "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "devOptional": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.13.0", + "@rollup/rollup-android-arm64": "4.13.0", + "@rollup/rollup-darwin-arm64": "4.13.0", + "@rollup/rollup-darwin-x64": "4.13.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", + "@rollup/rollup-linux-arm64-gnu": "4.13.0", + "@rollup/rollup-linux-arm64-musl": "4.13.0", + "@rollup/rollup-linux-riscv64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-musl": "4.13.0", + "@rollup/rollup-win32-arm64-msvc": "4.13.0", + "@rollup/rollup-win32-ia32-msvc": "4.13.0", + "@rollup/rollup-win32-x64-msvc": "4.13.0", + "@types/estree": "1.0.5", + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + } + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==" + }, + "split.js": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/split.js/-/split.js-1.6.5.tgz", + "integrity": "sha512-mPTnGCiS/RiuTNsVhCm9De9cCAUsrNFFviRbADdKiiV+Kk8HKp/0fWu7Kr8pi3/yBmsqLFHuXGT9UUZ+CNLwFw==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + } + } + }, + "string.prototype.matchall": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", + "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "regexp.prototype.flags": "^1.5.0", + "set-function-name": "^2.0.0", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + }, + "tailwind-merge": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.2.tgz", + "integrity": "sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==", + "requires": { + "@babel/runtime": "^7.24.0" + } + }, + "tailwindcss": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "requires": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "dependencies": { + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + }, + "tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + } + }, + "typed-array-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", + "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + } + }, + "typescript": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "requires": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "vite": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz", + "integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==", + "dev": true, + "requires": { + "esbuild": "^0.19.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + } + }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "requires": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + } + }, + "which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "requires": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + } + }, + "which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "requires": { + "ansi-regex": "^6.0.1" + } + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xterm": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/xterm/-/xterm-5.3.0.tgz", + "integrity": "sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==" + }, + "xterm-addon-fit": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.8.0.tgz", + "integrity": "sha512-yj3Np7XlvxxhYF/EJ7p3KHaMt6OdwQ+HDu573Vx1lRXsVxOcnVJs51RgjZOouIZOczTsskaS+CpXspK81/DLqw==", + "requires": {} + }, + "xterm-addon-ligatures": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/xterm-addon-ligatures/-/xterm-addon-ligatures-0.7.0.tgz", + "integrity": "sha512-5HXKCN5vB8KkqLIloItZkYAwMWF4Y2yOQsc4oFUXOjV3GnZskZpH0W+8rJH+80wxLNym7OMpdmg3a/Vd/+owDg==", + "requires": { + "font-finder": "^1.1.0", + "font-ligatures": "^1.4.1" + } + }, + "xterm-addon-search": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/xterm-addon-search/-/xterm-addon-search-0.13.0.tgz", + "integrity": "sha512-sDUwG4CnqxUjSEFh676DlS3gsh3XYCzAvBPSvJ5OPgF3MRL3iHLPfsb06doRicLC2xXNpeG2cWk8x1qpESWJMA==", + "requires": {} + }, + "xterm-addon-unicode11": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xterm-addon-unicode11/-/xterm-addon-unicode11-0.6.0.tgz", + "integrity": "sha512-5pkb8YoS/deRtNqQRw8t640mu+Ga8B2MG3RXGQu0bwgcfr8XiXIRI880TWM49ICAHhTmnOLPzIIBIjEnCq7k2A==", + "requires": {} + }, + "xterm-addon-web-links": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/xterm-addon-web-links/-/xterm-addon-web-links-0.9.0.tgz", + "integrity": "sha512-LIzi4jBbPlrKMZF3ihoyqayWyTXAwGfu4yprz1aK2p71e9UKXN6RRzVONR0L+Zd+Ik5tPVI9bwp9e8fDTQh49Q==", + "requires": {} + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yaml": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/dashboard-frontend/package.json b/dashboard-frontend/package.json new file mode 100644 index 000000000..57e78ed80 --- /dev/null +++ b/dashboard-frontend/package.json @@ -0,0 +1,78 @@ +{ + "name": "modernweb", + "private": true, + "version": "0.0.0", + "type": "module", + "homepage": "/device-farm", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.5", + "@heroicons/react": "^2.2.0", + "@mui/icons-material": "^5.15.20", + "@mui/material": "^5.15.20", + "@types/react-router-dom": "^5.3.3", + "@types/react-window": "^1.8.8", + "@types/xterm": "^2.0.3", + "@xterm/addon-fit": "^0.10.0", + "@xterm/addon-ligatures": "^0.9.0", + "@xterm/addon-search": "^0.15.0", + "@xterm/addon-unicode11": "^0.8.0", + "@xterm/addon-web-links": "^0.11.0", + "@xterm/xterm": "^5.5.0", + "chart.js": "^4.4.2", + "date-fns": "^3.6.0", + "file-saver": "^2.0.5", + "flowbite": "^2.5.2", + "flowbite-react": "^0.7.8", + "framer-motion": "^12.4.7", + "jszip": "^3.10.1", + "lucide-react": "^0.424.0", + "pretty-ms": "^8.0.0", + "prism-react-renderer": "^2.4.1", + "react": "^18.2.0", + "react-chartjs-2": "^5.2.0", + "react-datepicker": "^8.1.0", + "react-dom": "^18.2.0", + "react-dropzone": "^14.2.3", + "react-json-tree": "^0.19.0", + "react-modal": "^3.16.1", + "react-router-dom": "^6.22.3", + "react-split": "^2.0.14", + "react-tag-input-component": "^2.0.2", + "react-toastify": "^10.0.5", + "react-use-websocket": "^4.8.1", + "react-virtualized-auto-sizer": "^1.0.25", + "react-window": "^1.8.11", + "recharts": "^2.12.7", + "xterm": "^5.3.0", + "xterm-addon-fit": "^0.8.0", + "xterm-addon-ligatures": "^0.7.0", + "xterm-addon-search": "^0.13.0", + "xterm-addon-unicode11": "^0.6.0", + "xterm-addon-web-links": "^0.9.0" + }, + "devDependencies": { + "@types/dompurify": "^3.2.0", + "@types/file-saver": "^2.0.7", + "@types/react": "^18.2.64", + "@types/react-datepicker": "^7.0.0", + "@types/react-dom": "^18.2.21", + "@types/react-modal": "^3.16.3", + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.18", + "eslint": "^8.57.0", + "eslint-plugin-react": "^7.34.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", + "postcss": "^8.4.36", + "tailwindcss": "^3.4.1", + "typescript": "^5.4.2", + "vite": "^5.1.6" + } +} diff --git a/dashboard-frontend/postcss.config.js b/dashboard-frontend/postcss.config.js new file mode 100644 index 000000000..2aa7205d4 --- /dev/null +++ b/dashboard-frontend/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/dashboard-frontend/public/vite.svg b/dashboard-frontend/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/dashboard-frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dashboard-frontend/src/App.css b/dashboard-frontend/src/App.css new file mode 100644 index 000000000..51b1958cc --- /dev/null +++ b/dashboard-frontend/src/App.css @@ -0,0 +1,51 @@ +#root { + max-width: 1536px; + margin: 0 auto; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} + +.device-log-container { + background-color: #010409!important; + font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono"; +} + +.device-log-container .device-log-entry { + color: #e6edf3; + font-size: 12px; +} \ No newline at end of file diff --git a/dashboard-frontend/src/App.tsx b/dashboard-frontend/src/App.tsx new file mode 100644 index 000000000..f135c3adf --- /dev/null +++ b/dashboard-frontend/src/App.tsx @@ -0,0 +1,106 @@ +import { Flowbite } from 'flowbite-react'; +import './App.css'; +import React from 'react'; +import { Routes, Route, Navigate } from 'react-router-dom'; +import DeviceExplorer from './components/device-explorer/device-explorer'; +import Header from './components/header/Header'; +import Builds from './pages/Builds'; +import AppList from './components/apps/Apps'; +import { EnhancedTrends } from './components/stats/trends'; +import Login from './pages/Auth/Login'; +import AdminDashboard from './pages/Auth/AdminDashboard'; +import { AuthProvider } from './contexts/AuthContext'; +import { ConfigProvider } from './contexts/ConfigContext'; +import ProtectedRoute from './components/auth/ProtectedRoute'; +import Users from './pages/Users/Users'; +import Teams from './pages/Teams'; +import Devices from './pages/Devices'; +import Servers from './pages/Servers'; +import ProfilePage from './pages/Profiles/ProfilePage'; + +// Protected route wrapper component +interface ProtectedRouteWrapperProps { + children: React.ReactNode; + adminOnly?: boolean; +} + +const ProtectedRouteWrapper: React.FC = ({ + children, + adminOnly = false, +}) => { + return ( + +
+
+ {children} +
+
+ ); +}; + +// Define route interface +interface ProtectedRoute { + path: string; + element: React.ReactNode; + adminOnly?: boolean; +} + +// Define routes configuration to avoid repetition +const protectedRoutes: ProtectedRoute[] = [ + { path: '/', element: }, + { path: '/device-farm', element: }, + { path: '/builds', element: }, + { path: '/device-farm/builds', element: }, + { path: '/device-farm/#builds', element: }, + { path: '/builds/:buildId/session/:sessionId', element: }, + { path: '/device-farm/builds/:buildId/session/:sessionId', element: }, + { path: '/apps', element: }, + { path: '/stats', element: }, + { path: '/admin', element: , adminOnly: true }, + { path: '/users', element: , adminOnly: true }, + { path: '/teams', element: , adminOnly: true }, + { path: '/devices', element: , adminOnly: true }, + { path: '/servers', element: }, + { path: '/profile', element: }, + // { + // path: '/servers/:nodeId/terminal', + // element: ( + // + // + // + // ), + // }, +]; + +function App() { + return ( + + + + + {/* Public routes */} + } /> + + {/* Protected routes */} + {protectedRoutes.map((route) => ( + + {route.element} + + } + /> + ))} + + {/* Catch all route */} + } /> + + + + + ); +} + +export default App; diff --git a/dashboard-frontend/src/DataContext.tsx b/dashboard-frontend/src/DataContext.tsx new file mode 100644 index 000000000..e55d561fd --- /dev/null +++ b/dashboard-frontend/src/DataContext.tsx @@ -0,0 +1,30 @@ +import React, { createContext, ReactNode, useContext, useState } from 'react'; + +interface Data { + // Define the structure of data you are storing + // Example: + // id: number; + // name: string; + [key: string]: any; // this is a more flexible approach but try to define a more strict type if possible +} + +interface DataContextType { + data: Data | null; + setData: React.Dispatch>; +} + +interface DataProviderProps { + children: ReactNode; +} + +const DataContext = createContext(null); + +export const useData = () => useContext(DataContext); + +export const DataProvider: React.FC = ({ children }) => { + const [data, setData] = useState(null); + + const value = { data, setData }; + + return {children}; +}; diff --git a/dashboard-frontend/src/api-service/api-client.ts b/dashboard-frontend/src/api-service/api-client.ts new file mode 100644 index 000000000..defb64a74 --- /dev/null +++ b/dashboard-frontend/src/api-service/api-client.ts @@ -0,0 +1,93 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/no-unused-vars */ +class ApiClient { + private static JWT_TOKEN: string | null = null; + + public setToken(token: string | null) { + ApiClient.JWT_TOKEN = token; + } + + private addDefaultHeaders(defaultHeader: Record) { + if (ApiClient.JWT_TOKEN) { + defaultHeader['Authorization'] = `Bearer ${ApiClient.JWT_TOKEN}`; + } + return defaultHeader; + } + + public makeGETRequest(url: string, _queryParams: any) { + return fetch(this.formatUrl(url, _queryParams), { + headers: this.addDefaultHeaders({}), + }).then(this.jsonResult); + } + + public makePOSTRequest(url: string, _queryParams: any, body: any) { + return fetch(this.formatUrl(url, _queryParams), { + method: 'POST', + body: JSON.stringify(body || {}), + headers: this.addDefaultHeaders({ 'Content-Type': 'application/json' }), + }).then(this.jsonResult); + } + + public makePUTRequest(url: string, _queryParams: any, body: any) { + return fetch(this.formatUrl(url, _queryParams), { + method: 'PUT', + body: JSON.stringify(body || {}), + headers: this.addDefaultHeaders({ 'Content-Type': 'application/json' }), + }).then(this.jsonResult); + } + + public makePATCHRequest(url: string, _queryParams: any, body: any) { + return fetch(this.formatUrl(url, _queryParams), { + method: 'PATCH', + body: JSON.stringify(body || {}), + headers: this.addDefaultHeaders({ 'Content-Type': 'application/json' }), + }).then(this.jsonResult); + } + + public makeDELETERequest(url: string) { + return fetch(this.formatUrl(url), { + method: 'DELETE', + headers: this.addDefaultHeaders({}), + }).then(this.jsonResult); + } + + public formatUrl(url: string, params?: Record) { + let formattedUrl: URL; + try { + formattedUrl = new URL(url); + } catch (err: any) { + formattedUrl = new URL(`${window.location.origin}/device-farm/api${url}`); + } + if (params) { + Object.entries(params).forEach(([key, value]) => { + formattedUrl.searchParams.set(key, value); + }); + } + return formattedUrl; + } + + private jsonResult(response: Response) { + if (!response.ok) { + return response; + } + return response.json(); + } + + public async makeStreamRequest( + endpoint: string, + abortController?: AbortController, + params?: any, + ) { + const url = this.formatUrl(endpoint, params); + return fetch(url, { + method: 'GET', + headers: { + 'Cache-Control': 'no-cache', + Accept: 'text/plain', + }, + signal: abortController?.signal, + }); + } +} + +export default new ApiClient(); diff --git a/dashboard-frontend/src/api-service/index.ts b/dashboard-frontend/src/api-service/index.ts new file mode 100644 index 000000000..5312fd51c --- /dev/null +++ b/dashboard-frontend/src/api-service/index.ts @@ -0,0 +1,95 @@ +import apiClient from './api-client'; + +export default class DeviceFarmApiService { + public static getDevices(filter?: { sessionId?: string }) { + return apiClient.makeGETRequest('/device', filter || {}); + } + + public static getUploadedAppsList() { + return apiClient.makeGETRequest('/dashboard/uploadedApps', {}); + } + + public static getPendingSessionsCount() { + return apiClient.makeGETRequest('/queue/length', {}); + } + + public static getPendingSessions() { + return apiClient.makeGETRequest('/queue', {}); + } + + public static blockDevice(udid: string, host: string) { + return apiClient.makePOSTRequest('/block', {}, { udid, host }); + } + + public static unblockDevice(udid: string, host: string) { + return apiClient.makePOSTRequest('/unblock', {}, { udid, host }); + } + + public static getBuilds() { + return apiClient.makeGETRequest('/dashboard/build', {}); + } + + public static getSessions() { + return apiClient.makeGETRequest('/dashboard/session', {}); + } + + public static cleanupBuilds(retentionDays: number) { + return apiClient.makePOSTRequest('/dashboard/cleanup', {}, { retentionDays }); + } + + public static getSessionLogs(sessionId: string) { + return apiClient.makeGETRequest(`/dashboard/session/${sessionId}/session_log`, {}); + } + + public static async getDeviceLogs(sessionId: string) { + const response = await apiClient.makeGETRequest( + `/dashboard/session/${sessionId}/device_logs`, + {}, + ); + return response?.logs || []; + } + + public static async getAppProfiling(sessionId: string) { + return apiClient.makeGETRequest(`/dashboard/session/${sessionId}/app_profiling`, {}); + } + + public static async appInformation(file: any, bundleId: string) { + return apiClient.makePOSTRequest('/dashboard/uploadedAppInformation', {}, { file, bundleId }); + } + + public static async deleteUploadedApp(file: any) { + return apiClient.makePOSTRequest('/dashboard/deleteUploadedApp', {}, { id: file }); + } + + public static async updateDeviceTag(host: string, udid: string, tags: string[]) { + return apiClient.makePOSTRequest('/dashboard/device-tag', {}, { host, udid, tags }); + } + + public static async updateDeviceName(host: string, udid: string, name: string) { + return apiClient.makePOSTRequest('/dashboard/device-name', {}, { host, udid, name }); + } + + public static async getServers() { + return apiClient.makeGETRequest('/dashboard/servers', {}); + } + + public static async getAppiumLogForServer(nodeId: string) { + return apiClient.makeStreamRequest(`/dashboard/server/${nodeId}/appium_logs`); + } + + public static async getIosSysLogs( + sessionId: string, + abortController: AbortController, + params?: { predicate: string }, + ) { + return apiClient.makeStreamRequest( + `/dashboard/ios/${sessionId}/device_logs`, + abortController, + params, + ); + } + + public static getBaseUrl() { + return apiClient.formatUrl('').toString(); + } +} diff --git a/dashboard-frontend/src/assets/android-icon.svg b/dashboard-frontend/src/assets/android-icon.svg new file mode 100644 index 000000000..240708454 --- /dev/null +++ b/dashboard-frontend/src/assets/android-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/android-nav-icon.svg b/dashboard-frontend/src/assets/android-nav-icon.svg new file mode 100644 index 000000000..4675821b5 --- /dev/null +++ b/dashboard-frontend/src/assets/android-nav-icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/android-new-icon.svg b/dashboard-frontend/src/assets/android-new-icon.svg new file mode 100644 index 000000000..819b55dc1 --- /dev/null +++ b/dashboard-frontend/src/assets/android-new-icon.svg @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/apple-icon.svg b/dashboard-frontend/src/assets/apple-icon.svg new file mode 100644 index 000000000..46bc4152d --- /dev/null +++ b/dashboard-frontend/src/assets/apple-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/dashboard-frontend/src/assets/apple-nav-icon.svg b/dashboard-frontend/src/assets/apple-nav-icon.svg new file mode 100644 index 000000000..d3270d6fe --- /dev/null +++ b/dashboard-frontend/src/assets/apple-nav-icon.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/apple-new-icon.svg b/dashboard-frontend/src/assets/apple-new-icon.svg new file mode 100644 index 000000000..867d28a8c --- /dev/null +++ b/dashboard-frontend/src/assets/apple-new-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/build-icon.svg b/dashboard-frontend/src/assets/build-icon.svg new file mode 100644 index 000000000..95c5de804 --- /dev/null +++ b/dashboard-frontend/src/assets/build-icon.svg @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/builds-selected.svg b/dashboard-frontend/src/assets/builds-selected.svg new file mode 100644 index 000000000..52c7fd87a --- /dev/null +++ b/dashboard-frontend/src/assets/builds-selected.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/builds.svg b/dashboard-frontend/src/assets/builds.svg new file mode 100644 index 000000000..579a76094 --- /dev/null +++ b/dashboard-frontend/src/assets/builds.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/cancel-green-icon.svg b/dashboard-frontend/src/assets/cancel-green-icon.svg new file mode 100644 index 000000000..a8b05faeb --- /dev/null +++ b/dashboard-frontend/src/assets/cancel-green-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/dashboard-frontend/src/assets/cancel-red-icon.svg b/dashboard-frontend/src/assets/cancel-red-icon.svg new file mode 100644 index 000000000..ad4c81379 --- /dev/null +++ b/dashboard-frontend/src/assets/cancel-red-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/dashboard-frontend/src/assets/device-farm-logo.png b/dashboard-frontend/src/assets/device-farm-logo.png new file mode 100644 index 000000000..9fabb9572 Binary files /dev/null and b/dashboard-frontend/src/assets/device-farm-logo.png differ diff --git a/dashboard-frontend/src/assets/device-loading.gif b/dashboard-frontend/src/assets/device-loading.gif new file mode 100644 index 000000000..0dd815b6a Binary files /dev/null and b/dashboard-frontend/src/assets/device-loading.gif differ diff --git a/dashboard-frontend/src/assets/devices-icon-selected.svg b/dashboard-frontend/src/assets/devices-icon-selected.svg new file mode 100644 index 000000000..e153c5773 --- /dev/null +++ b/dashboard-frontend/src/assets/devices-icon-selected.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/devices-icon.svg b/dashboard-frontend/src/assets/devices-icon.svg new file mode 100644 index 000000000..e2199c3f7 --- /dev/null +++ b/dashboard-frontend/src/assets/devices-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/down-arrow-icon.svg b/dashboard-frontend/src/assets/down-arrow-icon.svg new file mode 100644 index 000000000..b5c2c99d2 --- /dev/null +++ b/dashboard-frontend/src/assets/down-arrow-icon.svg @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/link-icon.svg b/dashboard-frontend/src/assets/link-icon.svg new file mode 100644 index 000000000..7f9bf0ca9 --- /dev/null +++ b/dashboard-frontend/src/assets/link-icon.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/mobile-icon.svg b/dashboard-frontend/src/assets/mobile-icon.svg new file mode 100644 index 000000000..1a224df87 --- /dev/null +++ b/dashboard-frontend/src/assets/mobile-icon.svg @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/nexus.gif b/dashboard-frontend/src/assets/nexus.gif new file mode 100644 index 000000000..4349e0c20 Binary files /dev/null and b/dashboard-frontend/src/assets/nexus.gif differ diff --git a/dashboard-frontend/src/assets/react.svg b/dashboard-frontend/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/dashboard-frontend/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/right-arrow-icon.svg b/dashboard-frontend/src/assets/right-arrow-icon.svg new file mode 100644 index 000000000..02edfc49c --- /dev/null +++ b/dashboard-frontend/src/assets/right-arrow-icon.svg @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/dashboard-frontend/src/assets/session-icon.svg b/dashboard-frontend/src/assets/session-icon.svg new file mode 100644 index 000000000..c0b374950 --- /dev/null +++ b/dashboard-frontend/src/assets/session-icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/dashboard-frontend/src/assets/time-icon.svg b/dashboard-frontend/src/assets/time-icon.svg new file mode 100644 index 000000000..ca7cdf0ab --- /dev/null +++ b/dashboard-frontend/src/assets/time-icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/dashboard-frontend/src/assets/tools-icon.svg b/dashboard-frontend/src/assets/tools-icon.svg new file mode 100644 index 000000000..c51668e0d --- /dev/null +++ b/dashboard-frontend/src/assets/tools-icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/dashboard-frontend/src/assets/up-arrow-icon.svg b/dashboard-frontend/src/assets/up-arrow-icon.svg new file mode 100644 index 000000000..3d0dfcf70 --- /dev/null +++ b/dashboard-frontend/src/assets/up-arrow-icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/dashboard-frontend/src/components/apps/AppUploader.tsx b/dashboard-frontend/src/components/apps/AppUploader.tsx new file mode 100644 index 000000000..0179c6bf0 --- /dev/null +++ b/dashboard-frontend/src/components/apps/AppUploader.tsx @@ -0,0 +1,192 @@ +import CloseIcon from '@mui/icons-material/Close'; +import DoneIcon from '@mui/icons-material/Done'; +import { CircularProgress } from '@mui/material'; +import { useEffect, useMemo, useState } from 'react'; +import { useDropzone } from 'react-dropzone'; +import DeviceFarmApiService from '../../api-service'; + +enum FILE_UPLOAD_STATE { + IDLE, + UPLOADING, + UPLOAD_SUCCESS, + UPLOAD_ERROR, +} + +export function AppUploader({ + open, + onClose, +}: { + open: boolean; + onClose: () => void; +}) { + const [status, setStatus] = useState(FILE_UPLOAD_STATE.IDLE); + const [statusMessage, setStatusMessage] = useState(''); + const [appFileName, setAppFileName] = useState(''); + + const onModalClose = () => { + setStatus(FILE_UPLOAD_STATE.IDLE); + setStatusMessage(''); + onClose(); + }; + + const baseStyle = { + flex: 1, + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + padding: '20px', + borderWidth: 2, + borderRadius: 2, + borderColor: '#eeeeee', + borderStyle: 'dashed', + backgroundColor: 'rgb(55 65 81 / var(--tw-bg-opacity));', + color: 'rgb(255 255 255 / var(--tw-text-opacity));', + outline: 'none', + transition: 'border .24s ease-in-out', + }; + + const focusedStyle = { + borderColor: '#2196f3', + }; + + const acceptStyle = { + borderColor: '#00e676', + }; + + const rejectStyle = { + borderColor: '#ff1744', + }; + + const { getRootProps, getInputProps, isFocused, isDragAccept, isDragReject, acceptedFiles } = + useDropzone({ + maxFiles: 1, + accept: { + 'application/vnd.android.package-archive': ['.apk', '.aab'], + 'application/x-ios-app': ['.ipa', '.app'], + 'application/zip': ['.zip'], + 'application/octet-stream': ['.apk', '.aab', '.ipa', '.app', '.zip'], + }, + }); + + const style: any = useMemo( + () => ({ + ...baseStyle, + ...(isFocused ? focusedStyle : {}), + ...(isDragAccept ? acceptStyle : {}), + ...(isDragReject ? rejectStyle : {}), + }), + [isFocused, isDragAccept, isDragReject], + ); + + const uploadApp = async (file: any) => { + setStatus(FILE_UPLOAD_STATE.UPLOADING); + const formData = new FormData(); + formData.append('file', file); + + const response = await fetch('/device-farm/api/dashboard/upload', { + method: 'POST', + body: formData, + }); + if (!response.ok) { + setStatus(FILE_UPLOAD_STATE.UPLOAD_ERROR); + setStatusMessage('Unable to upload the app'); + return; + } + const data = await response.json(); + if (data.success === true) { + await DeviceFarmApiService.appInformation(data.file, data.bundleId); + setStatus(FILE_UPLOAD_STATE.UPLOAD_SUCCESS); + setAppFileName(data.file.filename); + } + }; + + const getComponentToRender = () => { + switch (status) { + case FILE_UPLOAD_STATE.IDLE: + return ( +
+
+ +

Drag 'n' drop the app (.apk, .aab, .ipa, .app, .zip) here, or click to select a file

+
+
+ ); + case FILE_UPLOAD_STATE.UPLOAD_ERROR: + return
{statusMessage}
; + case FILE_UPLOAD_STATE.UPLOADING: + return ( +
+ {' '} + + Please wait.. We are uploading the app +
+ ); + case FILE_UPLOAD_STATE.UPLOAD_SUCCESS: + return ( +
+ {' '} + +
+ {appFileName.includes('wda') + ? 'Resigned WDA has been uploaded successfully.' + : `App has been uploaded successfully. Pass this in your appium app capability as app:${appFileName}`} +
+
+ ); + default: + return <>; + } + }; + + useEffect(() => { + (async () => { + if (!acceptedFiles.length) { + return; + } + try { + await uploadApp(acceptedFiles[0]); + } catch (err: Error | any) { + setStatus(FILE_UPLOAD_STATE.UPLOAD_ERROR); + setStatusMessage(err?.message); + } + })(); + }, [acceptedFiles]); + + return ( + <> + {open && ( +
+
+
+
+

+ Upload Apps/Assets +

+ +
+
+ + {getComponentToRender()} +
+
+
+
+ )} + + ); +} diff --git a/dashboard-frontend/src/components/apps/Apps.tsx b/dashboard-frontend/src/components/apps/Apps.tsx new file mode 100644 index 000000000..57f25c6f7 --- /dev/null +++ b/dashboard-frontend/src/components/apps/Apps.tsx @@ -0,0 +1,326 @@ +import React, { useEffect, useState, useCallback, useMemo } from 'react'; +import DeviceFarmApiService from '../../api-service'; +import { IconButton, Typography } from '@mui/material'; +import { CloudUpload, Search, ChevronLeft, ChevronRight } from '@mui/icons-material'; +import { AppUploader } from './AppUploader'; +import debounce from 'lodash/debounce'; + +interface DeletingState { + [key: string]: boolean; +} + +export default function AppList() { + const [data, setData] = useState([]); + const [pageData, setPageData] = useState([]); + const [active, setActive] = React.useState(1); + const [isDeleting, setIsDeleting] = useState({}); + const [showFileUpload, setShowFileUpload] = useState(false); + const [searchTerm, setSearchTerm] = useState(''); + const [showAll, setShowAll] = useState(false); + const itemsPerPage = 50; // Increased from 10 to 50 for better UX + + // Helper function to determine platform based on file extension + const getPlatformFromFileName = (fileName: string) => { + const lowerFileName = fileName.toLowerCase(); + if (lowerFileName.endsWith('.apk') || lowerFileName.endsWith('.aab')) { + return 'android'; + } else if (lowerFileName.endsWith('.ipa') || lowerFileName.endsWith('.app')) { + return 'ios'; + } + return null; // Unknown platform + }; + + // Filter and pagination logic + const filteredData = useMemo(() => { + return data.filter((app: any) => { + const searchLower = searchTerm.toLowerCase(); + return ( + app.fileName.toLowerCase().includes(searchLower) || + app.uploadedFileName.toLowerCase().includes(searchLower) || + app.platform.toLowerCase().includes(searchLower) + ); + }); + }, [data, searchTerm]); + + // Update page data whenever filtered data changes + useEffect(() => { + if (showAll) { + setPageData(filteredData); + } else { + const startIndex = (active - 1) * itemsPerPage; + setPageData(filteredData.slice(startIndex, startIndex + itemsPerPage)); + // Reset to first page if current page would be empty + if (active > Math.ceil(filteredData.length / itemsPerPage)) { + setActive(1); + } + } + }, [filteredData, active, itemsPerPage, showAll]); + + const debouncedSearch = useMemo( + () => + debounce((term: string) => { + setSearchTerm(term); + setActive(1); // Reset to first page on search + }, 300), + [], + ); + + // Cleanup debounce on unmount + useEffect(() => { + return () => { + debouncedSearch.cancel(); + }; + }, [debouncedSearch]); + + const handleSearch = (e: React.ChangeEvent) => { + debouncedSearch(e.target.value); + }; + + const next = () => { + if (active === Math.ceil(filteredData.length / itemsPerPage)) return; + setActive(active + 1); + }; + + const prev = () => { + if (active === 1) return; + setActive(active - 1); + }; + + const fetchAppList = useCallback(async () => { + try { + const appList = await DeviceFarmApiService.getUploadedAppsList(); + setData(appList); + } catch (error) { + console.error('Failed to fetch app list:', error); + } + }, []); + + useEffect(() => { + fetchAppList(); + }, [fetchAppList]); + + return ( +
+
+ + +
+
+ +
+ +
+
+ +
+
+ + + + + + + + + + + + + {pageData.length > 0 ? ( + pageData.map((app: any) => { + const date = new Date(app.createdAt); + const options: Intl.DateTimeFormatOptions = { + year: 'numeric' as const, + month: 'long' as const, + day: 'numeric' as const, + hour: '2-digit' as const, + minute: '2-digit' as const, + hour12: true, + }; + const readableDate = date.toLocaleString('en-US', options); + return ( + + + + + + + + + ); + }) + ) : ( + + + + )} + +
+ App Name + + Platform + + File Size + + Uploaded Date + + Automation FileName + + Action +
+
+ {app.fileName} +
+
+ {(() => { + const platform = getPlatformFromFileName(app.fileName); + if (platform === 'ios') { + return ( + + ); + } else if (platform === 'android') { + return ( + + + + ); + } else { + return -; + } + })()} + + {(app.fileSize / (1024 * 1024)).toFixed(2)} MB + {readableDate}{app.uploadedFileName} + {isDeleting[app.uploadedFileName] ? ( +
Deleting...
+ ) : ( + + )} +
+
+
+

No apps available

+

+ {searchTerm + ? 'Try adjusting your search criteria' + : 'Upload an app to get started'} +

+
+
+
+
+ + {pageData.length > 0 && ( +
+
+ + Showing {pageData.length} of {filteredData.length} apps + + {!showAll && filteredData.length > itemsPerPage && ( + + )} + {showAll && ( + + )} +
+ + {!showAll && ( +
+ + + + + Page {active} of{' '} + + {Math.max(1, Math.ceil(filteredData.length / itemsPerPage))} + + + + + +
+ )} +
+ )} +
+ + { + setShowFileUpload(false); + fetchAppList(); + }} + /> +
+ ); +} diff --git a/dashboard-frontend/src/components/auth/LoginForm.tsx b/dashboard-frontend/src/components/auth/LoginForm.tsx new file mode 100644 index 000000000..2d3111d78 --- /dev/null +++ b/dashboard-frontend/src/components/auth/LoginForm.tsx @@ -0,0 +1,509 @@ +import React, { useState, useEffect } from 'react'; +import { Button } from 'flowbite-react'; +import { useNavigate } from 'react-router-dom'; +import { useAuth } from '../../contexts/AuthContext'; +import deviceFarmLogo from '../../assets/device-farm-logo.png'; + +const LoginForm: React.FC = () => { + const [username, setUsername] = useState(''); + const [password, setPassword] = useState(''); + const [loading, setLoading] = useState(false); + const [activeScreen, setActiveScreen] = useState(0); // 0: Login, 1: Dashboard, 2: Details + const [showClickEffect, setShowClickEffect] = useState(false); + const navigate = useNavigate(); + const { login, error } = useAuth(); + + useEffect(() => { + const screenCount = 3; // Total number of screens + const intervalTime = 3000; // Time each screen is visible (in ms) + let clickTimeoutId: NodeJS.Timeout | null = null; + + const interval = setInterval(() => { + setActiveScreen((prevScreen) => { + const nextScreen = (prevScreen + 1) % screenCount; + + // Schedule click effect for Screen 1 (Login) + if (nextScreen === 0) { + if (clickTimeoutId) clearTimeout(clickTimeoutId); // Clear previous timeouts + clickTimeoutId = setTimeout(() => { + setShowClickEffect(true); + // Automatically remove the effect after a short duration + clickTimeoutId = setTimeout(() => { + setShowClickEffect(false); + }, 300); // Duration of the click effect + }, 1000); // Delay before showing click effect after screen appears + } else { + // Ensure effect is off for other screens + if (clickTimeoutId) clearTimeout(clickTimeoutId); + setShowClickEffect(false); + } + + return nextScreen; + }); + }, intervalTime); + + // Initial trigger check in case component mounts on screen 0 + if (activeScreen === 0) { + clickTimeoutId = setTimeout(() => { + setShowClickEffect(true); + clickTimeoutId = setTimeout(() => { + setShowClickEffect(false); + }, 300); + }, 1000); + } + + return () => { + clearInterval(interval); + if (clickTimeoutId) clearTimeout(clickTimeoutId); // Cleanup timeouts on unmount + }; + }, []); // Rerun effect only on mount/unmount + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + setLoading(true); + + try { + await login(username, password); + navigate('/device-farm/#/'); + } catch (err) { + // Error is handled by the login function + } finally { + setLoading(false); + } + }; + + return ( +
+ {/* Left Panel - Brand Section */} +
+ {/* Animated background elements */} +
+ {/* Base grid pattern */} +
+ + {/* Modern gradient mesh */} +
+ + {/* Large gradient circles with modern positioning */} +
+
+
+ + {/* Modern geometric elements */} +
+
+
+
+ + {/* Animated floating elements */} +
+
+
+
+ + {/* Subtle accent lines */} +
+
+ + {/* Gradient overlay */} +
+
+ + {/* Content */} +
+
+ {/* Logo and Title */} +
+ Device Farm Logo +
+ {/* Combined Container for Phone and Orbit */} +
+ {/* Floating Icons Container */} +
+ {/* Outer Circle Icons */} +
+ {/* iOS Icon */} +
+
+ + + +
+
+ + {/* Android Icon */} +
+
+ + + +
+
+
+ + {/* Inner Circle Icons */} +
+ {/* JavaScript Icon */} +
+
+ + + +
+
+ + {/* Java Icon */} +
+
+
+ + + + + JAVA + +
+
+
+
+ + {/* Orbit Paths */} +
+
+
+
+
+ + {/* Phone Frame - Positioned over the orbit */} +
+
+ {/* Notch */} +
+ + {/* Power Button */} +
+ + {/* Volume Buttons */} +
+
+ + {/* Screen */} +
+ {/* Subtle Glare Effect */} +
+ + {/* Mobile App Interface */} +
+ {/* Status Bar */} +
+
+
+ Home +
+
12:30
+
+ + {/* App Content */} +
+ {/* App Screens Container */} +
+ {/* Screen 1: Ghost Layout */} +
+ {/* App Bar */} +
+
+
+
+ + {/* Header */} +
+
+
+
+ + {/* Content */} +
+
+
+
+ {showClickEffect && ( + + )} +
+
+
+
+
+
+
+
+ + {/* Bottom */} +
+
+
+
+ + {/* Screen 2: Ghost Layout */} +
+ {/* App Bar */} +
+
+
+
+
+
+
+ + {/* List Items */} +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ + {/* Bottom Nav */} +
+
+
+
+
+
+ + {/* Screen 3: Ghost Layout */} +
+ {/* App Bar */} +
+
+
+
+ + {/* Content */} +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ + {/* Bottom Nav */} +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + {/* Decorative elements */} +
+
+
+
+
+ + {/* Right Panel - Login Form */} +
+
+
+

Welcome back!

+

Sign in to your account

+
+ + {error && ( +
+ {error} +
+ )} + +
+
+
+ setUsername(e.target.value)} + className="w-full h-14 px-4 pt-6 pb-2 bg-[#1C2333]/50 border border-gray-700/50 rounded-lg text-gray-100 + outline-none transition-all duration-300 + focus:border-blue-500/70 focus:ring-2 focus:ring-blue-500/20 + peer placeholder-transparent" + placeholder="Username" + required + /> + +
+
+ +
+
+ setPassword(e.target.value)} + className="w-full h-14 px-4 pt-6 pb-2 bg-[#1C2333]/50 border border-gray-700/50 rounded-lg text-gray-100 + outline-none transition-all duration-300 + focus:border-blue-500/70 focus:ring-2 focus:ring-blue-500/20 + peer placeholder-transparent" + placeholder="Password" + required + /> + +
+
+ + +
+
+
+
+ ); +}; + +export default LoginForm; diff --git a/dashboard-frontend/src/components/auth/ProtectedRoute.tsx b/dashboard-frontend/src/components/auth/ProtectedRoute.tsx new file mode 100644 index 000000000..dcd2172e0 --- /dev/null +++ b/dashboard-frontend/src/components/auth/ProtectedRoute.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { Navigate } from 'react-router-dom'; +import { useAuth } from '../../contexts/AuthContext'; + +interface ProtectedRouteProps { + children: React.ReactNode; + adminOnly?: boolean; +} + +const ProtectedRoute: React.FC = ({ children, adminOnly = false }) => { + const { user, loading } = useAuth(); + + // If still loading, show loading indicator + if (loading) { + return
Loading...
; + } + + // If not authenticated, redirect to login + if (!user) { + return ; + } + + // If admin only and user is not admin, redirect to home + if (adminOnly && user.role !== 'admin') { + return ; + } + + // Otherwise, render the children + return <>{children}; +}; + +export default ProtectedRoute; diff --git a/dashboard-frontend/src/components/auth/UserMenu.tsx b/dashboard-frontend/src/components/auth/UserMenu.tsx new file mode 100644 index 000000000..a5567f3f9 --- /dev/null +++ b/dashboard-frontend/src/components/auth/UserMenu.tsx @@ -0,0 +1,74 @@ +import React, { useState } from 'react'; +import { useAuth } from '../../contexts/AuthContext'; +import { useNavigate } from 'react-router-dom'; +import { AccountCircle, AdminPanelSettings } from '@mui/icons-material'; +import { Menu } from '@mui/material'; + +const UserMenu: React.FC = () => { + const [anchorEl, setAnchorEl] = useState(null); + const { user, logout, isAdmin } = useAuth(); + const navigate = useNavigate(); + + const handleMenuOpen = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleMenuClose = () => { + setAnchorEl(null); + }; + + const handleLogout = () => { + logout(); + handleMenuClose(); + navigate('/login'); + }; + + const handleAdminDashboard = () => { + handleMenuClose(); + navigate('/admin'); + }; + + return ( +
+ + + + {isAdmin() && ( + + )} + + +
+ ); +}; + +export default UserMenu; diff --git a/dashboard-frontend/src/components/build-container/build-container.tsx b/dashboard-frontend/src/components/build-container/build-container.tsx new file mode 100644 index 000000000..d60240e6c --- /dev/null +++ b/dashboard-frontend/src/components/build-container/build-container.tsx @@ -0,0 +1,194 @@ +import { IBuild } from '../../interfaces/IBuild'; +import { ISession } from '../../interfaces/ISession'; +import { Clock, ChevronRight, Search } from 'lucide-react'; +import { useState, useMemo } from 'react'; + +function BuildContainer({ + selectedBuild, + handleBuildClick, + builds, + sessions, +}: { + selectedBuild: IBuild | undefined; + handleBuildClick: (buildId: IBuild) => void; + builds: IBuild[]; + sessions: ISession[]; +}) { + const [searchQuery, setSearchQuery] = useState(''); + const [dateFilter, setDateFilter] = useState('all'); + + const path = window.location.pathname; + + function timeAgo(createdAt: string | number | Date) { + const currentDate = new Date(); + const createdDate = new Date(createdAt); + + const timeDifference = Number(currentDate) - Number(createdDate); + const seconds = Math.floor(timeDifference / 1000); + const minutes = Math.floor(seconds / 60); + const hours = Math.floor(minutes / 60); + const days = Math.floor(hours / 24); + + if (days > 0) { + return `${days}d`; + } else if (hours > 0) { + return `${hours}h`; + } else if (minutes > 0) { + return `${minutes}m`; + } else { + return `${seconds}s`; + } + } + + const buildId = path.match(/builds\/(.+?)\//)?.[1]; + const sessionId = path.match(/session\/(.+?)$/)?.[1]; + console.log({ buildId, sessionId }); + + const getSessionCountsByStatus = (buildId: string) => { + const buildSessions = sessions.filter((session) => session.buildId === buildId); + return { + total: buildSessions.length, + running: buildSessions.filter((s) => s.status === 'running').length, + passed: buildSessions.filter((s) => s.status === 'passed').length, + unmarked: buildSessions.filter((s) => s.status === 'unmarked').length, + failed: buildSessions.filter((s) => s.status === 'failed').length, + }; + }; + + const filteredBuilds = useMemo(() => { + return builds.filter((build) => { + const matchesSearch = + build.name.toLowerCase().includes(searchQuery.toLowerCase()) || + build.id.toLowerCase().includes(searchQuery.toLowerCase()); + + const buildDate = new Date(build.createdAt); + const now = new Date(); + const daysDiff = (now.getTime() - buildDate.getTime()) / (1000 * 60 * 60 * 24); + + const matchesDate = + dateFilter === 'all' || + (dateFilter === 'today' && daysDiff < 1) || + (dateFilter === 'week' && daysDiff < 7) || + (dateFilter === 'month' && daysDiff < 30); + + return matchesSearch && matchesDate; + }); + }, [builds, searchQuery, dateFilter]); + + return ( +
+
+
+

Builds

+
+
+ + setSearchQuery(e.target.value)} + /> +
+ +
+
+
+
+
+ {filteredBuilds.map((build, index) => ( +
+ + {index < filteredBuilds.length - 1 &&
} +
+ ))} +
+
+
+ ); +} + +export default BuildContainer; diff --git a/dashboard-frontend/src/components/build-container/session-card/session-card.css b/dashboard-frontend/src/components/build-container/session-card/session-card.css new file mode 100644 index 000000000..b0d2a9f01 --- /dev/null +++ b/dashboard-frontend/src/components/build-container/session-card/session-card.css @@ -0,0 +1,43 @@ +.build-session { + @apply flex items-center flex-wrap gap-[16px] mb-[16px] p-[16px] bg-[#ffffff] rounded-[4px] cursor-pointer [box-shadow:0_0_3px_rgba(33,_33,_33,_0.2)] border-[2px] border-[solid] border-[rgb(255,255,255)]; +} + +.build-session:hover { + @apply hover:[box-shadow:unset] hover:border-[#15252b]; +} + +.build-session-column { + @apply flex flex-col gap-[8px] w-1/2; +} + +.build-session_name { + @apply text-[12px] font-semibold text-[#212121]; +} + +.build-session-device { + @apply flex items-center flex-wrap gap-[12px]; +} + +.build-session-device img { + @apply w-[16px] h-[16px]; +} + +.build-session-device div { + @apply flex items-center gap-[6px]; +} + +.build-session-device p { + @apply text-[11px] m-0 font-normal; +} + +.build-session-device_last_updated { + @apply text-[#9e9e9e]; +} + +.build-session_status { + @apply text-[14px] font-semibold uppercase w-1/5 min-w-[140px] text-[#9e9e9e]; +} + +.build-session_time { + @apply text-[14px] font-semibold w-1/5 min-w-[140px] text-[#9e9e9e]; +} diff --git a/dashboard-frontend/src/components/build-container/session-card/session-card.tsx b/dashboard-frontend/src/components/build-container/session-card/session-card.tsx new file mode 100644 index 000000000..7fb4ed43d --- /dev/null +++ b/dashboard-frontend/src/components/build-container/session-card/session-card.tsx @@ -0,0 +1,110 @@ +import { ISession } from '../../../interfaces/ISession'; +import { useNavigate } from 'react-router-dom'; +import { Clock, Smartphone, Timer } from 'lucide-react'; + +function SessionCard({ session }: { session: ISession }) { + const navigate = useNavigate(); + + function timeAgo(createdAt: string | number | Date) { + const currentDate = new Date(); + const createdDate = new Date(createdAt); + + const timeDifference = Number(currentDate) - Number(createdDate); + const seconds = Math.floor(timeDifference / 1000); + const minutes = Math.floor(seconds / 60); + const hours = Math.floor(minutes / 60); + const days = Math.floor(hours / 24); + + if (days > 0) { + return `${days} ${days === 1 ? 'day' : 'days'} ago`; + } else if (hours > 0) { + return `${hours} ${hours === 1 ? 'hour' : 'hours'} ago`; + } else if (minutes > 0) { + return `${minutes} ${minutes === 1 ? 'minute' : 'minutes'} ago`; + } else { + return `${seconds} ${seconds === 1 ? 'second' : 'seconds'} ago`; + } + } + + function runningTime(startTime: string | number | Date, endTime?: string | number | Date | null) { + const startDate = new Date(startTime); + const endDate = endTime ? new Date(endTime) : new Date(); + const elapsedTime = Number(endDate) - Number(startDate); + + const hours = Math.floor(elapsedTime / (1000 * 60 * 60)); + const minutes = Math.floor((elapsedTime % (1000 * 60 * 60)) / (1000 * 60)); + const seconds = Math.floor((elapsedTime % (1000 * 60)) / 1000); + + return `${hours > 0 ? `${hours}h ` : ''}${minutes > 0 ? `${minutes}m ` : ''}${seconds}s`; + } + + const getStatusColor = (status: string): string => { + if (status === 'passed') return 'text-emerald-400 bg-emerald-400/10'; + if (status === 'failed') return 'text-red-400 bg-red-400/10'; + return 'text-amber-400 bg-amber-400/10'; + }; + + const getPlatformIcon = (platform: string): JSX.Element => { + if (platform === 'ios' || platform === 'tvos') { + return ( + + + + ); + } + return ; + }; + + return ( +
+ +
+ ); +} + +export default SessionCard; diff --git a/dashboard-frontend/src/components/cleanup-modal/cleanup-modal.tsx b/dashboard-frontend/src/components/cleanup-modal/cleanup-modal.tsx new file mode 100644 index 000000000..d44fe5729 --- /dev/null +++ b/dashboard-frontend/src/components/cleanup-modal/cleanup-modal.tsx @@ -0,0 +1,63 @@ +import { useState } from 'react'; +import Modal from 'react-modal'; + +interface CleanupModalProps { + isOpen: boolean; + onRequestClose: () => void; + onConfirm: (retentionDays: number) => void; +} + +function CleanupModal({ isOpen, onRequestClose, onConfirm }: CleanupModalProps) { + const [retentionDays, setRetentionDays] = useState(30); + + const handleConfirm = () => { + onConfirm(retentionDays); + onRequestClose(); + }; + + return ( + +

Clean up builds

+
+

+ This will permanently delete all builds and their associated sessions and logs older than + the selected retention period. +

+
+
+ + setRetentionDays(parseInt(e.target.value, 10))} + className="mt-1 block w-full px-3 py-2 bg-gray-700 border border-gray-600 rounded-md text-sm text-gray-200 placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-gray-600" + /> +
+
+ + +
+
+ ); +} + +export default CleanupModal; diff --git a/dashboard-frontend/src/components/common/Avatar.tsx b/dashboard-frontend/src/components/common/Avatar.tsx new file mode 100644 index 000000000..da26a6519 --- /dev/null +++ b/dashboard-frontend/src/components/common/Avatar.tsx @@ -0,0 +1,66 @@ +import React, { useMemo } from 'react'; + +interface AvatarProps { + firstname: string; + lastname: string; + variant?: 'text' | 'image'; + size?: 'sm' | 'md' | 'lg'; + className?: string; +} + +const Avatar: React.FC = ({ + firstname, + lastname, + variant = 'text', + size = 'md', + className = '', +}) => { + const getInitials = () => { + const first = firstname ? firstname[0].toUpperCase() : ''; + const last = lastname ? lastname[0].toUpperCase() : ''; + return `${first}${last}`; + }; + + const getColor = useMemo(() => { + const colors = [ + 'bg-blue-600', + 'bg-purple-600', + 'bg-green-600', + 'bg-red-600', + 'bg-yellow-600', + 'bg-pink-600', + 'bg-indigo-600', + ]; + + // Create a deterministic hash from the name + const name = `${firstname}${lastname}`.toLowerCase(); + const hash = name.split('').reduce((acc, char) => { + return char.charCodeAt(0) + ((acc << 5) - acc); + }, 0); + + // Use the hash to select a color + const colorIndex = Math.abs(hash % colors.length); + return colors[colorIndex]; + }, [firstname, lastname]); + + const sizeClasses = { + sm: 'w-6 h-6 text-xs', + md: 'w-8 h-8 text-sm', + lg: 'w-10 h-10 text-base', + }; + + if (variant === 'text') { + return ( +
+ {getInitials()} +
+ ); + } + + // For future image variant support + return null; +}; + +export default Avatar; diff --git a/dashboard-frontend/src/components/device-explorer/device-explorer.tsx b/dashboard-frontend/src/components/device-explorer/device-explorer.tsx new file mode 100644 index 000000000..9cf37ef3e --- /dev/null +++ b/dashboard-frontend/src/components/device-explorer/device-explorer.tsx @@ -0,0 +1,852 @@ +import React from 'react'; +import { IDeviceFilter } from '../../interfaces/IDeviceFilter'; +import { IDevice } from '../../interfaces/IDevice'; +import DeviceFarmApiService from '../../api-service'; +import '../session/style.css'; +import { RefreshCw } from 'lucide-react'; +import DeviceCard from '../devicecard/DeviceCard'; + +interface IDeviceExplorerState { + filter: IDeviceFilter; + devices: IDevice[]; + activeSessionsCount: number; + pendingSessionsCount: number; + enableDevicePolling: boolean; +} + +const DEFAULT_FILTER: IDeviceFilter = { + platform: { + ios: true, + android: true, + }, + state: { + ready: true, + offline: true, + busy: true, + }, + name: '', + version: '', + deviceType: undefined, + versions: [], + tags: [], +}; + +// CustomDropdown component for custom select UI +function CustomDropdown({ + label, + value, + options, + onChange, + placeholder, + clearable, + onClear, +}: { + label: string; + value: string | undefined; + options: { label: string; value: string | undefined }[]; + onChange: (v: string | undefined) => void; + placeholder?: string; + clearable?: boolean; + onClear?: () => void; +}) { + const [open, setOpen] = React.useState(false); + const ref = React.useRef(null); + React.useEffect(() => { + function handleClick(e: MouseEvent) { + if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); + } + if (open) document.addEventListener('mousedown', handleClick); + return () => document.removeEventListener('mousedown', handleClick); + }, [open]); + const selected = options.find((o) => o.value === value); + return ( +
+
+ + {clearable && value && ( + + )} +
+ + {open && ( +
+ {options.map((opt) => ( +
{ + onChange(opt.value); + setOpen(false); + }} + style={{ textAlign: 'left' }} + > + {opt.label} +
+ ))} +
+ )} +
+ ); +} + +// MultiSelectDropdown component for custom multi-select UI +function MultiSelectDropdown({ + label, + values, + options, + onChange, + placeholder, + clearable, + onClear, +}: { + label: string; + values: string[]; + options: { label: string; value: string }[]; + onChange: (v: string[]) => void; + placeholder?: string; + clearable?: boolean; + onClear?: () => void; +}) { + const [open, setOpen] = React.useState(false); + const ref = React.useRef(null); + React.useEffect(() => { + function handleClick(e: MouseEvent) { + if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false); + } + if (open) document.addEventListener('mousedown', handleClick); + return () => document.removeEventListener('mousedown', handleClick); + }, [open]); + const selectedLabels = options.filter((o) => values.includes(o.value)).map((o) => o.label); + return ( +
+
+ + {clearable && values.length > 0 && ( + + )} +
+ + {open && ( +
+ {options.map((opt) => ( +
{ + if (values.includes(opt.value)) { + onChange(values.filter((v) => v !== opt.value)); + } else { + onChange([...values, opt.value]); + } + }} + style={{ textAlign: 'left' }} + > + + {opt.label} +
+ ))} +
+ )} +
+ ); +} + +// EmptyState component for when no devices are available +const EmptyState = () => { + return ( +
+
+ {/* Animated space illustration */} +
+ + {/* Stars */} + {[...Array(20)].map((_, i) => ( + + ))} + {/* Planet */} + + + + {/* Rings */} + + {/* Satellite */} + + + + + +
+
+

No Devices Found

+

+ It seems there are no devices available at the moment. +

+ +
+ ); +}; + +// Add these styles to your existing CSS +const styles = ` +@keyframes float { + 0%, 100% { transform: translateY(0); } + 50% { transform: translateY(-10px); } +} + +@keyframes twinkle { + 0%, 100% { opacity: 0.2; } + 50% { opacity: 1; } +} + +@keyframes orbit { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} + +.animate-float { + animation: float 6s ease-in-out infinite; +} + +.animate-twinkle { + animation: twinkle 2s ease-in-out infinite; +} + +.animate-orbit { + animation: orbit 20s linear infinite; +} +`; + +export default class DeviceExplorer extends React.Component< + object, + IDeviceExplorerState & { showFilterPopup: boolean } +> { + private devicePolling?: NodeJS.Timeout; + private isMountedFlag = false; + filterButtonRef = React.createRef(); + filterPopupRef = React.createRef(); + + constructor(props: object) { + super(props); + this.state = { + devices: [], + activeSessionsCount: 0, + pendingSessionsCount: 0, + filter: DEFAULT_FILTER, + enableDevicePolling: true, + showFilterPopup: false, + }; + } + + componentDidMount() { + this.isMountedFlag = true; + this.fetchDevices(); + this.devicePolling = setInterval(() => { + if (this.state.enableDevicePolling) { + this.fetchDevices(); + } + }, 10000); + document.addEventListener('mousedown', this.handleClickOutside); + } + + componentWillUnmount() { + this.isMountedFlag = false; + if (this.devicePolling) { + clearInterval(this.devicePolling); + } + document.removeEventListener('mousedown', this.handleClickOutside); + } + + handleClickOutside = (event: MouseEvent) => { + if ( + this.state.showFilterPopup && + this.filterPopupRef.current && + !this.filterPopupRef.current.contains(event.target as Node) && + this.filterButtonRef.current && + !this.filterButtonRef.current.contains(event.target as Node) + ) { + this.setState({ showFilterPopup: false }); + } + }; + + getBusyDevicesCount = (devices: IDevice[]) => devices.filter((d) => d.busy).length; + + fetchDevices = async () => { + try { + const devices = await DeviceFarmApiService.getDevices(); + const activeSessionsCount = this.getBusyDevicesCount(devices); + const pendingSessionsCount = await DeviceFarmApiService.getPendingSessionsCount(); + + if (this.isMountedFlag) { + this.setState({ devices, activeSessionsCount, pendingSessionsCount }); + } + } catch (error) { + console.log(error); + } + }; + + setPollingStatus(_state: boolean) { + this.setState({ + ...this.state, + enableDevicePolling: _state, + }); + } + + getFilteredDevice = () => { + const { filter, devices } = this.state; + const rawDevices: IDevice[] = devices.filter((device) => { + const { ios, android } = filter.platform; + const { ready, busy, offline } = filter.state; + const platformMatch = + (ios && (device.platform === 'ios' || device.platform === 'tvos')) || + (android && device.platform === 'android'); + const stateMatch = + (ready && !device.busy && !device.offline) || + (busy && device.busy) || + (offline && device.offline); + const nameMatch = + filter.name === '' || + device.name.toLowerCase().includes(filter.name.toLowerCase()) || + device.udid.toLowerCase().includes(filter.name.toLowerCase()); + // Multi-version filter + const versionsMatch = + !filter.versions || + filter.versions.length === 0 || + (device.sdk && filter.versions.includes(device.sdk)); + // Multi-tag filter + const tagsMatch = + !filter.tags || + filter.tags.length === 0 || + (device.tags && filter.tags.some((tag) => device.tags.includes(tag))); + const versionMatch = !filter.version || (device.version && device.version === filter.version); // legacy, for backward compat + const deviceTypeMatch = !filter.deviceType || device.deviceType === filter.deviceType; + return ( + platformMatch && + stateMatch && + nameMatch && + versionsMatch && + tagsMatch && + versionMatch && + deviceTypeMatch + ); + }); + rawDevices.sort((a, b) => { + if (a.offline && !b.offline) { + return 1; + } else if (!a.offline && b.offline) { + return -1; + } else { + return 0; + } + }); + return rawDevices; + }; + + setFilter = (newFilterPart: Partial) => { + this.setState((prevState) => ({ + ...prevState, + filter: { + ...prevState.filter, + ...newFilterPart, + platform: { + ...prevState.filter.platform, + ...(newFilterPart.platform || {}), + }, + state: { + ...prevState.filter.state, + ...(newFilterPart.state || {}), + }, + }, + })); + }; + + getPlatformFilterComponent() { + const { ios, android } = this.state.filter.platform; + return ( +
+ + +
+ ); + } + + getDeviceStateFilterComponent() { + const { ready, busy, offline } = this.state.filter.state; + + const isAllSelected = ready && busy && offline; + return ( +
+
+ + this.setFilter({ + state: { + ready: true, + busy: true, + offline: true, + }, + }) + } + className="w-4 h-4 text-blue-600 focus:ring-blue-600 ring-offset-gray-800 focus:ring-2 bg-gray-700 border-gray-600" + /> + +
+
+ + this.setFilter({ + state: { + ready: true, + busy: false, + offline: false, + }, + }) + } + className="w-4 h-4 text-blue-600 focus:ring-blue-600 ring-offset-gray-800 focus:ring-2 bg-gray-700 border-gray-600" + /> + +
+
+ + this.setFilter({ + state: { + ready: false, + busy: true, + offline: false, + }, + }) + } + className="w-4 h-4 text-blue-600 focus:ring-blue-600 ring-offset-gray-800 focus:ring-2 bg-gray-700 border-gray-600" + /> + +
+
+ + this.setFilter({ + state: { + ready: false, + busy: false, + offline: true, + }, + }) + } + className="w-4 h-4 text-blue-600 focus:ring-blue-600 ring-offset-gray-800 focus:ring-2 bg-gray-700 border-gray-600" + /> + +
+
+ +
+
+ ); + } + getStatusColor = (status: string) => { + if (!status) return 'text-gray-400 bg-gray-400/10'; + if (status === 'ready') return 'text-emerald-400 bg-emerald-400/10'; + if (status === 'busy') return 'text-amber-400 bg-amber-400/10'; + if (status === 'offline') return 'text-red-400 bg-red-400/10'; + return 'text-gray-400 bg-gray-400/10'; + }; + + render() { + const devices = this.getFilteredDevice(); + const { showFilterPopup } = this.state; + const { ios, android } = this.state.filter.platform; + // Collect unique versions for dropdown + const versions = Array.from(new Set(this.state.devices.map((d) => d.version).filter(Boolean))); + // Device types for dropdown + const deviceTypes = [ + { label: 'All', value: undefined }, + { label: 'Real', value: 'real' }, + { label: 'Emulator', value: 'emulator' }, + { label: 'Simulator', value: 'simulator' }, + ]; + // State options for dropdown + const stateOptions = [ + { label: 'All', value: undefined }, + { label: 'Ready', value: 'ready' }, + { label: 'Busy', value: 'busy' }, + { label: 'Offline', value: 'offline' }, + ]; + // Platform options for dropdown + const platformOptions = [ + { label: 'All', value: undefined }, + { label: 'iOS', value: 'ios' }, + { label: 'Android', value: 'android' }, + ]; + // For versions, use sdk from filtered devices + const versionOptions = Array.from(new Set(devices.map((d) => d.sdk).filter(Boolean))).map( + (v) => ({ label: v, value: v }), + ); + // For tags, collect all unique tags from all devices + const allTags = Array.from(new Set(this.state.devices.flatMap((d) => d.tags || []))).filter( + Boolean, + ); + const tagOptions = allTags.map((t) => ({ label: t, value: t })); + return ( +
+ +
+ {/* Search input and Filter Button */} +
+
+ this.setFilter({ name: e.target.value })} + /> + + + + +
+ + {showFilterPopup && ( +
+ {/* Header */} +
+
Filter
+ +
+
+ {/* Platform Dropdown */} + { + if (ios && android) return undefined; + if (ios) return 'ios'; + if (android) return 'android'; + return undefined; + })()} + options={platformOptions} + onChange={(v) => { + if (!v) this.setFilter({ platform: { ios: true, android: true } }); + else if (v === 'ios') + this.setFilter({ platform: { ios: true, android: false } }); + else if (v === 'android') + this.setFilter({ platform: { ios: false, android: true } }); + }} + placeholder="All" + clearable + onClear={() => this.setFilter({ platform: { ios: true, android: true } })} + /> + {/* Version MultiSelectDropdown */} + this.setFilter({ versions: vals })} + placeholder="All" + clearable + onClear={() => this.setFilter({ versions: [] })} + /> + {/* Tags MultiSelectDropdown */} + this.setFilter({ tags: vals })} + placeholder="All" + clearable + onClear={() => this.setFilter({ tags: [] })} + /> + {/* Device Type Dropdown */} + this.setFilter({ deviceType: v as any })} + placeholder="All" + clearable + onClear={() => this.setFilter({ deviceType: undefined })} + /> + {/* State Dropdown */} + { + const { ready, busy, offline } = this.state.filter.state; + if (ready && busy && offline) return undefined; + if (ready) return 'ready'; + if (busy) return 'busy'; + if (offline) return 'offline'; + return undefined; + })()} + options={stateOptions} + onChange={(v) => { + if (!v) { + this.setFilter({ state: { ready: true, busy: true, offline: true } }); + } else if (v === 'ready') { + this.setFilter({ state: { ready: true, busy: false, offline: false } }); + } else if (v === 'busy') { + this.setFilter({ state: { ready: false, busy: true, offline: false } }); + } else if (v === 'offline') { + this.setFilter({ state: { ready: false, busy: false, offline: true } }); + } + }} + placeholder="All" + clearable + onClear={() => + this.setFilter({ state: { ready: true, busy: true, offline: true } }) + } + /> +
+ {/* Footer */} +
+ + +
+
+ )} +
+ {devices.length === 0 ? ( + + ) : ( +
+ {devices.map((device) => ( + this.fetchDevices()} + setDevicePollingStatus={this.setPollingStatus.bind(this)} + /> + ))} +
+ )} +
+
+ ); + } +} diff --git a/dashboard-frontend/src/components/devicecard/DeviceCard.tsx b/dashboard-frontend/src/components/devicecard/DeviceCard.tsx new file mode 100644 index 000000000..5e99a44ba --- /dev/null +++ b/dashboard-frontend/src/components/devicecard/DeviceCard.tsx @@ -0,0 +1,304 @@ +import { Clock, MapPin, Smartphone, Tag, User2Icon } from 'lucide-react'; +import prettyMilliseconds from 'pretty-ms'; +import React, { useEffect, useMemo, useState } from 'react'; +import DeviceFarmApiService from '../../api-service'; +import { useAuth } from '../../contexts/AuthContext'; +import { IDevice } from '../../interfaces/IDevice'; +import Avatar from '../common/Avatar'; + +// Lightweight server type for fetching hub node id +interface MinimalServerInfo { + id: string; + isHub: boolean; + isOnline: boolean; +} + +// Simple in-memory cache to avoid N calls from multiple cards +let HUB_NODE_ID_CACHE: string | null = null; +let HUB_NODE_ID_PROMISE: Promise | null = null; + +async function fetchHubNodeIdOnce(): Promise { + if (HUB_NODE_ID_CACHE !== null) return HUB_NODE_ID_CACHE; + if (HUB_NODE_ID_PROMISE) return HUB_NODE_ID_PROMISE; + HUB_NODE_ID_PROMISE = (async () => { + try { + const servers: MinimalServerInfo[] = await DeviceFarmApiService.getServers(); + const hub = servers.find((s) => s.isHub && s.isOnline); + HUB_NODE_ID_CACHE = hub ? hub.id : null; + return HUB_NODE_ID_CACHE; + } catch { + HUB_NODE_ID_CACHE = null; + return null; + } finally { + HUB_NODE_ID_PROMISE = null; + } + })(); + return HUB_NODE_ID_PROMISE; +} + +interface DeviceCardProps { + device: IDevice; + reloadDevices: () => void; + setDevicePollingStatus: (status: boolean) => void; +} + +interface SessionResponse { + status: number; + sessionID?: number; + message?: string; +} + +interface StreamResponse { + status: number; + device?: { + width: string; + height: string; + }; +} + +const DeviceCard: React.FC = ({ + device, + reloadDevices, + setDevicePollingStatus, +}) => { + const { isAdmin, isCurrentUser } = useAuth(); + const [isBlocked, setIsBlocked] = useState(device.busy); + const [showActionButtons] = useState(device.session_id ? isAdmin() : true); + const [hubNodeId, setHubNodeId] = useState(null); + + useEffect(() => { + setIsBlocked(!!(device.busy || device.userBlocked)); + }, [device.busy, device.userBlocked]); + + // Load hub node id (cached across cards) + useEffect(() => { + let isMounted = true; + (async () => { + const id = await fetchHubNodeIdOnce(); + if (isMounted) setHubNodeId(id); + })(); + return () => { + isMounted = false; + }; + }, []); + + // Extract hostname from device.host URL + const hostLocation = useMemo(() => { + try { + const url = new URL(device.host); + return url.hostname; + } catch { + return device.host.split(':')[1]?.replace('//', '') || 'Unknown location'; + } + }, [device.host]); + + const getStatusColor = (status: string): string => { + if (!status) return 'text-gray-400 bg-gray-400/10'; + if (status === 'ready') return 'text-emerald-400 bg-emerald-400/10'; + if (status === 'busy') return 'text-amber-400 bg-amber-400/10'; + if (status === 'offline') return 'text-red-400 bg-red-400/10'; + if (status === 'blocked') return 'text-purple-400 bg-red-400/10'; + return 'text-gray-400 bg-gray-400/10'; + }; + + const getPlatformIcon = (platform: string): JSX.Element => { + if (platform === 'ios' || platform === 'tvos') { + return ( + + + + ); + } + // Sleek Android icon SVG + if (platform === 'android') { + return ( + + + + ); + } + return ; + }; + + const handleBlockDevice = async (): Promise => { + try { + await DeviceFarmApiService.blockDevice(device.udid, device.host); + setIsBlocked(true); + reloadDevices(); + } catch (error) { + console.error('Error blocking device:', error); + } + }; + + const handleUnblockDevice = async (): Promise => { + try { + await DeviceFarmApiService.unblockDevice(device.udid, device.host); + setIsBlocked(false); + reloadDevices(); + } catch (error) { + console.error('Error unblocking device:', error); + } + }; + + const status = + isBlocked || device.userBlocked + ? 'blocked' + : device.busy + ? 'busy' + : device.offline + ? 'offline' + : 'ready'; + + // Determine Local / Remote / Cloud label + const isCloud = Boolean(device.cloud); + const isLocal = !isCloud && hubNodeId && device.nodeId === hubNodeId; + const locationTypeLabel = isCloud ? 'Cloud' : isLocal ? 'Local' : 'Remote'; + const locationTypeClass = isCloud + ? 'bg-purple-900 text-purple-300' + : isLocal + ? 'bg-cyan-900 text-cyan-300' + : 'bg-orange-900 text-orange-300'; + + return ( +
+ {/* Top: Name, icon, and version */} +
+ + {device.name || 'Unnamed Device'} + + {getPlatformIcon(device.platform)} + {/* Version number next to icon for Android/iOS */} + {['android', 'ios', 'tvos'].includes(device.platform) && ( + + {device.sdk ? `v${device.sdk}` : 'v1.0'} + + )} +
+ {/* UDID */} +
{device.udid}
+ {/* Device type, status row (no platform text) */} +
+ {device.deviceType === 'real' && ( + + Real + + )} + {device.deviceType !== 'real' && ( + + {device.platform === 'android' + ? 'Emulator' + : device.platform === 'ios' || device.platform === 'tvos' + ? 'Simulator' + : 'Emulator'} + + )} + + + {locationTypeLabel} + + + + {status.charAt(0).toUpperCase() + status.slice(1)} + + {(device.platform === 'ios' || + device.platform === 'tvos' || + device.platform === 'android') && ( + <> + + + {device.platform === 'android' + ? 'Booted' + : device.deviceType === 'real' + ? 'Booted' + : device.state} + + + )} +
+ {/* Location, Utilization */} +
+
+ + {hostLocation} +
+
+ + + {device.totalUtilizationTimeMilliSec + ? prettyMilliseconds(device.totalUtilizationTimeMilliSec) + : '0ms'} + +
+
+ + {/* Tags (always on a new row) */} +
+ + {device.tags && device.tags.length > 0 ? ( +
+ {device.tags.map((tag, idx) => ( + + {tag} + + ))} +
+ ) : ( + - + )} +
+ {device.activeUser && ( + <> +
+ + + + {device.activeUser.firstname} {device.activeUser.lastname} + +
+ + )} + {/* Action Buttons */} + + {(!device.session_id || isAdmin() || isCurrentUser(device.activeUser?.id)) && ( + <> +
+ {isAdmin() && (device.userBlocked || device.busy) && ( + + )} + {isAdmin() && !device.userBlocked && !device.busy && ( + + )} +
+ + )} +
+ ); +}; + +export default DeviceCard; diff --git a/dashboard-frontend/src/components/header/Header.tsx b/dashboard-frontend/src/components/header/Header.tsx new file mode 100644 index 000000000..0cf25f1de --- /dev/null +++ b/dashboard-frontend/src/components/header/Header.tsx @@ -0,0 +1,154 @@ +import { useState, useEffect } from 'react'; +import { Devices, Build, Apps, QueryStats, GitHub, DnsRounded } from '@mui/icons-material'; +import { useNavigate, useLocation } from 'react-router-dom'; +import { logo } from './logo'; +import { useAuth } from '../../contexts/AuthContext'; +import ProfilePopup from './ProfilePopup'; +import Avatar from '../common/Avatar'; + +export default function Header() { + const navigate = useNavigate(); + const location = useLocation(); + const [selectedTab, setSelectedTab] = useState('devices'); + const [isProfileOpen, setIsProfileOpen] = useState(false); + const { user, logout, isAdmin, isAuthDisabled } = useAuth(); + + useEffect(() => { + if (location.pathname.startsWith('/servers/') || location.pathname.includes('/server/')) { + setSelectedTab('servers'); + } else { + // Map the current path to the corresponding tab + const path = location.pathname; + const matchingMenuItem = menuItems.find( + (item) => path === item.path || (item.id === 'devices' && path === '/device-farm'), + ); + if (matchingMenuItem) { + setSelectedTab(matchingMenuItem.id); + } + } + }, [location]); + + const menuItems = [ + { id: 'devices', icon: Devices, label: 'Devices', path: '/' }, + { id: 'builds', icon: Build, label: 'Builds', path: '/builds' }, + { id: 'apps', icon: Apps, label: 'Apps', path: '/apps' }, + { id: 'stats', icon: QueryStats, label: 'Stats', path: '/stats' }, + { id: 'servers', icon: DnsRounded, label: 'Servers', path: '/servers' }, + ]; + + const handleNavigation = (id: string, path: string) => { + setSelectedTab(id); + if (id === 'devices' && location.pathname === '/device-farm' && !location.hash) { + return; + } + navigate(path); + }; + + const handleProfileOpen = () => { + setIsProfileOpen(true); + }; + + const handleProfileClose = () => { + setIsProfileOpen(false); + }; + + const handleLogout = () => { + logout(); + handleProfileClose(); + navigate('/device-farm/#/'); + }; + + return ( +
+ +
+ ); +} diff --git a/dashboard-frontend/src/components/header/NewHeader.tsx b/dashboard-frontend/src/components/header/NewHeader.tsx new file mode 100644 index 000000000..b26a41b20 --- /dev/null +++ b/dashboard-frontend/src/components/header/NewHeader.tsx @@ -0,0 +1,92 @@ +import React, { useState } from 'react'; +import DevicesIcon from '@mui/icons-material/Devices'; +import HandymanIcon from '@mui/icons-material/Handyman'; +import { Apps, BarChart } from '@mui/icons-material'; +import UserMenu from '../auth/UserMenu'; + +const NewHeader: React.FC = () => { + const [selectedTab, setSelectedTab] = useState('devices'); + + const handleTabClick = (tab: string) => { + setSelectedTab(tab); + }; + + return ( +
+ +
+ ); +}; + +export default NewHeader; diff --git a/dashboard-frontend/src/components/header/ProfilePopup.tsx b/dashboard-frontend/src/components/header/ProfilePopup.tsx new file mode 100644 index 000000000..f43ee698d --- /dev/null +++ b/dashboard-frontend/src/components/header/ProfilePopup.tsx @@ -0,0 +1,126 @@ +import { useEffect, useState } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { Logout, Person, Group, Devices, People } from '@mui/icons-material'; +import { motion, AnimatePresence } from 'framer-motion'; + +interface ProfilePopupProps { + isOpen: boolean; + onClose: () => void; + username: string; + isAdmin: boolean; + onLogout: () => void; + isAuthDisabled: boolean; +} + +interface Menu { + route: string; + icon: React.ReactNode; + label: string; +} + +export default function ProfilePopup({ + isOpen, + onClose, + username, + isAdmin, + onLogout, + isAuthDisabled, +}: ProfilePopupProps) { + const navigate = useNavigate(); + const [menuItems, setMenuItems] = useState([]); + const defaultMenus = [ + { + route: '/profile', + icon: , + label: 'Profile', + }, + ]; + + const handleNavigation = (path: string) => { + onClose(); + navigate(path); + }; + + useEffect(() => { + if (isAuthDisabled) { + setMenuItems([ + { + route: '/devices', + icon: , + label: 'Manage Devices', + }, + ]); + } else if (isAdmin) { + setMenuItems([ + ...defaultMenus, + { + route: '/users', + icon: , + label: 'Users', + }, + { + route: '/teams', + icon: , + label: 'Teams', + }, + { + route: '/devices', + icon: , + label: 'Manage Devices', + }, + ]); + } else { + setMenuItems(defaultMenus); + } + }, [isAuthDisabled, isAdmin]); + + if (!isOpen) return null; + + return ( + + {isOpen && ( + <> + + +
+ {menuItems.map((menu, i) => ( + + ))} +
+ + {!isAuthDisabled && ( +
+ +
+ )} +
+ + )} +
+ ); +} diff --git a/dashboard-frontend/src/components/header/logo.ts b/dashboard-frontend/src/components/header/logo.ts new file mode 100644 index 000000000..8e522b6eb --- /dev/null +++ b/dashboard-frontend/src/components/header/logo.ts @@ -0,0 +1,327 @@ +function simpleDecrypt(encryptedStr: string) { + return atob(encryptedStr).split('').reverse().join(''); // Decode & reverse back +} + +const logoArray = [ + 'PUlJWUM1S1JPVlVTQUFBQUE4a0RCVFR6ZWtyekQ4UHdZdWtBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlB', + 'QUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlB', + 'QUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlB', + 'QUFpQUFBaUFBQWlBQUFpQUFBaUFBQWlBRVlvQWZnd3RSanFOMnp3SGtiOEFIMkE0bGlUL29mRSt0aUE4YmhVNCtuQUI5UEpKZktNWll1QWJaQUNZUnZGK0lkSHEwdXczaEc5V2dWY2ZSTjVwVTlsZmZTQWM5THdJSzlMOHEwMmUxNzgvOTc3L1d2OS85Zysyc1NpUUdXQ1ErSUlRd2dJSzNBdGtMaVdYUUdvYkc1RGZjcWZCNTJSY2lsZERCNnFTZkRlazN5T0pwSmVpdHQxbHJFMmtqc1A0SVZVZ0F3L3h3RFlFcVRnQWNsQ3pVOGZDSGFzaXJaZjA3aTAvZFN4Qi9MQVQreWdHMEFtUmRWUWFHWS9WUEdHMzEzM2pnb3pkcDg4VGFidmxIeUVW', + 'OHJPRHRzZisxdnBDQ1cvYmQ5R2xESVZnMzBWNzFBVVJZZmc0ZzJWMklNQWcxTkpZeW9kWHR0b1pQc2NtbWlIUXE3RXdjSDF0RlAzTlBqUEp0VkFYQUMwVUJlZ1BRZzQzaERnSTBnQUFDT3ppbjA2UXVIb3owVFBNN1pGL1V3Q2V4RGFzaktZTlI0RWwrUm1VTCs5ZDlRQWk3UmZHcXZpbkhmVERjenlyRTVUdVVxOXVGQVNyOEN5V0RjcmFNb0MzYnJPZ1VNYWNzUmJsSXpCckd3U2dGZ1UvOElvMUdUUEhFazl1ZzFBeUhJMmhzOGllbUI4NXB1Y2dVNjR2Zk9qVXh6VmlkTjlFWkQrVGFSUUNZelVLL0tNQUZSRENBRTRCYlV3WjFxK3JYRk40', + 'QksybHptK2orVHFVZnkvcUVoVEV3dVArZ2NtWTh2eVRWaDJSZlRUdkxmQ3hLdVg4Sm8vZExBeCttNmNnaU0ra3o2VWVyMC8zcm50WDhXQjZ1VW1USExUYm5iTnF2ZHFxVjZLc1dlS1ZlM1YxcU5ndThxZ1VCcU1UOTRtWWhVR0RUQlp0NFlRV0F3ZWNPTEN0NjB3S0F1WXNJQzFxQkZjZFJaNzVPbnBYVnc4eXdHcVpGSWUrYWFUNU1QY2NUZE40RlpHQlRndFY1OXJ3QThFTklBd2dmV1JqYVFTOVd0NGt5anpUcWhQV3pZYWVVd0NhL3JnMEkvdE02QVFLR01nOGpjcHNjalBURHlucEFwMGs4cUZKeEgzYW5iN2FrSzhVWXJrQnNVZlJDcTh2', + 'QXJjaFJFNldSaXE3Vi9XN2FkKytlZmZqNGhiY0ZEZEVzWnJNZ2J5NjhHWWwyQjhWYzlUMXpXWklLUW1PK2xKdXNRUkh4elZ5ZEJlSlFhWGNLRFc2Sm5KNEhOLzJ4QnUrVjhQQ0JnaVZFUUFuNHdqbHAyWFZhZlAyUWZGUy9ITEZqRE9qNnNmOThyb2ZwUHAzZDZyNngvNVRCZEd3bHkrcmVBNGNRakVNQmRkUFZvNjZwMmY5K2wvM3IyeVdvWXJQT1ZEQ1VtS0JWTVc2VVZBV05iUHpOYXZWMVBUZVQ1b0tXendwVnliNzVUbEgxcEtBYjFRYXZ1eFBsaFFIQVhrMHZPRWcyRFhEeW4xZ0JORUlsSmkzdzZLVDhIUGZwWGh6eVoyMUtZK1NQZHNS', + 'bkVZQ3Z0UGdaUS9yNERVQ1NETEkrZjg1bW0zZm96UjczTndoMGIvUk9nK1hrVHlDR293N096MjlXOTVqNGM0NXlFMktjaEpmRTZwd1hLVG0vU1YyL0t1Tk5INzV3WDRUTGpmekEwcStyaE9EcmFwQXRnSVVVSkxBWkNUMW9hQllyb2VhdG12OElJRlRtOEYzRk9WSHhITDZ3TFNyREhIeTNYeC9JRUFIWDF2akZNemZ1djQzWTcxelprdzZmTkVoMy80QUZvSUhrMWpvQ1c0OWg3RmZtZGx5c2h2RjhaZVYrdEU0bkQ1czlCZm8wM00vRzBzaXA3NmZDL2RQaFBDWWZNT2JyZDFWMUdkZm5mYkJEWkE1WW9RUTBINjArbEFGMGVlSG1lSDVxNHAz', + 'RUlXbTltZ21YS3FjeHdEQ2VmbTdvNEozL0dPQWpJSHdEZWNCT21idWQxVGVmakdTTy9OK1JjSVUwanlYVnQvOUtsejlXOTVUUmVYM2VCeUFSdGc5ZitjS0EyMlIvcitkOG5DWDFzL1Z0NEtYNVQvYldUV2FBbTdnV2EwdFVvZUw1dm5uZTUvVm1wdTVxcC9DWFoxMVZydzhZcjBneFFVSXVHeWN3WmdzWkZRc05OU0F1MjBYbno4bWVUaDd0OGJiMHFPK3dqTThqazNoNHFJZXk5UGhBRTR5QzhBSGJzU21id09IdC8zNlFmZkFWZkVQTVVoMzhneVRyTnRDSFV6SjhSNGcvK2ZLSE5QOUM2L0tsWHNsOStIaFl4YkhBa1F6ZnEzdnZ4bTVKTC9I', + 'VVJrcmRkODNNK3g2YjFHeWlDMEtWUTFxREhtS01vNzlBcG9XN09YNTJFV0sxUkdDeW1ob1VrZW85eGI4ZEErV1NlajJQakJHV1F1QW5RejlWOGtqZkJQZ1NrRFlBMVBnSGJXbkNVMVFlUmdxWHluaU5VakJiUVhBMlIwOVFoNGRJVlUySWlCWEpiejV3V0prdE4xYlk1bTZLdVNLeGIvYnkzNHNuVHZaVTE2NFY2dkVGS3Z2R3hmUHk1VGxBcVlyMFZ3K0xzVStRb2tnQm1IODdBWlFVSi9JOG1hbnlmZWp1VVhsdzRENXVMeXVicURhRWh1LzRQaEZxREQzNVg2L0lFZ0pXU1FCYzZ6TWFkSnc5cm11dWRNZG5QUkVjemRFS0J3N1N4UXBtZk80', + 'TjEyZDVEVmhWdWFlOE5sRHFnVituOThvQXQ2SWQ5d1hoL0duUWthbkFaSm9iK0R0RmVJaFYzWHplcHVFdzJLcjNLRzM3YXBwVFk3V0J3R3BBdjFrUDFhelZ1U3ZPT1ZkODNwSjMyNnNZb01aaWhuRVpOSXVHK24wL1RJQWZ1a0FKd1JGL2tkeS9iTHRldmhydXpLOStodEdxR1NnS0RhREtNVUowcHdWb2dYMWxMc25lNjNBZTBiaWxVNUVaWTZaRmpxOFdCREI1K1BDVTErKzdrTWJoQ3FiOTY0cVE4VnBFVzdBdGlmRHlrenUybmV6ck9vNERqcGFjVXd1RUFYV1Q2SGJKcTU1dGQ2UldqRmpXZnl4akI4a1ZkdkZQNTZYd0RvRTVDR1E5L1k1', + 'YWUwQTFZSysvV2dBTXVuYWRjTjJJZm1UdkMwRXE2Q2d0T0Z0VW9IaFFoR3VlVHdYVUp6WWs0Z0tQcDNoS0lmdFZmcG5VTkg2ZVk3dkZtS05WODZlclhzWEcrNzdzOXRnR3MybVhybGc5bUVuWHJYaSswTWNwcDJ1MVdsY2xpbkl6QzhIZmhxR2xEeTQxTlliUitIVGpvbWpJcWJRQ0t1RFZ3eSt0T1ZUcmZwS3NscjFrbCsvcGhiOTRSQkZEZXl4UHl1M2x2M2pSOUY4QUdSUjhoUDVhU1RCcTlCWVh2bWZKZVIxY25BRzQwREYzSTZRR1NQQWsyK1BNMWkrUlVndWlqVUZBZFRWSDhrWFpHYzVDcVU2WWRLcmMyd3MyTjIrWGRQOHllMUFTWHRX', + 'b2ZOU3U3S2o2S0FYbktTYnV4V3lHN09YSkdjK01tb2hFalA1NEJoVndDRGE3WDAvSUVRTFdRZ0hjSkNNc2N2QnJYNTl4QnJtdlQzUmdWOEJMb3VDWEFBVHdGVDYrc3hweUlMY0hzQndmNGFGV28zMzBNMldEd3NXL0s4c0l0SWFMQU9YYmVQbmdGcHJkWE5yS1VWenBGTWVHWUxJQkQxenRvY0w3WXJ5cjUzMnhRVlFFbFUvS0FBQWhoMmh5dlArTW9NSDBUM2VZUEJ2bWpyNkk4RjhBQ2hRQUxZc01LbVVaL1A3Yjh5T2gzZWQxN2YwVGpGVWo0WGlNa0IwU2tNaFRvR2xKOVpnYjNGT1VDYWNyYWNKUjI3N3FFbFdOL0RmK3pzWnpuK1M4aE8w', + 'UzVNYWNVdjUrNzdweWNmKzVLd0dZYVUyWkVOY0RzbWpkSmpPR2JLbWlRNWtsNzhXUGVyczM2eEZqTTZuNEh4YWdPOFlrZkovZ1Fna1lCUlN3aExBL3VkNnNlNVMwamtobi9mRFk0ak1zMG1ZRFRBOUVvMmdtV2VwSHBVL01yMi9JSUUzd3R3WTdaRzVsWW1EYlJQTXdHanlxYnVlMlNsLytmRnFZdzZqdGc2QXl1SUE0WkttdkpRR081RGRFVFh2YWtCN0p3R3pZd2hlaStmbEFLaW9qakJXWUtGd0s5Qm9vMTdudFAybUxnUGNhVFB5QWFKUW9jRlJhYklpUzZNUTAzcm5saW5QbDllZHVUb0ZsNWY2OEFiekVHTS9jcWw1ODhiZWNCb1VBclFs', + 'K3FHemFYTGVBMGIvY25DWFhzQ0tZaEJGeUxnVXRSMlRQeHN0ZjhpQVZDRUpTQ01nWUJqbGVKQUFnRXp4bmJqY1ZwSHZmZHJ3N3NSUFFIZE54amMwMW1vQ1RBdHdKVElSSFBBenl0VHBBdGZsUTNNbU9WLzZjSWNESUR0N0N3dTNhb1E5YTF1Q1dCK1NSeDdIMWF2clZOcDVDYjJyZ081bjdQcENKemRYN1ZKaHM3WGI0b1d2YXd4M0NNMFVZb0NmaTlmbEFTaVlBTFlzTG1UcHRzRzA1bzludDNSelgydkhRL05GMEFXdzJNVjlaaFBUdkNnQ0NMOXlaSnJsck9EOFNVK3JpMzJBV2ROOGJlSkg2OU5hZEhxZkNMUk5Ic1krN3ZxSy9ETmIxbVgw', + 'ZGdMOWFXSnR2SFZ6QUNEVUluUVdMV29PTzlNcm41NHVEUGFvZ1RVcEJDQXdEc0FmRUFRUWp4b3hjUiszTjVYdmZoczlXK2VlV1hTc01RSURoVU1DS21RdDFMd3owdGEvVy82WHhYNmJkM3BRckw3ZlZlM0ZTZ2I1Tkh6MndvcjAwR3g2cjRnOU1EeVpXcE05T3B2NzVNRFlLMjZYRmMzU0xjTUxja096TUtJMUdvZ1dIckdZTEQxQnlwVi9zR2R5L3ZTVXF5T2Y0OHRBL281cFRnd1c4RENCRkNLUUUwQWhzNnVHOXJtdnZSd2l1K1kzaXRKRlNBaVlDTXpHUG5JVVVQUVBURDRPeGU5K3ZXdWVVMEtyaC9DNmFZcHFwZGhsbFpnVVZMRDlhNXZG', + 'K3R5S3d2Nmp2L3NyMWtuS0RHWTVyQjlYWGVMamQvYnVWcWVyeWZIRnVpb3k5RHBya2JpTHpnZkd6NnlDY0tZNnc3NldwWDdZdEtsTTFJVWhyaHZXMnVzd1NUKzdpSGFaUW1CbGFTUUJVWWU5V084Y3oza1JyZ1AwUEQyVGFSZ0ZBWSt2TEEwbkFDSUNUZ2pFNzFhUGdQdWU1K3BJNnN4Z1IzZU5KaXcxaFdDSXY3SGl2NURDb0l1VVZ3Umo4dEIzVGlxTWMvR0dVVTZaZ21MVzBaMVo3TUhJYkZTYmYyc3lzblFRZjI5RFY2NWFYVm9kL1pHZEptK1NOV2kxNFk1Vm5zOHJzSnN2LzdKY2FCcUdWemx3NFpuc2pDa1h4Vi9GVFJLTXFselZrWmdV', + 'TUV3dVJnc3V1a2lYcVAvbzM3UzRXVG9yVmlkcG8yeVdFMENLTHNSQkFXQ3NiMXh4ZjRjbU04Y3oya1JiTjY0ZEE3NEswS2VVbnlwNiszaUFuZ0pFQk1BWURleVBBZGVkNEtoTzkydGlyL0V4SitCV3dHZXZ2UDlEbm5NcmJBNFNLUm5Ca2J2YkY5V2FIVE5ITzVIZUpnMHpUbkNUbVdtTXZXSm9hODhYdzBoM3FuTDBCd1dmQjAvVHFpdld5cG04SzJEWjVXSHh2R2s5NmNrNDFTR0kxTjkrd1FldXluNVJGc1NyZlorOEJvbENJc0tuQ2owSjRYOVJMMFI1UVdjVmU0elhoZjNQSHVtZkVSV2VGQVVKS3puRVVGaHFBZ241UXFZVEgyR3R6WEhq', + 'aG1hK1VXZS9xeUdhOGpBcXhtempoREFKb0NSQUVjV0ZQVnZvcWg3UGVkQjhSWFgrK1h0MGVucEU2QXJZU1N2NmFDcFF1cHJOQ3BLUDZHYU5hLzZ3eWxOT1FIZ3RmNExRMHN4ejZtcmVndlBSR3NhUFg4TzZvLzdiSWhJRE1RM1I3TzZIaUdoTE9iL3NVTGFFUklDUkVCWGdRZ3U3UjBUeVUwRnR3bFpVUTk4aTNKWWFOVXZrVWppNXZrbHlWNE9UbmpzWmxwTE5sZHlTUm14UEJwQ2J6S3Y0bkVXU3BtTkVjKzA3T05UQ1BhRVpDNVhPZ1VMa29ESUhPa3lVQ1hGb1hDaTQzR0ROS0RWV1EwMVZOb2NnU0UzeHJBcHdDcFBManFvYnhrQ0xRS3JE', + 'SGdTQlQrZkM1aWFQdEIwRkFkQVYzcUI1QW9iN2J4cE9QS2ZLdHk2c2Y4QWd1UkUzUDZ3dFQzaENLL0pHL0dPQWtJR3dCT1hoNW84M3ZxOGk5WHJoOXpkZE4yMlBJSDlnamJFaVlFN0Y5ZEFxRTZ0dG5vclQ4c3NGcmE5YWRYaGIydUtGdFpEeFpScjJvckpkZGplbnVackkxcjk5RlpFaVdZYW52cFd6MnliYmxvSFdWYm9LMVlhNENSYUZiQmZPT09iQjB4bUNPNWtXc2ZoL2lLbXNvbi9rYmtSa2hFYTZLK29oa2tWZWNnRWtvelBSWEdPOUZmOGhuTWg4QjhlWk0rS0hhb3FocEs1UFg4eXNtTi95cUhlS3o3UEw1OUQ4YnVwYzErOUIvTS9L', + 'd3dscUY5aXV1S0xmT1grTWtMVEw4bVkrc241dzlhL01IbEh5US9lYXVUc3VuZThMNERVQ2NBTEk4Sm1uOXQ0aUFQOGUwMmxkM1p6SjFYdk5qNDU1WlM4MlpVdllkWVB3RVBManZMYTdXL1BSRlQzampCYzlkNjBkRGFJWktabGhYa2RlL0ErOWYwOUgvazR5KzhRTHJHbHIzY1hmL3A5ajZBYVZJV1hWeWxqQU02UHA0RlJONkdSQlVrN1BKcEQ5VFJ4WEhNeUZ1L2dwb3dqRlZoVHlZN3d4VTZHdEJlSFMrclE5VG5XV1B6TjBaNkRvN3E1K29IZ1pYMTc4bnpYR214UDRHb0FMMllOZVBuWG40TUh2VDdIOHBHZHl0L0cyN2U0NHZnUFFKd1l0', + 'RzZUSGk0KysvazgrVTN6aW9ETHdYSGk2YXpseTFUYWc1eGNpTHM2c21oaUhMWFV2QW15RllkdjNnOUVTemVJbmxyL0hEUnVmdks1OHk2MXZSekhYWG5ialdPc1l0NVNxYjlrbmRtQzFublV5cldDZU94THdPbm5RYTlQdlVqSjhOb0VBcmcxVGZLbUJsWmVrS2ZQVUhZcDYyOFRFTHR2Zm1zaWY3UHlFZStPMUZmZXhzTDJNbXR3cWlJdEtwNVZ6SERaWGxKLy9Ma0w0VmdtRk96S0J1V21hbTJjZHFmWlB1U1dWRkRsRmx2RGxqVGxWdi9FbjRjRUhrZW1zeSt4bnpjcURiaE95b2pIRVV0S2pobjYvRUNnaG5LZ0JBVCswWFA4N3BtTGIybFNQ', + 'WHZWUGllS2JVb2MyTElnakVSTHdGZEdTRStLcUxzckF4aWo1VlB0dEtzbnNlREUvY1N3VnRTYUx1WVF1WkFYVEp2eDJsM0hTUEVJYXZ4SThiSDNQSC9NZjc2eUdpMy9yRkdOYzhXM2pyWnREelp5VXRqbEg1dlhycEQrRllyUHFlOFVSWnYwcWpja3l6a21IelFnWStUb0dsaWphSDlmUWc1YmhYQUhHS0VsRWZUSUJZbU5rZnZyOTRVWS9mYWtKKzlDMkVmK215N1RSVU1mMytHL2taWmIxWnhuM1VOUVphNFo2OVZROVdCMWNOMlYyQ0M4Q2VrVkFyaHA5dXhWdkJVQndIa1JPc3pubjY5UklmNDZaSzV4TEF5MHBvN0pqZkVZS09WVU04RENC', + 'R0VZQW5JQkRXYWIrNCt1ZTdZOCs0Um0zQkc0RnFwT0ZwQjFQYzh6bDlDZ2Y1NjFnQVdGc29jaGlyTXVjUVVnRktNaUtiTm5hMHh0OTluK0dVbjZFdm1kWWNzZUtMdTJ3WDduSTUwaUxmT3pVcnA2V1dXZXUvVVo1NTExdGQ1NjFoMW5HMHdHdlV1Q3IrRGxJRE9GVG9DVmtJejQrOHdrVzU5NWhTODVUSVg4NUJpdnhMYkNKMnkxU3FiazVjUEFWaXErY0I2WFVWSmpCZXc5Z05BVUJjMld3V3Q4K3J2Wlgvc3Bsb0tFVi8rWkxiOXo3aDNUV2ZuSjFlV09wYUJPbnRTTURsVHF5OFBkWjd6ck04OEJrcWJKMDRYeS9JRUFJWENsd2pCOWxuUE0v', + 'ZjBkZnQvTG5weHp0enlvSnp3ci9CdVNTZWo0ODV5NytSWFZBWE5RRlVpY08vVnFsOExOMnJ5WnhGc1NCWGpLRlRsQkVKa0VGS0lyQzNDVGtNSlBlNTNpNEU1ZVQ5RkRPOW16Ny9pditkbjNUWEt2L2YxcC9FQXBldFp6bXl3TXVMRUtMQjIvNW81YXptV0ZTSVQ5aWZFb2xIOS9oc0hYYTgvdmpsNDQySklER3hNM0EwZ3JEVmhuT2ROYTJBNEt5UW82a2Vrb1NXQmN0VjFLUzd1ZU9PTWYxYm4vVjYxYkU4cUtEWEFmQUloZEs5RG1LcTJmenAwTDlTc2NDbXFQVmhlZWRVNlA0Skc3d3dmU2VPeTBmSUVnSmdHMHdFZXJqM1Y3M2I1cTN4MzVW', + 'aE9TZkRLWUxUak5JbHJTQTZJYUcrbVNxWGE5WkU3aE9DTDl5M2ZVSnFLNnZuUXF0WlJCbzNtbkl4MEVnc0dIN2tLWkYzaVVrMHBPZWN1ek1FRGx1Ukd6WjZoWCt0bnVrbTRObWVDTmQ2N2pidVQxYURuekxyNDl2dnUrdzc3MTExaXMvdnVxNnEzL2lXc3pDTXJPQkdPMlVZY1JtZlZyZityVXB2SnlVa3pQT29DL2ZIV3hQVEJkeG5haXlTVVRUb3VsZHlsTUhBMkljZkM4R3FHa2ZKZjEvV0QwVXlrdjFBK2w2d05YckJ0Q1hBVW5xQWFWL01uLzZ3L3FYTCsrWGh5bDYvcXl6SUhRTkRSS3ZuMzB4ckpQWis3ZWMra2pIRWtjMTRncFFmSE9B', + 'azBpQUdBc2xscFE0N1N4UHo2c3hMOGVrVVRCR3M5Mkhjd25WR2R1UHZXY0d3SnZ2U25lNGxLUWFFTjNMazQwUTVXT3YvM1h2dXBuOEF3QytvTDd2U0Mxc2x4emlqMUNvRkJiRHlsSEZhWDBxaWY2NW5PeHhWYzJranR3U3BITG5MbHE0WGNxVW5ZeEhiN09aaFB6SWdEUFB2dHAvdmYzdURFZDdpTW45TXVjTmExMktQRW5XTEpGbnloNy9ndm9VQW9PUTRvamdPbjhUblFlY2VaLy8vS3hQbmhlY1pKN0tHSDZmWm41K1lKUzFFZzlwQ29JRzVnUUZnSW5zUW9UTkQvZGt3RkpzcXh1M2xwM2I3VXZIcnVFbWpDNEt6R2lXQXcycWlmRU1ta3FO', + 'VllDY2dudjJJMXZ1YTB4OUNJanJ4UlRsL0tNQUpwRkJKTVRDOTU2QjNQVWNlZVJiWEV1dmNpNGhZeGR6R3Nqbk40TzBjd2NsZ0tMb0ZWNWI3WXBab2FWdGxYZG43UTRsS04vS1hyN3ZmbllsNVBzTFZyMnFSREpYU3pzM0ZWS1NSbHlrS21pS25oQVRieTJIZTR4MiswSk95eTNUT0tuN2ZsNDh3dCtVL2NYWGI3LzNudm5yUHErZXJ2dTdSLzBSdVBlSFZlZ096cmdhRW9Iak1CUzBTNWZmaFo0MVMzN01yaDd5ZGZLeGhIRC80eHhRLzl3Q0UvTy8rYkQrcTIxU1VreUthc2lzQ2F0cXpoTWdzR1BtdCtVbG93aXpCNlIxQXFnL3R5OCtCNTNY', + 'Q1BiYVhSOUFqZlNuOHZhVHYremxPTy9NZlhGSmlQZkdqNEoxSnVBd2tqTSt3THlVT1RpaTNpUFFJc0tRQnF4WVAwZDk1NnViYm5yeGpwOTIvOUhrS1NSdWp2K1Z5b0FRMFF2T2F3YXBUSXRlNURVMkxwTS9kaitBR3JlK0NVeHF5SUwyc0MxYnFlT0lLY3RkbWZwNnNOSm5OK0RLWmtFc0NXTkFLM2twSzJudVNoWHhVa0pIZTFaVE5TN2RTY0MyWE54SWFSM3o3Wi9YazUzdFhuZjMzWkk1K3Z2aXo3NVZaeU9UVHVOelRDVktOUmxIVVJRcG9LaDZWRlRCVlVtdnVMK1hJYmpyQmRnN0hvanlWbzF0ZVNWQ3V6cmFEVXM0eEZFOE5seXRBdm1J', + 'WSs1TmZDSjRCWkdzU2V4S2c0UGl2ZEo4SHovNHJqL1hBeWNVeitsOG5EOURQMmVRK3QwVjZyZ2F2MmJoTVZsQVY0NVR1U2l3bkx6MWhVK0wzUjVVYnVaVGM4QW1JN3hkR2Uwd0FMSnU0dzNKL0VPQWlNbkFHUTh0WE95ZXVlOFQySGNjWSsvYlhGY0VvclJFaEpVNTVjRjNOempDcjhEdjYzZkpZNlN0YUFKcDZHSDFlWWxuNmpLQ2JCaWlFTGhMcmtTV2ZCa1drU0NPZitEeWhUcjlDVXZFSzhiaDNKdWlOMU1DS0lsVnFPNDhvWUdMRldIUEkrZ0N1cy84R084Zm04N1oxUU1qd29PY3ZKOGJyZzd1d1BsWC9uZkFyRHZVMitwZ1ZudzVRV1dG', + 'b0M3MlFHN3Rqb0FYOGJZaHc5aVdBa0YvYS94eUhzRkxsbmZMa2hpdi8veCtVODl3U0gvYzEvbmhiM05VWjRZQjVmVmdMcTZvQ0NjeGFyOFg4blkreXRiTDBuSDFvUFpqZUJFZ0puN2Zmc21zQWtndUlicDJOZXJFbmMvUm9EOS80R2hsTXk4ZklFZ09nQ1V2TE82bVg2Kzc1dCs3dExJNGV0UHIzUzRYK0NiTlZtU0huVHVpUkprcmFYeEIvNGxYWG95VHZEU2JZamdXWDlod1huUlczV3grSld0Rk04ck41K2M0MmZEU0xUcC9TUnF3WExueWVwQzE0UHduSkNiT3FmNURoWDlOaWw3M0Z4L1cwZTBZVC9DRHNPOGM2bzEvTzNhMWNFTlpja3ZI', + 'V3Uzd0hkWlN1am1OZ3Z3VzJEQTdnRmd1UHN5S2tyY2RYam9hY0xUS29nUXpNRDBMWElYL0JTZng3NXY3NHBBNUxCdWlSRm5wWG5jOWVVV2EvM0RRS1VKdjF4TUMyK3J6d2hBckNiUlVMb1ExSi9jbkF5UmNYcVR5ZjhGbUk1aDFIZjRSRjZiaEV6VEcvSk1BQVZXMnhSRVF6Kzd1ZDMvZDNiZnc4aHljYXhXWVIweExQSE5IOTV3eTFmRDZZOHgzQ3IzLzZ4K1Z2VytZZWxrNjJyVWx1ZzM3ano0Y0hkamZWL3pKd1pveEtSRlhLVWFSOE5ETkd4OXJWam1lbHdwOTNZaHpyMkl4RWQyVy9MVSs5NWJ1ekQ2V1RYUGJJUUJDS3creGw0VG14UnM5', + 'VTg5QWNIdmY3Ly9GSitVSEJxSXkrVkpCWXBjazBNN3RmRHd2VU5EYUlqM1d1ZXRaUUg1Q0xVOWJXdGRDQVZDczByUXJGaW1aUFVHc1hIbk93NW4zR1o0QkJLQm1oaktiL1RJQUd5TUM1NDVNLy81NDhmL1RHYU9mOEFtYndLeW9iNzFnbHBtM3l0TW4rVzk2NGowMUhCYUhObmxTeTY3ZE9WeExWLzN2T1JWUmpKWnJuWlhaMzhwNndya2FCQzE1RU9QU1NMcm1sV2ltcXVYYVcrcys3UjhPOVZIK0VNWXRDa2NXbk9MNzI5RmtUc0djQlBEMlcyd3NWYUEzdlIvRGFCa1FMVjZZRXVYdmxLZS9mZkgySXllZGlzUVR0SlZtT2xnYk0va0srdStT', + 'ckJ1aHAzV2RmRUpkRlVucU0vU3B4QlBLa3VHNlBZK3Q5TGZtdFllRldZMmpsSnozWDlZQjQ4VUxrczRhcUVtL214RUhQRmFvYW4vWWloMTBUZkIvZ1FBVGNONkhCVWE4Lzc5TythNzQ2OGFiVTBPNlBEYks1bi9MNjNyVDh4L0ZnTER5UVhnMkMwUzErUHh4SXYxdkZtcW95Q2ZXWXZuUEVPRjJTTmhHbnJKaGJBNjhvZis2MkhYQ0M0UENpeTJYK3c2dFIwMmQyZEVOYmtkK09JMXZUVmlBTnd5K093UXovRk0wZHlHQWRIYVFMdFkzOC9Ma28raVhPelBISGg3L1pMK0FSU2Q1WEV2UkhRQlF3VlN4Q3REbFFzTFRLRzlBYTJwQVFUcFdmS3Nh', + 'anp3MSt2K1ZRaUUwTHNocmNmcmZOTmx5S1Azdk05SjJmMHo4KzZmMnU3LzVmMDNNZHp3Vy83bGQ2WjJhMmYvYjkxanozOTlJMmYvMmU3WG1kKzhPeitSWjNObXk0aUtpb3FJSVFIMUd5R0JveFFRVmlLQkZvRnBVRVphcGlLcUV5YVlNbWdsSW9WTVZVR0tGSmVReExLVWhBeEZTeXFDQ2d3aUxMN3k5Wm50M3pQZE03MzMwLzBSNVZKSlF1YzN0L2JzLysrZGdVSVRMU0d3RHh6Q0JJQTBpdkltOVpBMTUrdjVrN09IMnY1NmNGby9pbU1qaE8reDlCd1EwK2JDYjcrcTRZY1Z2eHNYQ2xXQmd6SnhpOU9pQ01ydkNZK1FPdjhpSk5SVDZJdk80', + 'RU50cjBtNzZIdVFYdUptdGFQSE9GU0xtT3hCdEJobEorUGwyTU1vOHFPS3loUFB3SFZobll6bjdYakhlcnR1U3NUUkY4bHZTc2dSc0FaM2szOEoreEtqNCsrUEZ2K1duSnRFRXlqTUlodjJxVk1xaHdLUENhQWNHUlVTOUJGSTdZK0hDRnFlU0dVMnNmMmY3bmNES0V3ZS9EVTd2L3RMdjJ5TmQxOWN6Tm9LODF2amRsZXFKL1NNc1JZQ3EyQnM1bXJidmM4a2xVS2UyM3ArMlRySDNSYWhsSnZQN0J3MDBabXV6eGEvNE1tWHQ1MzdwaTdXTmg2MW9VK0tyNlF0YkZaQ2Y1UTg1Q0dLZ0JoZTIwTTVuRmtPNjlpeTNWaFpuKzI1blFZN1VKK2NB', + 'aWdReDJwRVYrTy9sUTZURFQrS1VDd2gxTFEySUNCUWF0WEQ0YW5oVmJuWCtycWw4cWNLVnEwZ0l4YmxTMytvdU1oNHROTGY4eVl1L1BGQnJYcjNLdWMxTXRDSkdNM1ZkSGEyQnlZbWFLL2d5YU5Sb1VPYis1QmJnSkowNWs0cWNrWWNvMFArcGt5T2dPQ2dCUTZ3ZGIzVFBsYS81OVdxZk9iOXFkQmNqSW9SNzh2VUFXOGU3Nmw2Yjg3MDFMREgrMzJwaGxPK09maTZzQ1ozWFo1eW5oMDNIcGx6M0FkYnI0QnhmUVFtQ1pKNXlTdTNnR3p6L1RZT3VKN24rOGJpdjdyQ05BTEJZU1E0YTlRRzVGM0p0aS9md1RjU0VmM0NrR0pyTTZqUEpFK3lJ', + 'OUNMU01TNHdJL0dCUDhjY1IyamNjczJFZkVPTHhPb3FHUnZKcEJGTGpBTG04cTdlWE9wYVZObDlQZ1VuNDE5TFg0U0E4N292Zkg5TUMxclVYWlhTeU1VRGdBNXNKUkdHNWJRaGo5ak4zTDhVWEErK0hPZFlEVjJiMFBrY0MwRXJpbm05emlheEpSSEJQcEpZbmIzYjNPTGV2cHp1TDZaOWp0M2ZkMXR4Y3p6dkVETEV5NzhPYmxKZTRqUG52U00zMTEydVRzYzZUQ0hnb294Q2lSd1BCVTRubjQrQWFmRjN3TGd2SHcrT0l6QWtlcEgrdDlhdE56ZlNEK3djcnZxQjVBTUJrVjhhVm05anFJWGlTMmRUblF4N1pVZThwSTFVTG8xYnV1VjhoRkM4', + 'RHlGcVlPazV6RnBFTDF0NXlEN3lIN0dkanRnTXRwenF1S054dEJGZHFBdkpDUjc3ZzhSbDlaenJrWDVHZDFIRS9lNSs4SFV2L3RXeDdUcURHVW9BTVAwT05ZK2VQbXVSMWY0WXFqNXBZR0NOUWZsMFdZdThGTWpOS3JrOFZkaitTeExiaE9JYTZwKys2ditkejNicTg5MHFsYjQ2dGloNUplTStXS3dKVGNFYXp0Rkd2ZWM0OW4yWG1WOXRRMXRUbXpSR1V3OXhoOXVEWHNoT1ErSG9HeDJqb0tuL3AxVG84cmpoYmdNMkY5YzAwWUdmNmU5SVg3c29CSUxqUUpDWTRQUXVXeUt6cmlwY1RZVFkzdytRZS84YktTck5iZGpXTGVxbmpHRFhKcWdB', + 'SFUzNVRTL2dYaXlJb00yUnR5SUhWSEk2QUZDOUN5UStFUXI5dUI2UWxnY3YvOWtLRlVvenNjNUdXOHpKc2ozdjA1emJjU3ZsZ044Z3FiVGNMR3NoMXl2a2l1eFY4S2xoZWsvWmdyNUVsQ01wRkRaK2MrNWdEL3plSjFhejBtRWVxMUVoMWEwWUlEZ1VMUS85dnQrOW5TN3QrZVQ5dXpQQ2k2b3JmVE1zUlVJNzI5SFB4dmMvKzh3Mjh4L0w3VS9nSlF1OWRHQ1IwTFJ2WVdnbVhrVXduZEF3OG90L1ZqdlJKM1V1dXI2WkVmK2xIQVltbjFhTGZKWnRFdWgwNVAyOFc5bmF6Qk82TFp6Ukh6RzdVZDVhYTQzK0FRaDB0MGdwRTNON3VISFBialZl', + 'elZ4ZlBMT2FJOGNIdmptZUtadEZXZk5lT3NlTjM2WnZBN1BXUnkzZkhob2xyMEJWdWxRK0FNZ0JLUXFmazZURkVBQVMwbkFGTG51QURScHpSYTlXMENBdEZpS1NLNVZpRFFibDdGZTB6cUdhdkJRREZZeTAwREF4OU96Kzk2YWZ2Y2owRHYvUWw2MlRNOEh4d0doaDI0OTNPVTJXdTczbms2OStPdlZkek1SbWNqbGVmaDk0cGQ0elpIdUg4UjRzTzQvWEVMV3RmYXl5YXhuVHlSRmZ0eVhIUGxNbi94MzVSZmcyS040dkZTdWNEL29EWXJFZXhFUnhlcGtlTHVkNjVIL0I5VmpQZk1LcUprcVVQMXdKaURZaVVpZ3Q1c3Qzd29UWnRVQUo3RDRy', + 'NndCSit2VzZpWGE1NXh6VnZxTGZwaS8yY3M3VC9aUzF3Y0RnR3VDUjdCeUF5c1A3RWtvMmdJQU5ZTTZSaUpQSkJWTzRvRWp0U3hBVS81cnRlVy9kdldSK3RwbnJFQWtpdThOeHdDeFF3YjNqOUVYdTF6NVgyTzc5T0h4R2FlUzl5Q2t4Q3B3Snl3RlFrS01MOERXOWlNYjVsOUJ4Q2RPQ3ZrTG1SNHF5ZklSWktUcHZzVzMzQnFpTzhMdFZySGxOVDA5L0VCa2ZnczVxTnpFMFlUZnlsRm1TMlNpMkRqWEhFNUt1RWJOV0FqdTlCMDRoeFBXMlFWRW5DVEJqMXlSVktlZlJ6UE0rOEExZmVzTVJrbllmQ2RCTzBZVGxaSWJXUUJkU1p2S1JXTFNm', + 'VFhoVUFQMUJRTWlKREVrQmxnRUU2d0QwUGlOMk91bk9MMTh4blJYOXgwYldlZzB5Wk0zT2ZFUExFMHhqM0RiMEtsTysvdWt0TC92bjJTYVJwbXpLcTlqWlVKYmk0RjkrRTBjRHdtT2VMY3o1dzNlUG42M2h6K3p4Tkpza3BzVVBGMFhPdUxKaERhRGt1dENlREp1Y21rYXlMdWJPZEgvTXBOekhmakJwUWRRWlc4akIxaGMxS0JaNUJRaHJ5ek9BbFZMZmxwQzN6eTBSbFRBU01rNjJRR2xpdHV2ZDgrMWZYTVJ4YnJqdVhNRjYyT0NCQndRVjJjNlFHY2k2WnRKdlp1NndkU2Qxclg5ak54b2trd3g2MkRnb1pxTDdzOVNpNlgvYjRDQjh5MU8v', + 'TEZ3QTB0VFRlaUQwNzd1YzZRUDMyU1NSeHlURk9KdzNwVmdFbnk4NTltUXBFVHNaVGRHcXdCdk00QjhEVFQyVVdkTXlTYitRdWh6L09DZEVBV3pIbUJDRkUzSFpuTElyRlM2ejR0YXZZNkNLVlBETmdBZ21ZS3FPamxRSHRGUkZKQlM5SHJSV3VDVFdXYkVGTWFRNThicGM4T3ZMemY1QWgxYjBkUWZYUEt4LzlvKy8xa1ExbzhVaUF6RHdJa1BPSmFpRmtIcWxaRWdQV1VmY0dFanpBWTZYRTdodUJxcVUwZ2NBdXY5YjdPS2Zlc3oyblFhNzdsbjdFa2xHdkxtT3lQdnRWZzBHTGowc3h3NEhoeHhwdE0yNC91N1V2bi90dGhVdlQ5SHZEMVhv', + 'NGJaWGVxNnNESGFwQTVKWmZESWZLREd0My83Tk43NG1QdXRaWEs5ZmRlUzdWMkRUU0JNejF0WG9Lb2NrV3hyV00wRFYycTRlNUkrL1hTWnY0dldUY0hvNW5vQytsNVdUSmhuNUVWY2VsQUtJTUhYclYraDRyczVTZ3lkc0ZPU0p3K29HbU5ocFVwWmh2TzJteXZ5bUs3UDUvZXZlWTVLLy8wUHhyM3hBQ1FEZ0pLWmpXSGc1R1pLNS9Mc0JNeUJ4TGN3NGVUWnZWT3lIbkR4Y0hHR05rSXBibmYycGs2YjMwWnpGMDN1YTUrZFE4YlBuNCtmaWdKQ1hydE53NWpDLy9kejk3dTIydDYyY20xUFJiT2hzQUJOVGhUR1lLREYrVGNwcUFlVU83enNC', + 'YjZFL1duUHlza1NJTFJJVm5obG1wQ3JaVDhsV2VtbmxBS3VQZWpIL0I1NnE3SWZTLzY4eER1aVBMeVFSeE14NDRwaTFQclV3OUpuVk5ESVJZVy9XSkZCVlhNOTh5MkxJaVowNDUrT0FYMFpRZkQyS0JDNkpScUhROFFjOWEvT1J6MUw4OHdrZmZzaWdPQzBhU2hvckFWZ3lCaHE5Uldma1p6YmdwNDkyc3kxZlRrUUdsUUFrVEFhQlFBajJjTjhrSy9nZGJOdHUzNmIvenFxZU1mOU5PR3Y5cVVLbW9WK1d3Q2hHNllkekJWZGN0bkw3UDkyc20xTlRQajhES3pLMmxwWHVCUER3UmQ2bXg3QlNRa1phWW9SYnF3eDlYMjhuVmdzTGRoZlo1amFm', + 'MllkdFVjNnQwcUxDbkRQbWpPL2M4RFZzYitFK0VKVHpla2JtWG5QaldUcDF6RHJ6dXFZNkhmV1phT2xNS0ZzeThmUWVOV1JsSFFjR0xjcDlGdnlaaXVISDNsNDNiZXYzdTQyRmFGWVNBWTJEQ2ZBK2tMaGdKU2Q4a0tOMWFMbk56QkxnSUFkTkp4Z1VZNEdPOWlVcUFIYkpad0ZnZnEyRlFWaVNMVk9yQTV6QW8zWXNBa3REc3FqNElWaC9wK0xOZmN6SnRwdStyeERISlEzNHEyWWJINitNVGRxSE9lZDc3LzJmNUk2d0VwcFdrMWlOL3VUYThQYkwzVlMvNXpmWmZRc1F2Q2pDcHBuS1RxWGI2QlJCZjBxdkluRkJPYXV5OGxXNVQwazVGdmJ5', + 'NXlWUThFdDNoWW55QlF4NElZSDNBY01BaVl2WFhiWXhYN2NmY1hWZnNRblFnTkRwTFN4bElyanpCQU42YjJSaXVseVp4VHlVR21TVGhrV2dFNGdyaUdHQ1A4SzEwK2J5ODU3Qk1KUnRBZENKZjB1dEdzM1Z1UHZ2M3lqWnJ0OTV6eE5EdEYweTh2VUFIOFN2MkdsdTIwNUx5SC9NL2hmMkVRS05lYnoxL0t4MFNSbXMzTURvZktPQ0F4UWVSL0c1eGQya3RRNkg5UVQyOWpVZms4U0JxZ05kTnVrSDg3ZHd2WnlrSnVuSmVyUDlORngyMENaRTZ5emhsTjNoWWdpRHlMUWU2ZFA5TUFsL2ZrbzQxdnVjK21CdHlBQll2VGRkUU1JVGttWkNJNWZt', + 'STBxNnZRbGxSTGNPVTdaYi9KaEk0bEllMW9XQUk5RldtSFhFM3ZkUGRWU2srZkxXZXExR1ZINDlNQTNtNDhmaWdGQW5wZHU3MzhmbXh2ZmIvTDY4ekt1VHRoMVBJWUpYanpEQXVWRitqdjZLVGZpLyt4QWo3enhRZkJraE9RNWhCVHorWkVkOG5DYjdZQnY0MlAzaGlYRWxpelhwTVN3ZU42OTJJdU5XKzhzaE5aZFUyTjVmZm1QZWV5L1BqVDhCN2ZxRFRocURSWThzb21zMkpSM0FJWVEwRForME1CSlRkNGpSOFZTN00vZHkzUDdvRS9CVWRhNk9rTDY2MnZ6R0xlOWNlM2RQSXgyMUhKOHVyaGtkL2tjV09iZktMTjlYQ3IxYnpIRzN0cHAx', + 'WStMUFZwVDR4WHlUSkRMSlNuMlc5c1JiaHh2SnZaa0E2bjV5SE16N21aR2JrbXZ3c2tlUEhIK0J5TUU2RHkyeDZkK0UrWDgrbGJMM0p4VDN2WlBnaE5QSzc1NTZBUFNUQVpyemtNN3l3V0liUzVPUWVDNWxnMG8zenhIM01wVnYvMm40QmNmdllTYXdVOStPZ3pFekRGT3d4WXlWbnFXUXdLWm9IaEJZSVVIKzlzYXdLUm8vZStZWFRldEo3YXVsTGVHdjJlU0hHMkNIL3BOckV3RDRzTGplamRtOTg5Sng4cmZMN1V2dTJZN3kxcnd1TWhIK0dwMFpMR09UZU8vQktEaEFrWmNYL0ZoQ0F5RS9aRTk4azQzYkg0YkU4amFlcWQxWVc2OEpEczRC', + 'NUxyNDFOeGticjFWbmxrYXdXOURNTjNTSGh4QzFMSWR3VmVMUmdWa2RPSzdwSFpOMy81ZFI0eFJLai8vcFk2RHp5eU5jQVFNZjRNY1d5QkVvemwwQUFod1VSUXl2eUZYLy84WU9EbjByQXllaXlENnE3MVA1WG5lL0toVzQ4ZmlnRmk4REJiaUJ6NFBKanZYMGVXaEhxMmZTTjJOWWx4UUNRb1RHWGs5MmRZZENZYXdEUUJjOVhDSFNHb2ZCTlgrVVdMRFRqTmNQQU1pVGlrZWRBQzRNQ1B4VzZHTzQzSjlNai9pMXk1M3ZqRjJ4VVArcHVrWXdlclJBUkVHbTNoa014Wlk3WHNKanVIbEFWTHl6VStQWEtQZWRtdnJuVytiT1VoeWdpQlVORkpa', + 'UXlrR2t0eU5ETllvNVRmSXJ3ZlQ2cFVFcEFMRE9ZOTBlNmE1aWo3M0xlTDhQR3p6cy9YeWExOGZqeGZKRytuekp2am1hYkNBbklkbk5kTkhBZ3E1WnJmQVpZOHNvblM5ek1RLzlFNndJWG9hUzZ6Qnhxc2pwUnFXcVB6RXZiK3d4Smk2ZzlIZUNDdWs0R2p5S2J5U0pnRUNmelJQd21UL3RpU0pEaFp2UzJCZ1pvWUNOZm8vWitISng4ZVlSTFdwSjN2RG1vTjFRekN5VWtXNGhlQThIcXk4ZUFweURVZ3l3M1hDRTBJZ2tHNEVvTlp4VExFYmIvYjJ6QzJmM3MvVkJYaC9LQnNRcWNlYjhrR3FmZW81Ky9tRHQvWVkrYXIyZnVnamdzWk81amRI', + 'ZytmUkpydmpIK3ZNN1NVQ08wTGlDQ3VsQnU1U0NsY2ZxRzAweHZCOTM3UnlRNlpVKzJhTVE4K04rWkNtT2RIaUtmOER5L3VXOWlxQjNDQ0NURGxJVXZWYmhpeElsSGdaWUdCd0pvYVNwcWN6ZWRwSG4ycTRMWC9mM05ocjI1QUJuQzVFMnJ3d0k4NXg5Z2Z1OEwvd2pnZTZ3UitMYlJKYmEzRnVnanNVSnAvcVZkOFJrTi8vYmxlYzdxaTl6VzRZOXJLd0ZKMlJzQmJHdm0yam5Lc2I4MHlPTlVNcFcvR3BnQTh3aS8wNHN6eHc3TWwvMXZBOEJNNDJGN1U4eXFOaGRoLzRaVXlQNlVXdllUYmN0OUxpMmF6bVhBcWkzS0FBQnBaZ1dNSmJvRkFI', + 'VDNtTEprRU96YjYyRnQ2Njl6UlNaYjdNZmdVUWtMZUE2QUZaNG92QVVzNUQ5RFpoZHVvNW9UeXJ0bVRncGpYYTNDZEhYZTVjNGxlbGJUcVkrRDgvTzFCUmJxeDI3UHRReXR0WFRuRHNqaldFbFB3aDh2VUFEY29GWWpLLzB3NVd1ME5YK25wTndONllPdDdVeGJyZjZMb2pXYnRwQzV6Y1E2UEFHSmoxNnBuYWZrM0RtUE1UVm9EVEZoS1N1VGRQbzhJT2I2UUtlWXg2SXFFbGV1ZExYTlRjekM0UmhIb0ZMekcxNThoRE9QQUNUQnVGTUNJakExUFRaeUVOUzE3TERtNEJCNnZmSnIwWVdCejlNV2lQd1JYK21va0NUN1VBbGFmOEVVd0NQTFE1', + 'Rjg5MDkva002RFVvUUNBanVlb2sxZUgxMGErSW1iN3FqVmJPWStnaTUyQm9WLzNtWWhnYTQyMmpHT1NQNXozVkovNC9aZUxKT0Y2cHA5cHBhMHhGUTRUa2tIMEJEYUpEbkZ1U1BrNTRmLzhZbThvUHJoWDUrQWQ1elgrUFZkbTJDUmRPL1UxSXVUR0o0SG5iNi8yWDdtdUd1bzNmMk9OZnRHQURHUndXdExiOGtDbUpyNHcrZVVOQVo4QzAvRTlYNy84aEtlWGY1N0g4VUpaV1h5Mm9FQWJpMFNPb0FHQzhRODh5TUNHQ3ovRkVMWnRsZUF0Kzg1QUFHZ2lDZ0FRYTA0N2lyTmFwKzlmM05rWjd1V2JYdnJTNmRBVUYvbElZZ29TNjJTRElQZXlT', + 'OHJiVC93YjV6U09TS3NRQk1RVklzdStQWXhoSzdxOE54anlxQUNZR2Jhb1ljYjJSY3pKL1U1RHZlWmw2NWh6cjdxNUx2RjBxS2JiQ2dJQ0NMMytqV2E1dnB2VkU1bEU5L1ozejZuMjNEQlREVVdJNnhyVDUrNlZBakE2QUFvdFMrN0ZVU2MyRDlMa3ZlVTF1NWw1L3cycnArWU5aenpCSTdQM3VlcjlYZnM5R1RTdHUxREhlcWFac0FNRy9MRlFBSTI5c2daRXA4L2tvdEhLZmI1STVJVzdKNExaSS9Ld0lHNGhkdnBPY3FVaWZPQ0hFVnJmY1VZQzAyWGxtblM0a20zYkVVN1hpREx2eVpKT1M4b0xHM0RDMW8yQjkwai9oMzZjR1I5WkxYK0JX', + 'T3p3TUhVdTVBRmtHQmFSaHNCcGQ3c1doSk1aa3hqWXFBdmhTYzFuRU01L2xUUThITmpIdkdGV0pFUUg0QjBIa01reTlvd245emRxUUw4d054eVJKTnZvbzlBSmV5UFhQY1Y5OE9Vb0JHb3pJTzZheGp6L1ZMV093T2FjVDNxRkJwSnJoQ0FnalZCTFVWZ2srL01IaFNqL0xiSmxCYlA1SDVGZmRQUjdod2IvbkQveUFWL21HeHgzMzZjWW9FMmw0Z3QrWkxKMG5WUzhIZzhPTHhoTzQ4ejJoNE1adVkrMXp1OVZ5NTh3eTY4WWRxQkFRVkpRTEgwR2g1eGFIWTZqMGdHak9FNHpIOC9MdGtOUU9Cb1djOC81T1Q4NWN6enJpU0NpdzBGeVNRa2NJ', + 'TGt6bzY3bnZTRjY2cC9mdTdGTyt1WU82OC9Qby9GOFJTdHBMYnBaTFNTTzJ1OFlxOFZOT3c5dkVBUFVoK3FObUx2VldQT0RoYUQzVzJTNjFUbU8wbUkxVFpNKzcyZXo0b0Q4bkNKL0Z1L2xoNllmYkhFUDZ6bi9pd0xadVB2RS85eTRSbW54VDdOenY2bktENTM3UDF4emZxeUUvMDU0bHNtRjFyQ0FqMUtRTGZ2dGZwSzFRRENSU09MNzV3bWlNMDJmRWVSb1ZRWmZCMmpvZmJYeFhaZC92Mzc4alUxQUh0VngrUWt6T0R6clBEV2dML1h1VzA5aHV3R1p0eTlCbUxwTUFSYWw2UHppb21FZk0vTGJoODQ3V2ExU2x6TFRiSHRCV1k4K3V3Q1Jo', + 'bmFyd1BZMFVpT2V1eHczem1yQWZPZWJzWnZBM1AwMUVkN0ZTNnZhUFFaY3MvVHp3LzM1TFEzQXA4RHpmdndqbDdGWnlPNzdtcXh1azFnNGdiejhGOExTQ3pyWGwzM1ovbmR0SnZodDUrRndCajJKYm1FcnE4dkxCNFd1STZna0c4VVo4SU1aNi9Va1RFUEVsUE4ycWl0ay85dGJBTTlvYUFwTGtSTVk5Y01BTzREQy85MEI5L3hFeUo5SE0zQkFoeVp3T1JwVGxOazFXbmhqUWh3c0luRklIMURCSXc1WTlCOVVyWHlsM2QrNFdUWUY0YXZHT2Qwa0c3U1FZL0xCd0VGbXkyaWJZVmR4NHc3dnQzbUNuVXZJR3NrcWZqSk9FSytiTjhBZ1lPMDFG', + 'MHZDMzIxNHZVeVhTVzgwZmMrZkd2T1NNM256TFBiazdtUHZpYm5Haml2TFdKNzNFQUJVVkN3QzBzTENlakJjWW8vVzZQL3pYcDlBKzZqdG84Nzh1N1R2MFdrQ1RQQkpCa0JiQ3BBUFJDR0NHbUlpVEU4NHJ1UE1ZSzVsU0o4aDR4NS9wV1J3alBHa3BCNTJ6K3BzNkxkemxoOGNkTmtPamhiVDJzRlI0T0dsL00yblplY2srek16dmU0NUVWS1AwY2RSYjZ2NEpUdllMQUdjVDduRGs3TEhZa0c2ZWJDei8yd1I2RHNKNXlUbE9NOVVmTThvSEhKZXBYZG1NKytDYm5kS3g1a2hSME9jNHJ1MlJBTEMvZ1YwaGJwVU1FN29Va1h4UmYxM3Nua1kz', + 'eG1SOC8wcGgyQXdjZ2NhbUV5RHJub0VrQUpYZVNkSzZNLzdkcTRiTVhkdmRrNUJJMVNHRHlCNG1CUWc3ZnRvekhCY2V0NXlVbTgrOENoMnNjdHBaU3ZITnhCUEVQaXZsOUQ5amdWNlRvdEhjczNITlBPcmJZSHAyY3o1Qm5kQXpRRXJ5ZEFERDNMWVBwclhWMlRZT1V4WFNPVDNncGxmSE16Tyt6V3JtZlZCbisvbG1WYXJmZWRLQWhBZkVnSkN5YlJTTk9zMTgvOW9ZSTFDTUc0L1ZPZDA0eFNUKzhjbjlaN0NBUlhFdFp4RlJxT0UxRFk2VGtYNi9aVFFBeU5JQVpROXFza3duWDF3d3hUMW4xa1djam5hSEZkaTFtYzY0TGxWc1k1ODVEUGEx', + 'SmtUdnZHUExFMFRxV2VjcUYrd3l0eDltOWMyOFNWaUxqR1lJL0tYQ3o4bDZEcStFcGZZZ0hMUjJ4eitIb0FrZlRtS243ekc4M08xSWk3cTdyeEgzNk9VaDhvTFRJTlY4VmJEZ0xTSkN3R1Jac0x3b2xRY0RPRHc3eWNEaGM4eEQ0blhLd0hneVk5dXZiRlFHa3Z6QWxISlJRdVVGd2M1aDN6MjFrNHRESENRbkQ5SGJOak1rZFFDcWgyTHdTKzVNNXN0R2FOWHZ0SDdPczE4VG4yWGljKzlSOHZVQVBNNmE3TWorZSt1MVdTdTJ0UWRVbEs3ZkpoS3BBVHcxdnZkR2ZpQ1VvWllLelhDUWhjbWhrMkJyaktQYkRTWHpVdXRiT2NpN212b2lQN09q', + 'MnljVDI2VWZ3MDRNbERQVEM0QlFMR2dGQ2xka29PVXpNSUNtUklMWHg3QWRIbU9WQ2xLSHAzM2VVNFFmVCtucWVZSEpEYWpCUy9FbFRpcGt5Qm84UXNId1JrNnZjNjFYanJDNmc4Y3lqZnNKUGRNb2hiR1RLMlRIL3hQVTMrVVROYnErMlJ0bjIrR1ZqWXV0L1NNc1FZYnY5ZmFWdTh5OTV6LzNldVpIeVhrbVRzRDFIVFRQWk9rNTkvWEtVRGNwMlRWeCt4eWhVVGVYUktOTzBMOU96Q3F6MXViRk8wODZ4WFBTM0I5YnpYNXBpSE0raXZXUG9Dd2l4YnF0eGZ6eEhOTFlaODVGQWpENy92RUdyTnkrRWJoc1l0RzJQNE5jY0VWMjJPTkZSS3lB', + 'TTFCOEVLOEY1eVhvZm9KaDkvSUt0SUYvak01MVhzTThoeDcwem45N0hCd1A0UitxM3pQWk5YMTRDUm4yL241MHZ4Ymo4Tm5BRDdmSkFLNHdpZ3RUSUcyQ0VTU08vYko5OHJ0ZG1lOTBtV01yRlZTUGdDM1QvZGFUNDNqZ204dzdmOE1EQ3hYbjQ3K1IvY2tuSlo4eWlGZTRoMVA4Rk96VmNRWXcvZFJ5NDhiQ092Z0FaSXZBaVFOQzEyVnRRcllNckJUQkZCMWRnY01QLytldFVnNGxIQ09PQmVHT1lLV1MrYmVCRXFvYm5mbzF5Vko5VTd0bWxTWlQraEJ5RlUwV0hjWVhhOTFEQmh5Wi9MMW55SDNNL1l2MmQvMnRtT2J3R2JoaTg0TzdFQVVx', + 'YkxrRXJkZDArbDkzNCs4WmtNaU1SWVBjMTdCOEpLaW9lTi82eUNMQ3c1L0JhTXlNTDNvN2dodEo2NXhqV1ZJRG5Dd1BVcUhmUWNVc3hUb2VSNEF0UnBFVEtoanRyaG9OTDFVKzVzRXZPYVBablBVM09BWWkxc3F0ZXBGS1hmSllOc00wWlNaQnpBa3R4dVFlbjNteWI2R2FSaTNmOXU0SmJ0T0FjYkExQUhIMSt6cERCU05vVDg1V2J5RHVjQTY4a1dHVVFzNHpNQWdiMXhNazJHREFtUVo4ZE1wblZ1enhtdGNndkpwbVRueDRiRkdkbW80UGluVmd4K0lReit4N0grdS8yK3gwMnROcUNtSE02aEk0NWcvMjhvcklaQ05URzRDOE9jSytzM3J6', + 'WGs2dzdKVk5QRDBJVDh0dHZoQSs0MVhuRkhKKzUweit3TG5BNy9NQWREb0lNRFdSbTIrbkNFMW5IbENkaHpGeUFJZmx4SUU0NDZBS1hQbHVSdzc4ZzNWcVpJUHNKVkY5UWl6NTV3U3l2QmM0bHdjQ08wNTl2a3Uyb00zZjJ3UDhDc0RxRFNEbDFuaysxWExxKzI5NUxrSTVNUjVmRVA3Z2o0UndtQ1Qzcjdvay9aZWJKU1JUbldIOGs2V29nTG0vUW9nQnBCVWE4NHJKUE5SeGFYMHdaK1UxRE5Qc2V3ZnBZZXpRSVRNK2U5ODJLUFM4TUk4YThhRlFDQVpFbUNqSVJiSDBBaXk3WHlwbTI0RDBmZ1pHMjBvMnZueGl2VmY5dGZ1VXcyUk9xTDVY', + 'enpyZ0FNekxSbkVaM3dMQjFDbzVwcFFvczJCVXhJZDgxZWFEYWhnZTc3cEdnelB2MC80K1VrV3MvTEYyYzFtcHpHZTVNVHhmRVA3STc4UkEySmpuWDBodUZYK09ZS3BmRTdYYkRncEJKTi9IWTJuNlYrSHFqTmtHQWN5M09QWDZHclhHL3l6VGtwUHlpQTd6UDltcG5TOGlwRmMrekJ0U2pudXQ0b0VrUllITWlFdGRQRElLUmpRVjVKRzhHSDBDSGloZWZZdUovTXgrclo2NG4vRDdSaGZPZnNlS24xTkkyeDVIckN5QzdmRDZmMENQem5iTHYrSkJBazhtVmxHLzVBa0RIYXRkdDRmcXpPei9KUWErNE9aQmZFUExnRDh4Y25talhsU3c2eHQz', + 'bjNjcVE0a3RJTmdrTlVoZzlDNFBlOGZzQ0pLRWZkOFNYS0ZZdmhvNi94azV6VHFja1F2em0wTGk3bGJ6d1B3QUVjeVJLaXo3YURrUllDOGk5czlQY3NtQkRiS1Y5WW53R0lzR0I4TnNQbksrc1BsMnZuSjdlOFRXTGdKb3hjRFEybVVJR1F5d0NDcU1ZZEw1Ykd0czZzdDA2ZnNWRlVDdTVZRTNjVEx0VzhleTRtMUhoOGxHL0xCd0hkUmJ4R0pKeVZySFBadWduVHpXdDdVbG5tWFFQQ21pZ3lSZzNUeUEzajRmT2owbVEzQTl4T25oY3RnNytsbm41STUwa0hLUFRjcW1rMmtrTmw0Qm1XTWMrUE4yNUZ5TUQ0L1FlbTZNQUhCSmdWRWdMK2lZ', + 'TTR4VE5CSUMyN2tteEJYQ2lCdzVqb0xaN3MvZjdUaHpucEpVYS9rNEdCNUNBNXZrQWFnSUQ0d1JYakpHcGZaVjhEaVUxOVBQMHY5b2EzeFhKTVc2cDcvWWxPVThkS0xKeWpmYXI1OE56a0RzdXo2NEFaMlBFRGJFWXFxdG9HbmlmYVcvMXlpdVphekozbm5ELzdWQW12V2pBUlcydnpzL2NVNFYxclFtdkxmTy82Y3pEUk9aSUZWZ2ZqelBtZlVmUEFHZGhudnZjVmt2dGVENXAzMzBDczUxd2oxYzhEQWlFamdzdnIyazU5blV3ZXFZRGNvQWRaV2lxRC9jcWtITVJMMDk5dFBFUXVOb3JLQ21hQkJBb0ZpUUNkT1puTmVtaG9TQmxrRnhldy9s', + 'WVVBUlo5VnBqZjgrT3lJcVJSOTFhcTFjWk0rYTVKYk5sejhDUGd2bENzQUQzSTdnSWZ1OCtNdnBtMytQZnJzUm15OUhsaDhvSUh3SjZRVy9sTXo5TTh0aVV1YTY5akRlUTBCZ3ZubTBrZy9SUHM3bmZmQlQydUxZaFd1WCtSdzlQMlltMlo3d2Z5dUF5QVNSQXVvUDJDOGVQR0M0TEl0ZVJRdUdRamtjMldmc1krSy92OHNmMERnWkRvZklpSVZkT2Y0QnZySnQ4Unp3OHFRYXh2cmMvOVdUZzduWGVBQXpQWG9TOTdCMGhYQ0JXZko5VTNkbWVNZitFYnVyakRpSi9RTXNRZ3BxMmliY0p1K0RITnRmenhKTDBra09keTVaZ24wc0V1SzVsUlM1', + 'bDhFbzhRKzAydG91RDJQUHZPOThlLzY4Y3dQMSt3TUNuT2NYV1BPNmtOUzd4Z1lsbkxxdFROazQyb2RaL29Ybys0M2gzOGpPbmhNQ01DMGlCWVJUc0R2MVM1QzgyWTlUYWkyWW9sVDRmb3FmOS94bVc0NGVGanJBVUlyZ2RFaU5QUi9QOG5JMy9BZHY3SjZEazRrZ2VkR2RBVFA1cG03R0VnZUF5WEQzWHlOOGVMeWY0dmFwc3NCcElYejFtT3R4RTY5ZFVZOWRmcm1zZmZ4VjV2U0FYUTE5MXF1Y0ZxL2JicnpMcDdMMW9YcVNST0lFTXdNUyszUExjOHJTbTZESk43TWtDYXVhdFp6THZiK0RlM3lEQ0R3SUtRQVdJYzdHbEpHaW52ck1UNFBF', + 'R21TemMraXJ4UEZkYi8yZmVhTFVqUTQybHEwZklhSTc1a0FuOWtvbnhMUVdMUU5GbTlTK0FHQ2w5YzE3azlTL3cxNGlEUGxaZzE3YXN4Q0NpT2pBVGpESVR0alloM0VWNzN4Wk45MDY2MFdTdjdnay85SEtrWVRMVEk1UWhsemZPQXJ2bkdEUTdGUktVS0FLNmg0aEZJZjhXTVpOLzcwY0FEaHBnVzBoNzl6bkh0ZlZDT0ZBYmcxRU5KMUpjZXUzRnZ1NmcwUUhnSWNWdlBNOUl0ZlN1RW9EUGtteUUwRStHRU5ERUFNS0JBSTh6ZWFMSnQrRTdIZW92NkRYTXZaVTU3VmpoWDFmSkNtSXFhbzl6bnJHLzJrai9QbDBlK00xSVRTR0pNU0RpVmw4', + 'UitJcERvMm80UEpGMGpQUG4zek8ydkhPNm1YcGZmTGpoT0xTSWdjZ1dzanRhc2xHL3JpdGpmT0FFUldIT2FQbWttLy9YQ1hHNEFRVUQxcmNYOVBZNk9KNEpNSXlEMnRVZytRZXVSMWdYYTJmc0E0N2x4WnlnMEc3cXhtem4yU3JGWVlyTitYaWdGeXpiSDJ3STFjL2ZzZCtqcWJUbnBQMlJjL2owL0RvQzBuRzN2cStVb2cxQXlRUThiaW9UdTI3MnlpNGpoOWk5eTVYUTQ3cjYwWEZBYVVrQmFoQXRzRjJoTDRzVzI1ZnFmVjBrTUY1Mmo5bTA2K20yTENBY2p2ZUNaSVFNZWtSQS8wc2F1ZmMvd1pjTERqQ3BCb3FkRG5BWThqRTU1VllnK0JE', + 'ZkRWU3QwMXdEWjNlOHZwWmNmSDFWSTZOZklPV0l3OVY3WnhycXN1RFRaZXY1ekpMSXRwY2k5RmFBQnA4K1NyN2VNQjNqK1Jab0I3ZmMrYkVZUzIwZWRLU0kwTUdSQW1JTGpkTndBTlB2Z0krazhiVFRUK0NjM08yeUdHTVJUT1NBa0R3R0JtQ2kyakVINWF3TkxGWWNuL1pCU2NGcWZ2OFNYOEN2RFozUDhTVlNOVkxqVEtiT2RhRE5sYjBhcXgvU3NkOXNLWHhvbGMvTmJScHZtS3pkVGs2YnN4bUE4T3RNNkhBMCs2VlhFZWNqWEs2RTlTa0NvdmZPQjhtcnlzVTM5OHowQjQvalJGL0NzaVJFZ0ZDeWFQQjFpSU0rSWlxZjFCL3BUL3lGZGw4', + 'OWZITTZGRWlOVlozTzdIT0JNZGF5ZENVZmlTQStHME9oZTkrcDFhWGU0QnBET2YwdDRqYVV0NVpHYU9ueDN2elhjNDVSWkpxYThMeDNTaGFIejVSNFBYYWNjV2ozVi9QaUxDYU1oVTRDV0JPeGhvNEdSTjIwL0R0VTd5ZndybDg0b1FxWlprWlExaXQzdjRtcEVJL2lCU0VabWZTVHJlYkJFQkVpQWNSQzIra0FVemdzUkRmVzV4Z3U5MUxCTUJNdGI4SDNKSXg5QzYvK01FMElRTVFrczQ0ZllBZ3dkd29nT0M3L2xVOS90Wi8yK0pTbTlxcXd4VFdmKzVvWkdta0xkYXA4LzRucUhwdFgwWURaN01qT2oyUDVHNHJ4enlUdlpNZGR3NjM1dnFh', + 'eGxYUFlXZWlySEQybGRNWkMrMnlvbkFSdk1rOU9KQzZyK3R0dkFOZEI1RE9ONXlRTU1NNElGVWdTUTBlRTlVNE8yaGcra092K3BYeWZvMGs0RC9obGxJWGdDUzdBdFlBV0lLMnhUSVVqOTVYWUNJRlNYUU1mVUNacUZ2ekFJR1JmUGZLa0p4UlBNUXBuZ3dVWEtNTzZscVVPRDZKOHlKZ01WbzhFK2pQc0VIRTgzNGthZXJobXlxNjRuR2EzcUhoc1Y0cTh2VUFMVTFTdFY5d0wxRC85UnpOSnpPeCtUcWdNSm9VLzltRVRTQWpCZUhDUkFJZ2w4MTQ3YlZlMmNRZmxiL2M3TGVUMTNxRlFvd0FFV2dBcWdhRWdKaTN0MXJIUlFyOHhKNmkrMzN1', + 'ZFFBaUlna3orSWtmY3U4a1FFNHdORFEyWms2c1ZYSEJCcy9YSm1pYnorYVJENS9lbFVNS2ErMjBqcGxjNW1wekgyRVBqNGZKYWlCcTZ6WU10My9uMmNTdG5vdjRlR2JxYWdqdlhtRkVSdW9CcE5NLzhvRENlTVRndi8yRXQ5TDJSVzJQZFV3UnZ3Y1o0UEozbnhJQmh4SUN3R1Jac0RRK0oveEI1cjRldWI5WjY3QmFsYnI4R2hyY0NaNVZOeURRL3F1cEJRTDlCTS9MdDg5QjlucUNjMjVVL04wVWF4SGYwWTdtQzJaVkRORS9MRmdHWVlGMlBFN1lzL25QYnRCakpqckdLYjJ5YU9ROWd2bkpNNDBIQXErSUxjQTlHS3hGYzJscURaT2M5U05q', + 'Q2VDcS9lTG4vRVFDQXc0emZyOHM1N2VQNGpBN0F0WUFXTU5id0VrSFU4d1FBOHVHNi9jM0pXajFNWkFjNVIxbVAyNWV2VENrK3Z2dTc3RDBabzRZaEE4SVVZYzJMSi9aVHo0NU1xZUxEVWFidjlYYUUxN1pONUoreko0UGl2bG4rN0lnOStoenpVUW42bzkwU2U4UUhlbFJaTEExRThQVFRxTkNoTWsrVUpvY2E3M1hqZ1FKMGdzbVB0YkdYOUd0b3N0R043dmZDbGZaVFZnZ1BMTUtJMExHUkFtSUl2VldWdncrTzBiK3psTmhGZk0yNGIzSy9vcXNBZ0RYdlJXWXpQZzVUNUZyTnlXaDgwRFhFWXhCRm1Qa2tESUROcFJTMGZvWGkyUURKblA4', + 'WVBkbnFGcXJPOGE4c1FRSGU1LzNxZTVqREVPZjFlYm04Uzl2MklsVVFEQk5JSTh3QU40Zm55dEFmR0NacWZwKzdGRWxIeDluQ3NQd2YycU5rdytaejhwOWZPdHd0aUpQZ3dQS1BZaVhBNW9xRWdGQzF1SllCZ0F3bWUzSVk2VFUwL1RiS3U1UGhLTjdXOTE0QzNXc0htV3dzZU5nK2Qzc1l5OFZKSU02b0pXRzF1dzljUTB4OHg5MGUrMU1tUThlVEwwUGlubHJwM0k4RHpsWG1Pbk9xenRtNGhvTVdJR29vSjAvdjV6REtDUVlOQW9zQ3F1TmFueU9rVzZ4OUx1OU4xTDh3UDU0azhMcC9ndHBRa0E0ajBBUUxHZ0ZOd0dNNWZsMWF2VFlNMXRJ', + 'OC9jbmZDdTh5OFhTTFQ5TDhYT0IzN1YreUN0Q21CNkRVNThqWGFmbDBvK1E2ajBZOThlVkNkVC95WG9OK3F4R3owVStXRmNaK1hDcHF2c2VpTnFSSkR2MUhsKzhMOUgxQXEyYWZpWEZvSmk5QThpT0NBYVlzeXZueTFiRFdPUkplZjBtZGt0UDZqUWFSOGtOZHpPUTB1cERCS1NIOUxIeHJ1L0xzcU1mMERRZ1JGb0ZDMHltWUhvb2dlV2xBb2lBbXROTzk5T1pZZmF0ZlBEbjk4QlNGWkovS29oWjU5TEtZc3p3QTlUNHplODRuMUxpblBOdHR1a2tuODkwelpsYyttcHpIMFYwV0ZlNStYQ2dIYTU5d21yay82blpObllQSlM5eFFaQ1l2TTZU', + 'eGZPVEVDNTdEdWZITzNuYzdQQmpQdHQwSlhxWklEclFqSUxBYTlNcERDeURvcVBFbUxWSVMvMWZ3OG5JYUNsTmMrOVZxVkpWQktZTDI0VDQ4dmZsKzcvR0gxZ2ZTNjZXTTBIc2VpK0owWGUzbTk2NDUwM213bXRhSC9qU3pRc2sxWVFVN1MzOVkwSEV1aDdGTXIvN013Y2daTm9ydHkxemxSTjh5eHduYU40a3MxQlFkblBHaHpkdXFkOUNLU1RZZGtNSUJLZlM5UXd1d3UreXltZ01uUTlwenB2NVRLblZGakY4L0xCd0hSWWR5Q0RPSytjcW9zSjF1LzN3SnJsNmZTM0RvZGg5Rk9pSk04bnBxZ2tzM0ZPRXpHYnA2UkFtWE1kRFBJNHNOa1dM', + 'MjI1SFd3ME5iSkJCMFZxZ1lBL2dmeTJMbjd2dEhNQkJYM1NmdzJzb29VNUhISDJEc0dsK3k1TDZWdHZjdXJyTHFjQ2h3Nm84azJuSENBaS9rU0NkTlJOVjllaFJoN2pTbHYybzRoWm95bE00VTk3ZHllUnpFVDhoMEgzYitMSGtGa0pOSzcwZVFjZVpBMWNPa3dmVXNRb0dBdkRqamVBUVdyZUhOaWMwaG03UC9wNUd6dWg1cnhUSDFBMXlQOFk4c1FnUG1zVkJzSzhET2pXc2hJTG5NakVwNktyb3p0NFVsKzVOa3M3bGV6VkFNeElyY3V1bzZrUFFHblVwNVB6TUtVeUdGMU4zNnJQOWhtYTUvdjhHRTZYKzI1L3o2OFlBbThOcHNtbi82R3l5', + 'NmNtNWh0Z0I1V002VFdudDV4SEIxWXZvSXdFKzN6Z0hWZlVWVUwyVnNRaFFuUTNMNWVZZWtvaEpNWGp2SFdWQm10cFU1YjBZcWRTd2EvdnArcE9rWms0MFU3TzJxbUdNZFBFeEFBSEhrQStuQkh1WkwzSVp5djBBTUNRYkVwL2tsU2QvRC9JN3BvNUJibzVzekhmbzM0NWxWNGxHL1FNc1FFZHZ0N2dzVjlXZ1F6L2EvbENuazdMOGdlSXo4amdhdjFLVjRVbFNmRVA1emsvcVg4UmJEK1duZTM4TElXVFNNVlVzK245WEVDaHh6bVBKZjhOV0dRUmVFMmhvVXRGejliL3VXQzFrUFZkTEpNcGpiWHpZSUtZNUIxSmJwRXNSM0RyaDBzaDNDM1Nh', + 'SGNQc25xOVZSbTdyYkVrdXVOTWFjYnRXV2RQS2dXYU5CcCs4NmloZFZvakh0Tzg4ZmJVL3lVWHNpbXEwM3hHWEp6bjlTYzhoZU1NK0NTYzh3blVNL2VwL1AvNGZsUEk5Z2lucmU4eEVTWGZydjdlcWpXRHZuT2JBRDNGRHhvOC9TQThScVUrdGpCcnNrcnR0YWNEOWVyR2F6SkNsNnpoc2FrRTVVZk42OE9jSHVDRXo5Zk1RQmdtUGdMRElyb2RFS0lVa21ZSTdFM090cUxuWFM3UDVka0tRcXpzQUpFTzVQM3JMemUzMEpZNXc0eE1LbmxPd2ErSk1DSDVhMnZlcTZIR0QzbGk3RDY1bGpUN3cyaWRSV1g0NzFyYnFDMU1JZ1hTWVZSVm9OcWd1', + 'TVdybUlhR0RWNEIxUmhWTWtmdm1KSzdqeFd6M05XbCtscXIzenRiT0NQNE13SElFdjRjYjVmYXJQaEQ0K3RWRTJNYmpTRXBMNi9sU0Z4dkFmTm0rd1I1UFFVdEt5dmlSc1NPUy9jV0RicHNScDNTTDUycStRdnBON3lhckR2TS9WQzRoWHVjWkhIVnVJci8zSnl2K2FmUEpCTmo2SUpaWitjSUw4NjZYblJKdk54UGtTbkNxLzFOZ1pJNE8wOGRySE9PYk4xWVdJKzRtNzF2RTVPQVJtVUJlVjBpQTJIeHpFUHovM1ZmRjZYcThVdlhIRTErYmxpUTlpUWRvTVc1ZVF0Nzl6M24yb0dzS2l3V1VVSG5iSDBSVXNQOEpNTkVoc0pzUG1OWml6VVJz', + 'dFJ1UE40UFh5WlIxWXhlMkF3RWtZUW1kczB3NHcrUVRDUFkrKzRXSmF4SzlhNVcvU1p6a0MrbTRSWUlYRU9aRyt5UGJHNktlZVRRZVpQM1FvY0pqQmFvKzR0dHIvTFA3OHExcndQY0ZqdzVmdFRJVWVISHplZ3RhOGZXVEpXSnBLNzNxOUNJTHEzaC9PU2Vtbm5CWDAzN0ZlbkljNFlKL2VNMGhqSEdtTWxveHpMbWxxSG5QZ0lIbTVEU0c5Q2d0MHZ1b2pSUGNEYURtdmw0dlh5S0lyTGd4aDhWR0dpRHdmL25TUmNRYmJHSG5qYUtrMTZtUElSaXI5Lzl1aTNVVE5GQ05UWTlvU2t0MGgrSzBHMDZpSkVXcUdpUVVuRm1vVkt2dlhOdEhyK3g3', + 'MDdJVUpkeG42aTdiNzYrK24zOWJmN2REWWoxRW0rQ2g4aXVKZU1pZXc3MlloWWU3N280aEpCd0JReURZRHdUNS9mVERvWWIyRi94aEZ1NG1GWUpxZWdKQVFXV25LMll6bG5aVS95Y1htR1FFWEw5VVg5QUszanphNVc2T3VHYXAwOFYxMWNtNXBkSS9MNVc5alAyV3FrSjNFZFE4RFAxL1BaZUozWG9EK0hYSEdRSm8xK0l2UTNDeVNKWk9PRFRXSk55M0Y1RDhmOUJSNHRYV1Z1UGVoa1I1U09zZ2hEMkhxRkE3UndxaE9xWFB5VVp3VVM1Y3pQeG5rYlVURldmUXlwb1lrTjlQMU1iR01ORDlDYm1mN3k4UG5mZ0xJMERzeHo2YWQ1cTEvbElC', + 'R2I2dHlRVjd3Nk1OYVU1VWZwTFF3eHp2L3EzalgwbWU4RHVQUDJpUjFoNi92d1VmSk9oeDN5K3lVakhMQUZKYTBxbElUTkIxcU0yY1hGTXQyWlljdjE3Skg1VWJYYjZ2ZzY4UmpEN0VBQkErekZORVA4c2dJUUtqckFmYkhNclZuTmxBc0MyUDhzVlNVZjcxTjJjNnk3NmJLc0svTEZRRlZ0SEhIdDArU1ZXN3ArajRna1dNa0RrOUU4OEhDeTJtRUM4ZlhSWmlqT1UvSTV4b0ZLZHJDRm05bGtUc0NvTmM4SjBiby9hcWVyY29NalAxRHM1R3N1ZyttL3E4eXp3Z2IyZlVxOHUvOUQxVVBlc2h1OVMrZkQ0ZmhvNFExUVdPSjVuc0lwQlVpM3Ux', + 'dkZDV1JzbEoxelRTL0tkSTMzMzMzQkkwdXh4ZVhHVktycVF6OHZxVHAwa1NpT0syMjNqMDJ6dkp5ekxqd1FmMmZXWkRnZmd6OHlBWEEvZU16OG1NUTNCeS9uME1VOUg3QnVCQTVnSklwNW54enRVMzEyNk1yNnpsOGJCeExlT016ZmNIVWprMzllZDFuOHJ4MzV6SEVQOEQ0YlovcGRNSTJuNkhQOGNUbVRTVjE2VGhkMERkVGRvdkV3Y2U4Rk5qRlpLYXBPVHRFTm8waWswRTMvc2tPZm9RSjFGcjJySEhJTGI3WlJ0b0NvNWJsbittTXd2aFUrWDFNdGYxVlpWNVpaZGRjR3YvZVZPOTVSY2FJVXVSeG96cTdqOVFCaS93WGVmL3dlWTJlQ044', + 'ZWZhVy9XbFQ4YzNYS1hiNThUbVNQMnVqOGVoSTUwYkMxYVZZRzJCL2tDV0xjeWhLZmVpakZUNlRyazQvREE0akNqL1VmYUJnZ2VRUFd3YnhQckpyNDdwQ3RpekUvOEMxMFZIRnE1MlQ5VFNHUGpaWS9MQjNxaXR4S29Lc2pyOFFSU3YzZmJ5Y0xRYmgyQ2x3QzRJSWMrZTdNcE5tWVF0a1VFbmV4aU9RRlllVVZob3M2SmFSbzg1d0xLRkRjM2FqNWw0RlRPWStVUGszcTY4cG9Fam1Cd1A2WXovM09sRmN0YlVHNURYdE55ZWlnQSt2UTVhRUI3aGhrdnV1dS83RGdwTG9tbXp4eFM5VXBtU2ZPL2ozTnk2dDNlTG9hT0NYMHZOd3F6NXk4bnFD', + 'T01XenBVNkdvNlAycW5Uc0VQNW52UGVzYW43UXUvUG0rZW1OUm5DdXZUUGtnalRRL1pHQ2x1SWdwSDBYMkhkQXpvM2xVbksxU1JsdDNmUFVWakpybU9ydmNQcktSR20vbEE0aUs4T2I2SnZpdGZEbVpxdDBjR1orUU1LZkNxMHNvZ1VqQStyazh4WTF2OXMrWVJUdWFxQk5JZUIwbm03Rmp0alBqcHRPWmEzRTNkWnJaOTA0TTZpdEVxd1o4ODNISEhJUUY4cXhTbHh3d0laeWtoTGNJSFV0ejB2Q2E5djNDRnVtOXprTUVYUmQxUkhVKy94dzNiTUhreTY2aHhUSkhHUGdISDJlUVpySVorWVUySExXYmlDcjJNWWlkQ0MzM01nLzlqRDcrb0pp', + 'bGxqVFRoYUp5VStZTVFUS2NWM1VEbktIeDVkRVorVTcrZ0FHSHl1TzNCaEFab2lwLy9DR0pBVG5KVk8zcjdWWm0xNFlLL0tMOGh0V0drZERObVJuNHo5MGNtVTVmSmVXT0dJajRPN1hlOWVpRDNuZlplREpWRkxOUFRlb05YWStGZ1BWUXdyZUZCendSMFp4RkZud25vc09rVGNiMENQL3BXNkxtSmJlQnJBMFhvbFhrU2YrZnVhSEVXOWVYVmQ5OUprYVZVeVp2TDJBQUNlUDg3NE9BeXJTVkI3RWh3OWRJQ1N2N0hCVlZHUC8vNUJPQXFjaHZhNkdYWGxwNDA5UnlQbGo4UlFHMTgybi8rKytXYnpnWXg4UDJTQ01jZVNDanZoMHRQMmNVdHBU', + 'SmR2bjRqbG81ZFRVNnc1TDNqOCtzc3hEeXh3VGUrL1FxOVEwbVVNY3I1Q2QrTm9xOVAxbkhTWmIxdThjT0YzdXozQkducVNnaDRmSkFtWUN2aFc1TUdydk9aMkpXczkwNEFFTjY4alZVQmhZWmVwOEFNMmxRZitQNlRKbmlPcVAvSG5ZY3RlNkpubXh3OHhFMXk1bkY1L1RaeER5L0pIM2FmZCtVNWQvZU12ZmxnZmZtUlJkcExCMEh3VjBOMlVSeHgxVmJHMkJFWUp4dlVJOC9XUUdXMVFEeDVRWEdQaitLZXk1YXdCaXVzZ2dybnVMNm9ocGQ1MXo1Ly9QTGUxcVZUZkVHa2V2K3A3R2Z2Mzc4RmlKVnYzSEhXQlVKcXpVa3krL3hnc0xLekJL', + 'ZWVzMUZiQWNoT1ZweU41dzFmWGQvQnJsM2dLKzl6eHFoTkdoczhmTVUzMlN0MjBYNmJJdERmZEYvbElZaXdXTE1xUlJyWXJsbU9YZFdzbWJsaFEvanc4WHFOWTdoTFdaeVBheWxyci9CNjBjSmxwZU5jL3A1bFUyL09NeS9KT3VIS1A4YUg1WnhNcy9WRkRjRjZxTW5wZmtycHQ5OHFFMGVkNGJZako5c0ZtbWNmZlBQajBUUHpvb0dSMjEyRDVmSkNSVUR6dGVjODVKSi8rN3ZMTUY3ZDFQUXFlRkFlSUxXUTJoYlljODlPRmFvUThtT2dPYysveHdqM016bHVmV1ZMc3NaZGQ0QzRyRFRCN0RlVFBXek9HVmM2Wm1XMUFJaTVDY3JUb0E2RDJB', + 'cGp5SGJPUW52eGlGbmVXK08rSHVpKzY2YU16OTBhRSszYlV6bVJaRmRuUndLYXA2NmhhT2YwOGt6TDFaSVl6TitjSjBYQ1lEZ3BwbW4zcjUvR3RicWFTZVBVUFd0UTkzNDFMWlVmOHovTTJTMEcvVjE2NlBMajhKdnQrQW1jT1NpZzZSQjZNY2p3MTExY003SUxZQ3hLb1J1TUdLSGpoelFhSVpSVEVLMi9LTjkreVNJZVpKSmpuS1ZCQU5sUWcwUmNBL3dqSHpIU21qZk45emdmWjRXbmFjTDBFK1lmb0E5KytlZkhsdHJrTzY5OTdiYjNmc2YwQmtBeHhBWUlEb012TkF6bXpHTm1PRi9XSnp4akUrNDBTOUh0K25CSUIvWGkydlpSSk1aaUJD', + 'Tm5BM2ExMXlVNDRqZm9iZ2JHdDM3cm5tWEtwODJ6MUxaeSs5OUJadGZwNmVPcFoxK1FNMk10dWJNVitNazNrdkVWYkdPb3ZTQlJ0dGFKbExMeTR3ZTU5bzV6dCtqZTJjNTR6SlFBaEZvT2g1eGhlSUd5QjcxMEk1MzN6ejlaOEg2cHFxY3ZxdXV2N2lubnYvd053VXZJSHh3RklHbW5qanQ4NVpaL2ZpRzJlQ2E0K1F2T3lCQm4rbWJHOHVJY3hSWXd6d3NxZ3E0dzc3NzhNWVF5VmMreDRpRWI2b1ZWenE0MldqcTg2UW13eE8vODVmWDh0NEp4K2YyamNmRERvOWxQUFdFb3BscklKM3hSeERISC9uRjhua1FIdS8wS1RBcjkxUUFEWjl1Z05P', + 'YUtMbkxwcVRma2NEcGlkQ1V0L0J6S3EwckMvVG85cFRJUG9ReU5FNkRtRXlhMHhHVERxMCtVOVo0UFBuUVR1TDluL0hsNEF6WXUvaDJFTjdGeEQwdDdDcFIvb1hlYTN1T3pac20rbktTdmVWOWNveSsrNnFqanVBbTN4S2w4bno1OVlzMjdqUjR4WFl3Sk5sdW44UTQvM0QrdlBrR1oybFN2anh4MEdJWW9KOVg4UkhvUHlRT2pKOUhyNWk2SVc0RlFRMEpGTmowRjhaN0xMajRSV1R6bVdNdUFmN21XQWE3a3VLQkdxU0pnN1pTUUFUQWNJeVRBTzlncUxDQmJaVVl2N3FYcnY5WGhUZ3hXRDMyUXpwSE1WR1hEMlFRMlNrWnRTR1lEVWlvOFdi', + 'N0g1QUVyM24zOFlicG1LRm8xMGcwYVdReVh4T0xjRk1WZ2pjK1hTSkZlSE1CSU5lT3VVYm5PMS8yaUVyRFBoT1A1b01kSzNLb1Z0dXk4VzVhMVBRZHF4dG03enFvL08yTldsVVZyL3ZYVjhVcFN0d3oxa0gvVzVDT2RsVWZLK2N2My8vKytKUXhSU2o5NVZNOERFTzBqbEpPZXlVVmdFeVR3KysrVWNMTEwzMmhEeFZEaGh3UHNJNmhyVFhxaTEvK2VoQWdsVXZaOHhES2ZTWXpNdlVaVUxYL3NzMk9OaWtBbitmcTJzSWpFdERXMEk0R0lpSG5XOXBsQTlxZThoNFloQTg1eW0rWUhXL05aT2NicTNaUmVTcklIdVNUeDdYdm5pYTlWQ3lDSzJ3', + 'MW8yaXFYaXBrc0ZUMzdOdTRYbzJ2YzU0cE5RQnI5SjF1QTN2TFNPdDJKNXZyenNVN2Y2S1Y0TDIxSkJYZk52bnMxL256K09SWnk3L1RaUkg5b2xoZ3NmZDl2S1NNSEdJeGpPT05paEltdHl2MzRFNXRVNituVDF5MnpJRlU3NEVsV3RZV0NOZ0pJTUtLeFZ4VG5VcVE0MlVOd3p2Yk5nU1ZZajlEREI1N0EzK09jcGs2YnltYklKNjBMOElFcCtHVHV2L2gyck5wVUVRUSt2RUFUVWhMaW1OQ2REZyt6RGJmTVpHSkdCYU1Sd1pNZkZVRzBrK2pUNjB2TDVaZmUvcWhZcis0NUhXU1ppaVBMVVc4M2pvaEZiM0h0QjFCNEZkVW9XWXp6eFFmOGU5', + 'dC9XMGxwMXZwU1U3QngyWTdMM05SOU5VWGhDOVlkK256Ny9mdEhkZHBlSkdSNmVKZDZ6bk1GTGd6bUxTSll4cU1UZFdHZ0lrTTkwekV2cy9NMldrem8zL3hvQlhIaDBEazNMLzZ3eUM0SEh1YU1JSVRmQ1BJeVNxcXJIZ0RnTWhjd2NmT0FwRGdCOTNMUGxldkdQVFUvejFVZjZPVGwram5kQ20vTGh6Y1ZEQStNTW81c0ZWYXlNNGJqV3pISVZtM2VqOVVjMVEwa3d6L0tvVUV4U21KeW16dTErTHJWSE9jS0EwTFNqTng0QkNjVWJxVkJxZW96eDFWd0JUUDh5eXlmL2FMZTFjYjJQc2Z5RnhtTFl2RzYreEMwOTk5NWRiVWthVHNVMHcvVGxn', + 'MEJreEZQMU9ZNUcvYjcyZi85OTlScDlaV0JyK2VNbWVZNzBJVm1QcURkZ1NIRmUyektWRS96amdGeElRR0RQQVFUWFBja0x3ZFRJdjRyb3lvbUU2Z1h6ZFVYekpibGM5Smg0THg0ZkpBZUlrV3hzYnFzajFrUytpMVVEMXNBOWdReEVycDJLVFlBTEx6R25YWTIwT1c0RU4zNXA5Y200QWVFZkg0MzN6THdTMTlwY09yQk5ySStRcFZRQ3h2cWZvRktRMlUzWVlXa2FzUGlqNzc0b242aHBJSUFhazU0OGNlMldBRUx4TWl6ay9UbU9PUzZURlRkMVhKL3pKa25QTXY4TzZVYnFjRzZvL1l6MjhVaThHV1pyTTV6LzZGMXh1NU5EL0kxTDlRZ3Qv', + 'czV3R1FuZzlVT1ErTDcrZytKZW5FSkhrWitiOTFuVXNzcENCSGl2bENRQ0piRmtvUm8xOWpxYnk1SDdPL3luVU9EcWMrVjZoaE5pMkhpL09NdmdER2dSSDdsdlBFNmZSeHN3dFROaTU5TCtKb3g3WS9aQVhJWkQ3TDhSdE9qMC9WaUcyWjIyYVd4L3haMm1RK216d2tUdGcrS3FHd2Q1UVBpM2g1MEs1N1Y1LzRVMEUydmR0d1Y3TGh1aGtPTUlvaVhvd2hYbWhWam9KaDdQMnBqcXNTNHVwYktrcXdhRTRqamhaWE1MWDdCZG1tM2tIMi94bU0yekhTVFhDMHl3YnlXd3BHVllXbU53SkFZaXArdkU1NVBsK2RjU1BMT0hmbTduREV4cGp6UTI5', + 'UWhkbnEza3BkV29yeDRmSkEyb0IyeUNmcTYya1ptYzlXVGUvRnR1R21VZ01tcy9rTFJ5Rk9vMEpxSW9UQ2dXYjg5czVCL1BWUEkwRUpYYXpqczRjeHZwRVVzNG1KSDgvU2F5azRGUDd6ZkRlNklmcU1HblBFNy8yRFZFcHFNZTA5M3ZmakpKdEhmdTNsZHNjTmViS2JMVE1PSS9KRWovbmtVanE3UHFZbERPMXNNYmZsV2hZbDMzL0M0c1pmV0tHSFg3VmM5M2xBR2tMUlJqVGxVVFZWaERPRVBCTU1sWFJYd2ZjMTg2MXdBWEhtRHZlQmdmTmNra04veGJSMWhZWEJWSkQ3Ny9hY2JXcyt2QXdkQTZMRC80UWNMdUQrVnhTOXp5dlJKOTFrUXpw', + 'SHFyaE15dnp4NGZKbnFWOFdHanFmSmRiMUlTQ0U3ZUFjWGFsZ1ZRMjU3SWcvcUFWd09uTnptMGsvdXJKU0Nwa3RCajBra0t1ZSsrRnJpS2JOQ3FPTmVseDQ4cFkvOTJFdTlEeVc5TE1ZbzAvVFFsd0trL2tXcFRWMXhSWHJQU0JIZHc5eERyYzhDZmdsUXZ2WFdNakIxWDkyeTlwRUttckRLMllFS2dmeTJNdUs3Q0I5YlBueGV2OHhaVFVjZVdHR1B0bFoyN1BTN29xVlZ4OVBFblVwOFBWcis5UE1maytIVFA5WG1ML1U5U3UvOGpqaDhkK0E2MlpHVHZyWk01c2g1MGhBVmROMitmMUl4VVV4OVk4c1FBRVR2blVyaXlYOTVQOVIzenRteTNn', + 'SlM5TGZvTHBta3FMc21iUklQcG9YQTY0SDd0eVR1TFM2N2c4YSt4RklTYVB1ZFV3Wk95QUdhMG95bHZaUU16ODVpNEtzQ2NLWVdyOUtjVWtram5zOC83TG0rVE9IMWdQWXJHaXovMWF0N24vTi8xUmF0RkwvOVk4LzNrVUpFVFk3NFVWUWZGR09URkZNS212MWJ4Y1EzSHFOYVdRdlZLSE51RXg1NHdRSnVsVlZEN0FPY2w0cmRUQUZHbFVFREpYb2k2bWg1VDYwUEVvM0R6d0pSNlJwVjNQRVM0Z0Q3RHAzR244WmxMZ01sNWVQZ1A5WVdSWjZUcUZoNmZvNUdUNUcvRHh3Q1JSaXFkVklZZjVwR2pYbVRzeFVIY1dRYndrakllQnc5WTRucngr', + 'Q0YzbnBjdHJFR0xTY0c5TXBaakhBa0g5cUxQZk5VRkdKcGlyKzE0MXhvdGdMdDI4NUpZN3o1MThIa2RrT0wyb2VjdCsvLzFsdHF3ZU5XbCt5eHRHMGg1d3JYSzF0Z2FNdFVaQ3NhOWFUNDAwMFNPeFdQMWwxankvSTBDOTZBeUp2ZnJYQlMwRzNzdVFjMEtCOXpuU0xTL1pKUkEwUjVRWG1iK3FEODNtYUlXRnJ0VWZ2dVhNbXBmb0NGMG53VHhNaEFnWm1SUDVlOVB2em1GUmFmajJLZGxsUXM1U1N1dVdYUXYxdjlkaW0rRHgwdWlUemNNMlBLUDNkU2ZwejgzZUZBQmhydjQzK2hsNDEza0pmMDJGZE9GcmFDeDlZM0RDK1o3SHppOUNKQ2U2', + 'UG5zR0J3eE12anR0N1E1K1NVNHpBT3pQdTlUMW5udk5TU1J3ajQ5UDVaSTFlSXNmLzdWMXdMWVo1dVVHRnloelV0TGwrLzUweFBBQkJZQ24xOVJSVHBGcWdMRS9mdFk5aHZnRW1KeE1YaFNPOGVyMTYvdEVxcDJhdmJqMi9NSGwzclo2emVaQW9EUXpvSWhvbU5VZ05sL3YzMDhWUlJLTkdQQmhLNGYyUDlWVXYwWDNNYmtWUDhBcXo0Y3hPak1PYlA1Z0RmL1REOVZSc09uT1NIa09FdTB2Szk3dUhvMTMvZGkxblljYVBPL2FPMTY0c01HVjMwSm94YjdldTFFU0RPblQrU0pvaEc0K3lTQUxmUVlwdjFRTzRuSHg0VCt1MGJJY090VWQ3NGRj', + 'UWFuQnVtbjdoa2RndmZxZmpWOUJUTFZDNkdHa241dUFwMDNlcjF2VlJlOStLWGJTWEhWdlV5OCtaWmdWQm1meitYbkh0MmVIQ2JrR3cvY216N1RaWXkvd0tFcmNkbWhvalYvK2t1M3pKcEIzd3huZVFNVDl6bVdFY2NVRWhuWStKdnJsdGlLdzNFMmJ6Q2tQVXRCMVZtclYvTnhON2QvY1Znc1JST1k2RVAweDZ6YWYwRHpsdkRveURRa3VIekpyZWI1bS9Ta0JIc21ELzMzYWJCSDBhanBTVC9oNFloUWx2bkdWVjI3eXlaWFZsbDdPaHpSSERndEMwOFkzUW1yS0puNHh3RGV3Yy9JMDVKVnFyM3BRL2Naa0hhNEpjTXZXcWlUblpSSHpVOEU4', + 'OFZ2KzlmRzcrQXJ1MlFocXJwc3p6eTYvcVhZZlhicGFuV3hIOUNWSjU2MldYM3RiL0FOQnc0ZE5zRXVGdkdQclUvN0RaU3BmUEc5OWtacVk5Q041Z3MwT052blhYN3V1d1ZpaHVMbEtkT2kzQjBjVEFia0xseUlGUEVJOC9ReFRhamFXSVZ1VUlQM2RLWVhubjZYLzljRE1xRys1aHlvNzcxOC9xTHBaRmszUWhBT1pRa3ZMK1RGSzZDUUVYSE9FZWR0d3NpVEQ3anBLeklveFVJcHVka29rck9UMjRWYlh2bEtqUGpMZ3g0Zkp1eVVNK0dCN1RsUnFWMEdUSkp2REI2SGdGeEtWK0FSMzgvcTNwNGVwKzUwRFpqOTh0NUR4cmJ5dGtnVFJhTGwz', + 'am40WWxRSGY5OUREWEJlbkw2WDZicXNCVXJpRnBOS0hIRGZuRG9SK3lRVmN0U2xtSVJoZkZZVGdHQlc1WG5QMklOL2E4OC9SWmJZMnhLaFc5eWYwRWxaakhxUmIyZ1pBVDZDcW5BL21MODNybWg5dkxQOUhpWmtiZlFGVldzUUIramRqbVl1ODhtZnRZd3RiMlFvMmkvZDJDMEtSeFk0T1hjNU52cUxSYnBCcFpwOTdadllUVk9JMElKWWJPWWx5WDJNQVdRb0pQVjVMcE50QnI4aXI1K25HYk01YnhIYnMrTUxEUGxzTmROMng0Y2VHUS8rKzFQdzJxZEdDMmViK1FkYTdPSTl4ZUJmRTVLRHp0cjlDL3IzUjYrdkg1Qm56NStzeEhTSWxlTmg1', + 'VEdtenhQUzhFTENpcFdXaUczdGFXVmI2OTgzdTU3TENsT0ZKKzN2d1dlU1ZNK0Yxc2tIamZWUDdGTGU4clY2cm5qNFBoTC9aWmErZmlhdy9MUkVtKzUvOXFiRHhDbGRhVFJ0b0QzSk5Sb3BJelFWQUdGTlZEenEzNExkYkx3ZnZyVzdTNkc3VldMblFCQnJPcEhac0VYbG93WUlHL3J1MTlObFl5ZHpjME1NOEx2RVpTd2JXSWpNYTVENGpRbmc2NHFuaHVtUlErRkg4OG16SGpUWWxrd2ZLYitPeGxlN3RRUXdLOHZVT0FON0N3K3ZQdHAxazdZNVdUTUovNW4wUEtMNGlQU1luenFQd0EvQ25zTmpKL0p6WEtWa3dGUjZ6NFJZK0RqeWNLUWRu', + 'emhFNS9INjFxZWNOckRqRGxyZ3BKZGd2YnljMDZQOFl3Q0pteXZzc3N6cjJCRTRJVmdVZi84MDBHNmlRRlFTT3VCMXhoNU9idGlGU0ROb2VkUUh0N3FBejN4dUptZnhDTHR2Lzczay92QmRiMUhEYjFxam5HRXhRK3JBeW5oYXV4TzNTOTh6U2d3TUphZ2FDaTVaOXJjUWExU1ZLNlR5WncvSkY3WUNiZnB1R1QwQXBLbkcycUhlVXFqRkNDblpiN2g1VjQvMEpsc2ZPYUE0VVV6eDBIajZZTTlTdjZNTHNHdGZiek11WkZGeURpR2lVSTVlYVQxc3RFdmw2ekZmN2lxeVJORHhzdVcrOXFUU3lIT2ZZcG4rN2pidEtoWUhOd1lmUDcrcDV6YlEv', + 'THc1dnFmSXZyTlJPVEEzMVIwQ25WV2VlZUY3aHJvMXB1S01mRFZKaEUrRzBnNzl2U25iYlYwUVREQm5tOEZPZjg1OWZxMC9Lck92ZkRTOGtWd0doenBLRUN2UTZZZk0rdDE1VFVEVnV0ZHJDSUNnUHBackVPSFJDM1R5YlZ5ZURObThrYWQwbnlPRnZoL2w0WlZ6bmYwUGYveEgyWVNvR2J4M1lEV0lVUHNXVytmNStTVTY5RG85SFlFTm9ZWW05bXNuMDZQMUplNjAralF5djNkY2NTRHF4K0pWQW0vcy83OG5mWUhLVUFBSFhoNXdIRGp2ZmVEMkRuK2krdHloNVppWHBJOU1xanJyUks1NEZ2dUIva2RrTlQya255aWU3bDlSK09uS3p3WWpn', + 'Rm5YampqWDNSMXJZUnNJdEo5eWRkZnZhbldRL2wyNkIwU0FaN0tiN25kbTRoOENralR0ZDVFMUtoSlEyRkFWb0hxakVKVGpTL2hYaGQ5VXJ1TkVLVUN4NHFURHFzaXovckwycTIvT3NWempKVGhiV2hHalZhTjB2MXIyZ3QweTJ5bm5Jd2tBclAyVEpJRm94UEU3TFRWM3UvMkFhbHoyY3RYWVNUSVgzZytITkd2Vy83TFdobjhWNDF2KzZRdEpieVltZi9UbEZKTWFZcUZkRUxJMzRuLzIyMjNPeExmN2pkQUxZaE1RaUtUbmJFMEdNelM2TlFWV1FJODJMNzYrK1ViemdRbjloRFRMemNQU1cwYUIzd0ZkaVZ5LzBZQW1KbDFqYzljK1kvVVlq', + 'WnhKR1FaSS9mWmV3ei8xL2RheE41WEZ4cm82TE43Q1ZmQ1o2cXIxUjZhSTV1bkF4UkRHUktUVFcrbE1vMk9xdVVZeUZoWXowZk8zYS9kNkkxOVF2Z1hRNUUwV1E4N2hWY0ozdTBqREZMemQwWk1zUG1WRWFPMjJzYm5IcDVoZVRGT2N2MHgwbzRYWEVycFpEc2hsNGUrMng2VFN6L1I2T0xlWi9RdGpaL0VEY0tQM0JhREJMTDBpeVlxc1BOVWJxR2JDWUZoOCswNVZaVGd2U05NTmFxc2YyLy96NXhyVzk2TnJOakpzZm9LaUR6UTJPdXZ2dmp2eDF1OHExTXNBd3IwWWF5Z3FWc3pQVy9UMWd4WWl4NlhvR0djQW9WT3ZlZUloQnJndmNWby9P', + 'TFZxaDIyMmZrbXBvNTZTcjBtcktDNTJEeUhzcDFva2JpMFZNcHJiV3p1a0thTlpPN0xqa3Z4SWRTQkNZejVPYTNxa205V0s5K250a01NRkpmamlubk9VcVNRWENYaVdJbW8yTGpoVHVJMVNMUU5KTk4xL041eXNDbnArSVE4cnRoZ2R3WVMwSzdqUUVaU2N1Y0hxbEZtSDYrMzhYVTdaUTQvekIrRC92YXUyM3dOZDZxZ1NacW9HditldjM3YmUzdW9rNHFUZ0RtUm9wRUhHa3V0aHJqK2IvTXhkMHBEaS9RWTRVVVd1UGhVam1VVzl1VlJXQWY1dXlIMWZIdjJPN04ySU9laDk3SnJvenFuU0RIRHZrUFBxKzBOYVhTUjJlcXFKMWUza2dLM3pT', + 'QnNnSzJ2RmpKWER0QzFVcnlmS3FnNG9mcWZ4NXBxL09Zc3Z3empTK2svRTExRkxCdjhNUmg0L2hKWWIwdGZUc1FMSnVvenZJYWU0WE1aSm0zTi9DWml2Q1huK3hrcU9TYllVUVlNNmJCM2MyVnAvdlhOdmJYeXhQVVBZd0NrcjZZcFpQZGRFTjFXOFRwVy9QT2lkVDZhWEpMLzlnWFgvc3o1SG1MYUN3NkNOUU0yLzMrekVScG1CdHBUUHhUUVk0N0V2K2NaZWY3OG5hVS9zNWZSSXp0dlRHdUNLTUF6bDJLVTc1amVGNW5heFBDcUJSZll0SThMOUoxcHljU3B4NGdDdXhCYkdsTk9JSGp4eU1lejJ1MVhzcC9lMkpveVdsblIrTWd5aEdBQUhF', + 'UWtYN2ZnTFZJUTJEYXJWbk1VQ2wxc3l2ZDRPbk10M1IrSHA1WXBPNEorU003MlZoZ2Q4bWVmZnZUUEpEdWNxMUZPRU9jOHpodzdQZlg5ZDJteXp3dkZjTXhPRTYrVGlGUE9LNjVmTFJycjFxcURLbXJwcDU0R1lxVW1nY2RhYUpUeG54QWxsWVNtcGZFZWo2Y1pLMjRLQ08vWGxyaVp3MTEyZWNxVXRhMUtBV250eG1MUkZ6cEd3eDFzV2RVQ1pCZ3RwV215NnZjSmdhZnQvUFdSQzc3a2ltUUI0UUJ0VU5xOTZsVS9zNTFLbDBUV0pKcElIY1lxRk1LTTBNTDZRcGRMY2YwTlBsR3VMbXJ3L1NHYy9vQUlqSU10NXgwUWI1YWwyYXJhdmMvNUVS', + 'dHpxZk9ORXRUd3M0djc5VW1XYU9XZVp4Z0FZU1g2ZTVKRGtVa3lPaHdJcjVUNE4zYmNrNFJ3emFXeDFpYUgxdWRkRUc3OTY2NkgvY1NYT0creHBDSEVJNHdOd1hjT0xCb0M0NGc3SG1pZ1p4ZFJnTG56OFBQTU05RUVSZE9PVFVFampYWFVZeDd0M2U3VG80U3RLemdCMmJoZFFhczZULzNsZGlOaDR6eng5OWc1VUQ0YmRiS2FlWVVRNzg5YjFsc2ZkRDh1cXFxcmJINXowYkxCTzNLNDBra3FPckRUY3VYRndKMTBZdWFaWU9VT2dNLzJNU1FTL3R5K2orNXhxUmVmNzB0NlZSREdma1B2Y3EreFN5RlVGeFY4RU1nZUFMSkd4bnh6c215Um0r', + 'eWJ0OWU1bVoxYXJGd2s3bDV2U0FRQXlXSGx0TC8zUUNaL0RCZ09HcDFaZ2ZmUVlSRmw4NTlTbGxBNXFSKzhVUHZJUFNad2ZnM3dtWG5hUXAyRVo5bjd2MExYeStLcFRTQ0FhUGxydGc1ZTBTU3RoMUNXVy94dmFSTnVvZXhpMXJxd21oWUNqL1RrVi9BNHJSeFl5d3l1UlpFWnp1QnkzTEZTdkJjVTA1UHdkRlNVT3VtdzZzSzJISzRhTmRvd2xMV2dCejN3NjNxRDVUWjlvNy9LVkYwTEswWEsrbzBvcVFXRU54TVIwWlcrc0swWE9aaVU1Y2pBM1BydzlSeUxrc0YzQlJoMDJXcG9Nb2lyd2hEZG44UEhXc2N4OFJGNC9iOXExK2U5eHVUTG5I', + 'OFVES0s1SHAxVmJublVqVnBFVG9yazVmMWlGQ1hhcHpGZjB0TjMyQ01sNXRyZFlKSy9jeUF3aGkvT002WnkvWStTS3FmS3o5VGErcnVLY1FRQ01EWnlsMytuMEcwYTkwbWpvU1F3c2o2QWdKclExeFJKYU1IWVB4blplVzFrUHVVZkRabWhwKzNQYytoV1Z6SEVQeitPT3k4VXB6Y3FMVnJYZkljMFVoWjJWYVcwNXBwUjhTU1Mrdjh5akVySkFWTUphbnBRYlRMNDJsVnRVNjk5Q2lISER6NVY3U2lLSkZZZHNxOS8xcWduUWdxZngxcUhLL29peEUyQXhvbXBxYm1yT3FlZVNpMUxjbUVuZXZ1a3VFR0svM3EvbExlVWd5OEIwUGZGcjAyVy92', + 'eER1WitGQUdsT2dNaFY3emQrR21VM24zR05KdG5mUGlTVVpKK3EzbGFCZElsakFMTmxGUDIycGErRTczZFpZb2hyVDIvME1rT1ZyQ0dsNy84S0FUUWxFYnYvdlRxSzFaTC9aZlNwVU1TdUU4TDdkVGJtMmQ0alZXSEZORmt4UDBOVnBTc1JCWFdyMGlhU3hPbmpTdllzd2pEZk01N2ZUSTE0SGFTdEFTdmNPTmFIbHlsUVlWN2RkOTl2SDFMbDVLcU5DelZ0MjlqRk5jUk5aU0hFYnZEenZlNHhLZzZYRGlLMU9PQVN3d1kvSnIvK0lDbEtRekczanErRzh0QjJTT1dDd2o3NHp6enE0ZGRlZWVYdjFrRHJZWTV6dk00UG1ieFJ5SHptai85c0kv', + 'M1h4aWJibDJycHFRcUZ5Z1lVNlhuYnZjZU1vbjIzdWlLVkpaR1Judi9iSFFZL3I2cXIxMjZxcmxtenB5K254c3E2U05IaVpzcEg2TXJ3SGFOdGZPVDhua0FZSUFrQTh6eW1oN1BVSWdPSHBWSUpGaGNhNkRoMGRnZzhjTjM5THNxaWtzcE9rTUNhT011YUlHSXVTOUc0SzZVVlhISHRUUngrSnRKb1BiSEN2K3NIeXhuckNENWlkWHpSSk42MjFML3lBaFNCcWtNeER3OUxjSVFBVUxVWUYxVnNQK3VTZDE5YStYaGNBOFEralo5aVZxRzEwbjh2MzY1YjFvbzNMYjAwbzZwbGJyYlFnSUw4eTVVUEthWlRZYm8wdU5sV1hTRmNMcTNudGxDTXpw', + 'aTN4WnZoeWRrV014MHVBcmJScHBqanN3bGVlNW93eEh5ZWtibWkwVGthK1hrenFDRHpZY2lIS3VOWkMwRFFLVFA5T2lLUXpsVHc1eW8zNTVmUWdHRGV5MHQ5QWNLdXhXTUQ3bDlTRnIySElzMzZ0eVIrT3Q2TDhPOGZGK1NkWm1HSmoxSDZtZk02c1pkTS9pelZqYnp0aG5vS0NQR3RueU9NSW9nL01rY0V5VnM3TlJDUktHVnYzZTd0WDhlcVdWVUxMcmcwSWFqUS9vZWgyVXBjb1BZKzBXUE16ZkNPUkE3SFRNaDlQVkR0ejU4OXVuNHVnZ2cvcjZnQ3lzTjhuWnJBTGN4U2pLUjRpVWlWMjFMUkFuL2xBTVJYS0RaK0MzSGZZWjQxeU1IUGpu', + 'b3RwUWlWM202OG13ejgzdlNtWmpCeDZjZnQrd2hGcDdGVDZsMER1L2pRNmFldCs2YnB6a3BlTVlyVjBmSk9XTGxPNER2WmIvNkc1LzlPNStTOWxXUXAvQkxESVRTQk5Xd0JoemM1REJEQ1VsMW9kcGpCbXgvc05SNFptbWRxNDczbmxaN2xjL0h5UXpxNTJmUU9BRExjbVQ0M2ZNRWdaL1UvMHhzanpqLzZLekJKdklWNEV6UXNXY0dnUnAzSmsyYXJORFpTUTdZR0RsNzVlaFdJbjE5UXN4VG1ZcXBPS3E5cWtLcHh3RERBczk2N0RpbXNaSlZoRWRRTE1DRThpTVhweWdIWTh2NzJrV2pDTHdYQlpMVUMxcm9UUkErZHA0UmJ4Q0ovUHAxZ3RH', + 'NmtRVklrUDdBYW1udnhqbWhuR1U5QVFIdkcveWJHdlRHNFBubWFqbG1xMGJRWllNcTdER1FRK3ltQm13blQ0MkVWZDQwb1ppeWJ6dm5SU2JiaS9VMHB2MldLd3o0WlFObGllbjgvakVDbTY5RDFMOUx2dnNkd1BSMi9NOStIeXp5R2VtRFdUeE0xQ2hpRk5HOXdzVlI4dVA5NHdMTEt1NEpRb3d1eC94MVhBNE5xMkQwTnlvam1ydlJFSnFvcUI1RDdXWVZWRVUwM3pEVkkzRERDZTlwWGxVUUkwWUpwV3RiYzNqR3F3bVY4UVEzY0JvWEtublZGaWJtVUdFNTBwZDV6SnR5YVkzLzhBd0xwRnhmVitkMVFPczg2ZC9IZWU1ZXA5Z2lMOVRzdWVp', + 'YXRaaUpobUcyL2w0WnRNYjdIMjZqdkVSQmFLaGtqNE4zVXZzNms4OUZuRDZaeHozcE1HbGtkbUtsWjYyK0p6TVVTa0Z2TlJYKy9vR1dHWGh2R0xFL3hXUlJNb3YrM08xKzI2dmI4S1daOWdLUnltTWorTnBMVlhLZWRWbHRUYy80UmR0K3VEYVhYNmJoM0hPTGMzZDJGOHVYbVBWRjNiVjBhQVcwNDZXL3JjNGdEaStweGVNSkxmK0NLdFlGRXdTNm5GZW9MTGhaSWZpbVN2SnhxRzltOTFNN2IyVnJlczdRbytJMnJrRHU3YXFodVNHL2xJWWk0MFdudE5DZXQ1VzhUVWI0R1Vzdm1Oa2w0Q2tQYlhkQWdPajFBZk5pdXg5eWRCNlMrdlRETFNx', + 'NnZyWTY3NVl6ZUNoN3ArMEppOVpZbzFpZ1R0d2Y4ZS8vM2J6LzU0elkyVytDZE0yNy94TmU5cDFXa0tlK01KNnlEWnphNTRubm11NGRmZmZlanh6TzNxUm1vRFpjSFQ1V2RsRmRxb09NZmlWUng5ZGRzUEhXM0ExcXhWZjJwYUF2cDhiK3Q2c21keCtsNmZxRlMzbFBWT2pXMWxFY2g5TDE0L3N1T00wSDlZRDhIZGp4ZVZ6Z2gzdXcvMjZRczVGNnFyMXVUdjVyOWRpRS9YaW81Tm5oOVlack51UW5sQU5oZXdUVUJkRUlGYjd6LzdRK1R0ZzJDcS9xSW5UVXd0ODZRMThSRkgrSG5QVGxIeWdXWWh4a3NHcmF2Mnc0NDhNNkx4YWpkZitZUzBV', + 'SG9MbkcxelBiblFZVHlZZ0lZVzIyMjI5RDRqay91MDBMOHhpc3ZkTEtXaUJNcE1xZ3g2UnR2Y2ViTGZBS01peFEyM3R1V2xOeE83WU1nYXdSaU80clpZQjlicUNZckxnRDVSVy82NVQxUEVIazNGY0J6YkRUdnZOQ3VweDZYYy84bCtkZXJ0ZzY3ZmJmMjloc0NBeGJSdXVXV2MxRERDWWpLUEhtUUhGbEpzbUdUdCsvYnpUUXRSUXdFQ1pjUU1GU2dUVElWb3lodUoxbVhpSXJWRTlud0kvTGJka1YwMFJvZklmM3paYUloQU5jQXR6YmVQeTJUMEJCQU1kakRVVUpzUko4V0NSWFRrYjFyOEpUa1l1a1ZhdkUrNElJSFBkOS9qVDZtb05DakR6', + 'cDRyWW5aMVh6M3hBVUxhYjA4NVpQaVlZYzNXQkFtRlo4LzVraVRBL0VFelZ6K1VhZEpiQk41NWk3OUVWRFMyaW1OVENJK3hJNjdNQzVIWVRxWGN3NGxhbXF4Zkc2ZjRFVmhnM1lWWk9zU3dSNGJKQWNkMCtWOUxpVVlhaTlqRVQyenA1ejdUYWRJUEdYUXFFd1RxQXAzOGxKUjNoVDJzbGF2M1Npby9mcWV0NHo3ZFZqOFl0UndLemZwQ0Nidi81U1pKaUhpMDZaNlAxcmx1S1dTMkMyMTl0cjVzUHo0ekpwcHRkdTgzejUzZk1KVWxZVk91bmFGYjZDWThQSWdMMWxHWm9vclhIVVJvTFptZlBrcHE4Q2QwZnBKWVBuSVR4NTlGaHl0UStXalk0', + 'VGpaSHc4TFBMNks5VkhDZk1GcWVpK3g0Qi8rSks4bVVBSmRXNFh5QzhGcjBqbXlkdCtTQ00rTHgzR2VFQ200WitBd25VZXBFZ3BaY2JUN1V4SmQwVi8wOWZ1cm1xOFUxWE1pMkZaZmptMGc4RGNpM3dhODJVMkthaWNsUEMyRUQ3THo5c2d5VEtxdHR0eUxjUE9pSi9oVjROYkRZZGRYWFhmeGpqamY2bVZ3MVh3QjR1OHp4NHYvNk9kQktkcnVSOS9CaHpubDc3NTUzL1ZNOWVjZUx6ZW1MNnJWcDJzU0FpVWRXOTZTSjVIZ0U0bG56SnczZmdYQXowNkptTHJEUmUvTU5Tc2JXdXZTTEJUTXQvUDNpNnlJcHJ1WVpnM25JOUZ4SXFGdklUaEZD', + 'UEdmTGlHM0h0YlZkTmdqVCtLYmM3bFU0a0RUd1FLK3ppSlFaUFRCdWs4aStsWDV3c0E5V0xOR1lIbFBtVVcreTEwa3pDNzZzV212MHY4WDJublAveXZveTJsWWlveW9FKzB3VDMwOTk5MXR1RXJVczIzL3Z0dDNDazcwSGM4TXhhTjhaTllKd0tJWElNaVpkd29wbThuN3k0eURKU1hoeDRpNnJoSGgrc0ZYZXNKNVhvYjJTMHJScUQvRlNFUVpRVVBlL1R4Q1JkL3NKRHMyWEdMaXlsOHVLVUdaNWF5TE0rWTBJTzczRHloV1RCVXlBa3FzcmtOSHBTMmxmbkI1TnZoalNWT0RpL1NsOWZVNm9tb2cxM2J0TmhuU0R6Z1BSNTg3RUcvWlVqb2RV', + 'bWpNQU8vWXlsV0FUekwrVFBXSU9EanE4Y0s2VGNhd3NocHZId0hPTEdTbWplTFRsc3FlWUtVVCtkb1dXQVBzUHp4M2pDTURCQlNTamtNeCsvMDZZMkgwQlFnU1ZRSkhVcDRjMS9lNDRZMWdybll2Uzc5Y2V2TERKYzcxSTBKQ0xKSFNSMWF5UnZOd0JOT1hXbWlOQ0luQnpyNlpCZmhjSTFNV3kzQk5vekV1K28raTAxZWlLV1VJMWVoYmlGaW5LQUFqZmtXb3M1cWlRNmRhRStYU2dURm5rOFVsclRscUkvaG9tQkpzZlFDK09qQUVraW5ES29SRzEwbm1MLzh0Q21TVFVRbTJ6OW5Da0NHMWxWOGhwUlliYzlhV0krSVFnZ2pISHh2STFEN2Nm', + 'R3U0amJiZi9IRHR1em1RT05DMUFlWUcvZnZaNm05QVlKTVVNZldxekg2ZmxBeW9HdDZtcnR6U1ZzK093SHBTdk1Hdk1aWjZpWWdSSkFNaFFoZEw3ZlVDOVVFNG13NmZFTG9uL2N3SUJIaHZsQml6anliVjkxTE1GaTJKZWhibUNucVBuRlF5TFo2Q2cvOFpjZXhaTnNXOXkyVVNVL1lGYkNZVmlWUENKdFdCanFaa0JFU2kyOG9YaXdFSDJlUWwrZk8xL29OaFBTaERwMEN1M0pMUGZmKzlOeEV6YTZialI0dEpKMi81MDYvbmo0MWtveFhycS9PdUFORWM0dmpoNm1Ld0RWMHUvU2EwNXFEcHdsRStQZGU0dURLVHNUUWVTTVkxQktZR25ITlYy', + 'eU0yUVhFaC9sQTRoUWFiRlVCVGZDb3pma0lJV0NORWxQZ2FjQ1Vvb0hHMXgvWjdteHZYUzNwTXppa1VMK0hEQkEvblRiMmNJL0tSVmNrQ0ROejRCYVRWdm9SbFZJQjJGTzgxcEI5R3d3THZMTEtxNEZLYzQ5UmMzK2pMMnEyMUhIRnQ1UkRaS3J4YzVBOXpNUXMrUHVLbWZpdi9qdVFzVFBFY3pTeEMxZlR0ZjJjMTluV0lNOEpRTjZEMzhYbVBzK0RTZjRnVWJKUzhmSnltVk0yV2pxR1lpMS9YSUZCaTVoTWxEaGNsUDBqaFAxWGNsL2J5WlQ0RFpZckIyWnZwdlEyS291K2FPMkhIR3dvbTdpaVl5QzJNQTdqamd1aEVlKzh3Z1BHTnVuN3dY', + 'bnVaRVhOdWNJNXVKbTcyYmZUN2R0cXlIcU4yVmlnbm5uME5RQnJFcFJVQVgxamgzeTUvWExUZURydm9aNmNZRStISDdtTm1NVUx3YS9ibGdNQm5IQTBZS3BOSXQxV0gyblVsOEFROGNzYWhTR2VJK1dLQU5yc2Rxbkw1bGM1WDBMeHZUdU9lNThOSVRRS1RZV0ErMzY1MWEvMGsvWkNMZkw3b2NrZXV5UTBjMWcyeHJxb3NYMWRSOU9UalIrZFhNcnFGbEdiK3MzY0ROY0Nka21teE5xZHFtZWVhcXYzSFZTWVdMSGhGazVianEvWXRaWXplQkNHc2ZONHNMNGZab1NOSmUrZTdSQ21LQ2MvR1ZONy83ay9pQVc2cVJOcnpudHkvQlRJa2hqWUJw', + 'L1M5eVZMVmdaNmEzS2tmMlZ4dGpkQUd4ZHVlWkZCNm84dlVBRlVCN1ZnYVNYSHlGQkI5aUdYc0FSTk43MmhhL0JKMERLSG16RHl2L3RSUzFyNEQxRDIzbTFmQzBtWTZyRUlWMFo4S3RxOTdaTTlQSFEwY0NDNDBHcDk1bDhyUWVEWXVISm9LTGFLWUFSSWFMVGRMRHp4eHhkZWtRaHU2dThDUC8vOHdmVkhQTkVRQVgyV0JibHdEbTVtSS9hcjFWazBreVZENzMvdm50UmJlSkNSTGxUcWVaS2RaWHpnNC9TTWNxNE5OR2ovMzBKVjJWbnBabCtpdWg2UGMrcVMwcmRxSDVGZm0zazdlS3orTnQySDd4Vld5d2k0VERwWUpyYkxUR3Rld21XQS9t', + 'STJyOEZlYmJiVDNrSE1jZWQ0VGMyZXVmVEEzVEpHL1A2b29RTlVGOThGRTVvT1VwN3ZzeitZam9leFpJM0Q5cFQwTVdNQjRBRDVoSC9zZlkrWEM1VmhvaUNia1VKSzhQaWVrVmlOQy9MQndyajJmdXdtajZEM2JlUm9BbVdjeDlGejgvb3QxajJQczRGU2d6bVRFdnlHdVpwbU9pTjE3RGovRjFNbExHRTVjL0l0djZVaVkrTDRoWSs0K0tnU09FaG94RXExUUhTZDZBVlZuZS85YysrSEFhUm9ORmNWVjRFR0ZpMVlFNldNVGNIVDk4T01Nc2pqclIzZytubmx0OXVNMmlSdkRPSVdySmN2T3lUVy9QUy93QkovaHR5Qk9iYTdGalU1RHpFU0FT', + 'aEdqaUF5TnVIOUpXWXdnaUdEbDZYTFJTVmVTS25qemp4enlPL3lJaW9QSUdseUZlYmwrU1VLRGYvZUFJU2JhMUM3djNBL05WWSswYUhXTTZKSGhIdnRwNW96NEFwWHJ1b1RXeUYvSHlHRllPbzNDaGxTVzIvS1JXSkpIWFhheGJiYXU0T09PdXY3SGhlTHlSV1JsWU5jbEtMWEVzdnZuMzNEQzdzUUFzZmZ0a2NlYUs0cjZvTUpDTU43NEtSc3BFUXo1YXEvVHQrZEFQL1E3OFA1cVM2aXB1dXhuK2tpZmxGUVF5Z0p5UEVQN0ZBdEdrL3IydCt0djV5V0pCWTZsWUw5dlVmNHBUbUdOMlBaUWlKbk9yU04wUVVkSGtBMnhIdnZ2L2JuSXRNcWhw', + 'MFo0VktuL1hjbzNmeFVNdjFid2VZU3JvTytYeXlCV0o5ODBVRmZoNDgvRkZPZjJNZlk3SDZFbFJrVU5WOVIxNTU0Y2NXWXBsU0tSY1hlamhqRnpuckRHYkVjRk1zdnVZV0JaNHhESHIyTHlFdDZmWUloQTcvM1dnSk1ZQmdDZ2FqeHZTc3FxL1VIMjFjOVlpaGMzeFRUeGdLcmxmY2VFK1cyZjlHZmZhZHBCN20yZzg5UEo0aCtLSWlJaW5TTDJySmQvamNQeUxQV3RPRXR2K1YxbWFWTjlQWGw5c3MvZGlpMWFmdldML2lwV242NkZiWHd4VlFyZmk2WGNQT1BGWWxmUnh4aEFlKyt5aW5qKzRwQ1NKdHZuWHZ2K0ZyVFZ5M2YvVWpab3UrVE1G', + 'dFNJS2hDaE04ODRJeXJxS3FxampqK0ltbEIweEthOUlHMFV4aVBMMkxpV1RJbGlrV25JOEM5QTBsQWFMSmVaMEo2UTRCajlSK1dWU2xSN3ZKY0szSVBWRnBlanpqdy9TZXM2NGpYRHhEVTA3VkswSEZiK0xWNk1UT1d6OFArU1UxVWFqS0twWWlqb1lKazJrK0JSc1dVY3N1NVRzYjFjY3ROajlnNjREMDloK3lOb3BZR0hsdlJITDl0WnFnZ2lQUE1Jd005OG5ubmY0cXduRERENzdBbzVIL2ViR0tqU1pxSWxZSWtycm13S0NmTUE0KzV2ajVZbWthNDBra1dPdzlxVzFZckZ0TmpkYjh3dVFoQkQzVS8xL0xWNklvekVnVHRXcTB1aWV3MzZT', + 'RlRWbk1rWmFaS3plWFoxcURVa0dWM1lFVlRCZU1FbjZ6VjVyelh2S2Zrb0p2emQvNG5xZkpjS25zL2JoREdqK0dLMWNUZEh3TG1WVW8xSER2dWl5aHo0WFpyTGpGZlVzc3ZYRmZ2Nzk4MUdDMmRJRCtpT1dENzdkT2p2czV4VG5pdUVqcVAvU1NUZnZoeVNORUkwN1l2dUxIdDNGTFdzaVhYYjd4bGw5OTVwQW1saDU1OTU3VEh6TnVMYjdhWDFwcHBOZGlCQzQzb0VzbGtmZmFoaDRZQTRTRmZvdVF0Z1dEOXFHbW5ycnQ4OXUzM1gvY0ZqTFY2UjZwbElPd2RvanVVcG5FM1hmUFIvZkJYT1JjTHQ2Wnk0dmlRc1l2dVM0TTVKYUhSdTlCNVBX', + 'ZzIrZDZ0N0tianpqeDNTWlAxUi9vWVkybFNvVFZhUlRhWWk1WDFUNTBjL25icWovZ3dUWmRJZTVGa3IzTEtPKy8ydW1OVVdqMzIyMmlGQXd3eFJiT28xanJIMjd6K1MrY0hzN0MrWFFqRGJoOHB2NGcwL3hkTnNQbnhzL3hMM2pJc2w1VGJFNXpMR09qMzJ4YjFxMW1zVkxXeTVhdHEzT3FkQ1I2czh5eXpQdTloNm13OWVLRE12bi96NUxLVjZSSzFWT0ZKVG1PMXdwTDRhSHc1SURvYWwraDV3Smh0ZS8vOTYxb2poWlZZdXltY1lwL0RDZVZ0QmdMZ01NT2ZBMVJHNkRTR0s3Y1ZTeU5UR014azJBZFdvN3VySTcvL21yUHJtSXZFK21ma3B5', + 'U1d4dmM2blFNd25BcXRrT00zVStTN0ZqTjNQcFJta0Vyamw3V05QS2pESG9aUDFSNlQ1V1RuV2RvY1lCZUVRNW9FeWtpSUpVTGhRVTM4VllNQ1RqbmRhTEFCNGpXY3RkanNjT0IyY2pOMDFSL2VqOWh5UHZyNi9QbnMyN1M1bk5ob05lRDZlcXZmOTNieDhkMithamQ3V3Uvc3ptSjdXdkpUOGZKcTJWTTRXQVZGZDBLdFpXZnBOWUtPazlPaEtBTS9NeGtjalhmMzNiSk5kc2F5VnFlTi9NNVkwZlNnUUFyUU5XU1ZETnFLYUVHcXJ6OGMzaUVtNm9NbUNiY0VHODFFSHRHWVdMVmZNVUd2VjZlRWZuRjlGOEM0YkJ1K0htSm0zU2ZIanArU1I2', + 'KzFiekFNVEVJRlFyUUpBZ0F2cG1LcGtoVmVkV1ZyZFgvMVZESkgvMnUrV1htSG9sb1pieU9yQzUxKzJLcC94WEVTMVp5VlY5WEthQzNOaWVCcWhhRWdGQzMrM1pCcTBXRERHMlgvbEx2MjhJK2N1WXFmRjRJM1RnMURPUjh6ZVA3R0c1bGNSUjdvek55T2Vzenl6dTh6dWdUQW1zL0xCMHJrRlFNSmJ5QVFWeTFBZnB2Ykt3ZlZOVy9RUTBJSzFFYVFRUUF0WUFXSVFMYmhORUZjVUVwY0laaXB6aUtTTVF3a2VjNERKWCtBWnkvQ3NJRGYveFhzYTZFWFZlZldGdzhlb1ZSUGo5NUJTeDd2L3Q0dmZ2cDIzVDNLN3g3RHVDL0x4MG1ySXduZ1ZB', + 'NWpVTzg5Zkpsc1R4UDViL1d2SzRaQ1BrNDc1UlFOQ3NBdllBV0lRTGJydGJDMzdpUmE2TFJlOTlrSXp5bEVjNEg1eitmS2FUNXI5Wll6NUx3cDhxRm5tMEc4eTJUbjE5Nm4vUS90UmRwVFBWVkE0STh2VUFCVUI3bktJRkxHWllNRHdvREZkd3lKb1RzWVBic2owWDZHM3g5VzNyNm9yaEJDaFJFZ0ZDd0doYmU3c2RWVU5mRk9DQzRjWjBWL2VrNVhpUXZCT0ROREFtN0g5SjVpNE5KODYxSzd5azN0YnIvOWJYTldjNXh1TFhmdTNvUXJVdldrck1WeG5sL3hTby9WYkNlTFVDVWlhUU0xd29sU3MyZ1JRVVlFQllpSWNyTXlVTXNFWXNwczgv', + 'N0JRTGhwRkNpV1lOSDBjTDRSNnFlTzZrcUQ0U3dMbmI2N3BqU09QK3VkOXBDV3ZjdzJEYkQvaDRhMWVUZE11VXdRRnloWVRwT2xkd253Y3kvTTU2T2dKNkxjK1pPMSs1OCtqWjBKR0ZNNmJnS1lFQlloUXNyTzJNTTlYaWd0UVdpV0xHSHBtUytJbmw1b0dYdC9DelFlMHBrT3JmN3MrMDMzN3ZYdWQ4UXhLQkhodmxrdzFSaVZka3lGQS9nOFEwQnM5aktHWUZqS0FMRWdGQ3lhdkErQnBIVkcrM0xnKytUeUMvN1dsZnJVeDh3VHB2TUdsMVhQc2Y4KzdETlNPdGV2UXBVUnpQTnphNVFMZW5HYS9KeWkvK0srd1graXc1T3hyZ1dNajkxWS9q', + 'ZldQU1EzeGh4VTlyL0pia1VKSy9mdG8vOXJFZVVmcnFWN29GcHFTcE9CUlhjbG9jem54K1dRNnBuU29wb1NpV1FQUjhhL0RDWTh0ckJKYzc2Z1pSbnBnMGVkc0JFUjY3WERoWk4vQmhiZ3FpNVRsTVdrRENYZXFzNjZ6NmJqODkvWGVsMi9QanovQjV0dTN0TzZya3AyanZiUTYreVJtM1VLSEpGOEk1dkFrdEMrcnoweEF0RmtUL2V0WDJ3NnVJdW1UNDBLYklzMDNwZjBGN3hhUXl0SkhvdWI3RkRuZ1VodEVtcVRkYkM1N1JRUWUrKzhFVG1FSC8vOXhqakU3VmVvNmcwVDJkcVBseGwyclZ1bWZyZFZ0U2NDaS9ydTQ0YVhhQ3VveHc2UjJK', + 'cFhWNXdvd3ZOeHB2TjVQTEJ3d1R3U1h2RFN4akhjdC9ERllZellTS0FaQTFMaThSeVZzZnlUYmxLNWxFa2pMaFpjUFZUMjNIZDBRNnU3L3J6bGRmenJBckZnNHFqWEJSZ28ybHREeGhaY0s0dnJKSDF1WlJva242elVtZExMbi9sWHhJLzhTR29LbXdzNUdIeEFqbFBIbUZSR1JYUnFmdVpRZkt4aWZiUUg5ajc1MzMyYVM3NzYyLzNNUyt5ZlJpaklRODNJL1hmdTNDeElYcHZhUDh5SnJ1KzdsUWVUekcyYTJ1Q01PdXVqemd3eDlOdklEYm1BOVJacExDbHFDaEVLTVRsRkVybWxCbE9lbCtGNlFJS0RnUnI4ZENOY1hYWERYclUwNHkzc3Bm', + 'ZmZMaVd2V05tZnpxR0htM3VOTTgrbHFrYUdMT3hJUVRRbUN5a2xac0syb1lDKzY2cGYyMDRHNC9DNWRFNmo2S1VNZTk0Rmd1L2pMMnY5OGJ1MzdYZW94NmI5dmZwVUlnSStQT2Fyc2dMZ1NnNTltd2dsS1N2bDczWEdNUXhCc1lDTFFKdVRlc2pIN2RqTXE3aG9RWWJlM2pPV0d0aTZkdUQvNHNUQmZ5NDUzSEhTeHp6d3M3QXJoTXZoQ2RsUWt2Z2VPRXA4S1AvOXh4MEF6WEYvK28zQzE2NUlXMjUxNnlqQlRqUmNRQTY2WUEvOG5LVURmaHFKaUN6UENnalhabVlHa3JoY0lpZjJLV2JNdFN1U2NtVUR0b21SeFliS0c3MitSYVBJYVkvOVM1', + 'OWpIZ0puYnY2M3RaQ3JrYS9IUjg5OVVwcUpWTXhEWlhYR2JGazZmZ0hnYTA1dWtpa3QvYWRPZnMzeXpOMXA1NzgvMnJ2Tmt3V1g1ZkpDMklKMWJnVmRKUzQ0Z3FOeXRubGF4Y2J1L2NqUWFwOExwYitXK0VXWCtsekUvN3lkTHJsN2pDbXNXL1VWR0Y3Nnl5N1d6aTNXbFpoOG1HSjBCcGJVZEI5aGdQR0JqakpBNFBGbDJrWGtweXVNblJ5czRsd3JKNzNvTEZQUjBmcWt4NXhFWFkwWnl0N05BMXhONmZiV2RUY2lyNm1LTG4zbTdSaCtyelE5SGIza1FJTzl0MnFRTGdKSlFRUVRISEFJSEpTalM3MmF4d3F2aXp3UUFLakprazloUEJnMTRT', + 'RVJnTythaDloUGlqZXgyaGcyYjFhcjFiYlVmNjFQRFd0ZW40VWlGQ1BHUExsaEJoTS9EeHlpZ0pIYUg1T1lHWmlOcTVybkZkemRUR0F3dXpIT2RDNTQ0TXJwcHl5TmRCY0llNVVGakJvaU1HZWVTaUh6Z0FtMEUrRXBTRHIrdzRTQkpxSU9NQUJNb3ZJS2lEdHdvb3VoMk4xdlFaUzl2S2JtWXRvOFhxVStyQ3Y2MDg4Nk9HQUhqTXJIMW10ZFQvVGZKOGJIV3ZKejEraDViYkdFMXZmM29uRUZISEhOaHJycnI1TkJhbDNzZll0T0Z4L3VITDNuSTdhay9DM295L1I4TEJmMWdsTXh3VUtKTnBTN2x3QlM3bm81dVhmM3ZlejYvOFYxNDQ5bWM1', + 'ZkorVy9POEdBVmFkZUIxRE1maFdQMlNIWEYvaVBiUHA0Q2tlRE4yNXV5eDRiMmlhVk5HYzhiZGg5OW5mcS9CYTNUODY2SFQ2MG1NdElJSTJtblRNRjRmejQvdlJZQUFERXMrQVBPRXhjUERLOVNISHhJR2lGSFFlbUx6NnRuSjhJbWw1bWJNOU4vNWZqUnhxYVhRaEdmUHMxR0JCc3VjQ3hnNFBFVzkwc1ZxMHB2WEROajQyWEVTelkxNlViaFQrTWloalh4M3krTXlEYldPSThtVnJrd2VMc2tjL2RWcDZqYjZ0L3NkbHl1Y2RUendQaXYxOVYxUjRLUm9pY3MxOVk2QjIvUzJMMVEvaFdjYno5UHUyVXovd25NZEl3cWZCUHo1TnFVQmZzbmlk', + 'SDJBOVBYZElQWGwrL2VWOEVtU3JrMlNNZithV1plTis0eFBXbWJoSklDalFXRlVmQ1pLRXdOZTdINkRqUWJacDdCOEdjU0ZwTDQrbE1sWnNoMkZpRDYvcVhsNktodks4MVVPUzk0WU5WZ09ianlyMk1rZ283Nnp6em00SGpTL2ZJaE5HdDl4dThFck5GcU9FL2VnN3MweW1Fck1PZUZJb2xnNncvekg1ZjYwWXVMblJFN294U1R2MzJzNjRFSDNYZnRXNCtSZFlrdVVxMkJxUUZ0M1BZdUkrQkhKOTJBZVlhMnYzUVh3NUFwd0l0ODZMSk9OSEVLQWpRTkpWQkNkU3c5YkFqUS96dnA3VXVvRENTYUh0eDN4bHBTSXVva3JTdjByaGcrczNuSDJD', + 'eU1zVWRJS2hCenQ1ZFJWck1PcW5xTjE0ZTFrcC81NERucmZjNFdyUG1FRTVNL1ZkVGlkY3lsZWR3bXZhQ2h2cVo2QTJ5dEJuNmx1WVhLdCtmRmhMTEo1OEVJVi9xd1A2N1J4TmNGenRpUUVlTmFNd0ZYT09CSTJFMnN5NVRxengyYUJkVWxXd3I3dWNLMFArdVo5cG95dnYvZWRueTd5eEx6L1NKOTV5MHZVUFA0d0pCQVNscHp2WS9jaVJCV3kyT0NvYnpTUFRmM1Z0QVcwZTIzYzF4ZDFNejd1ZzZ5ZHRHQXlsWGdTR29qaTlIcXVRNEJiNnR1UTVBWUxralcvQys4M256N3BSNC85RzNIUHFOcG5LYmVQM2YxdUs4TDBHZWNjczRySnJ2SThs', + 'OURibnA1bEJtTGJzUEoxaTlKV20xOVBUMzBwc3k0L1hMbmYxR01tVVVBeXpZck1rVjlnUW1PekMxOVFWTjZZZ24vYUJsbENneDZvNEc4WnEvUTRUUjdpejFhdi8zczJFd3ZQTHYrODhORUhVSlljdm5wU0JuNHhLbFlETlJKTWRvQ0Z6SUszWFRIa0hNWnEvaW94emczdkVvNi9FZnJwZ1paZmNmT2JUbGVoeGxlNlBDRDg0OHNXOWhnTDlsSjAzdGF3OTk3UnVYVytUVFJ0NG1sdHR2ZHZCR2xDZDFBRE04OHdBTGVhNjZ6SCtEVmIrM3o5YmRvc3ZpOXcwNjlQcXVvL0QvQ0ZCYlcvOHlFT0EzQi91bTV2U1Z1dGJSSmNNSHhFLytPdTM4VXc1', + 'OC8vblYwZTd2L1hybSsvTi9uWkNxNkJ5dFFnWWVmRG9YUHFseWI2aE5LVHFmazhKb2xoWXlGajZEY0V2RWdIbDBiSzZuZWtlNjczNlZGZjU0ODlWNkgrdnFnTVpQbHNOQ0l6S1kzdkVZU1VrMWRNNWwvRVU4ZGpqMTI3SEQvQ2hRZXZTc3lReDhaL0IwSDVIcW0vUnlWUUFJUWlzUnFjVlhQMTZjK1c0c0N2TkZTendWMXdmeXkrbDNjVE5ySVJQYmVnbmMrQ0FtV3d4VERXQTlKSnZ2dUNsYVlzZlBuTitCRUswRzVTL0JOY2sxL1lLQ3NHbTFuN2RGU01JRi9pOHQyQ0VDTHdablAyUXAyd1BuU3YvTTNrRVpFaklpbG9aT3NRam41dVVIdnZQ', + 'b2Y2QkRRSS9JZTlGTzU1YmhIK25CWXl2aGR6TVVUbkZIR0s2NzlFSDNvL3Zvbll2Sm85UWowTWpGRHVLZWRacFZmbHoyRkQyNUp1THd5OUdSUTZ3ejlFK1Q0R3RET1I3by85bFhQa1o5OVpGMVdlL2hiOEtIaEJ3UEhUSDRaTTRIalJkbmI5VEpoNW5pQzF2cTZyNE1JT1Bxa2xUYXZpUDlxamp2WXVmRGRFSERoeHQ1NlE0U3FydnZ1cXRZRTFYTGhtRXVzb29vYitnaWJwak1UdGh3WklESFczaWZIRXhlckJraHA5ZFE2M0RCN2ZvbUlIb2V2RENSWUFyOTFQL0FoSjFnYUNJd2ZqTitKYUh2dm4zL3o3enRlNExTZEJvNVNHaUZUbGU5bmtx', + 'NjcvdnV5MzJXVThMSFRkbWNxRmZ0dnZmZmpXZ2d5WVgzb3d6Zzk0MXIzSDR2RjBwbFdsaUI0cWkzWjdsWDI5ZTQ5NUMxbi9mL21OT2o0ZkpNaTY0WXhBTU8xWkxUaXpUUWEzZzhaQWVLUXo5MEgwSHRQRWNadTVSaVVVOCtENTJmUHVPSEpyL3hKSE9nVjkxemswak9OMUN4R0dKeHNRVUNoejBjYXM1VXFhYW1hSEUxYUtUSU9teWFiYnI3eWFUWWNRVUlrQnErT2UydmNkckhpbFd5U0Ftc1M5M0tMNEt2YUUwbFpJTCsrUkNEd3hVZ09IOGI1VVhVRDVyTjJZVlczYXJPR3htOERJM08zQW8rajk2d0hZbzQ0SHFva1lJdnArNE1HK1lyVm4v', + 'TUNSaEtxa2F1R2xYUzdocnlyTS9zWnpmaDdYWGV0VzgzWmhBancvU0c1Nkk5cnEyZ0IreHBRS0pTN2lyY2h4eDh5OFZmS21jdm9PcHBlVHRXelQ5TGt5ZGd3dTdLUy95dml0bW1MYWdNbzJwR0JTb2ZIOTZjLzFkeTJoeVhYYjcvOTdRbkxUZjh2UHZWS3Z2WE45akh6N3pDWFIzaWhHd1VUa0VpVDJZLzhWMC9JVXM2dnNjTFdnSGRtMUUrZW56L0xQbytJMkZqUFZ5cGwyYjNIV25ZUHM1bC8yV1cvdnYxdUxWdjkxd1BlVWdHaHFoVlFrbHZtSGkzdUVWTkRxckRDbDMyMCt1dmhmUWNnZEZZNUtSOXJGandtVzFkMmRsUk5kZFpKcmxmQjhE', + 'MHVWb3k2N1YxckoydzczU0wydi9Vb3VySlloQUFMVVI3Rm1YVDFra2JqVS9UUDRncWY1NnhlNHBoa3NFSjAvSm44blZ3bnhRbnZYVE1XK293VTVYdFdVREc4L1I4Njh4bGZyUUtLeVNFK2dtQlJ2SUs4dnBNK2g2SCtGWmZJbWZlaEdlSTdvSm8wc2x1Ky83cWd3cWMrOU5OWE5KYmsraDl2M1J1K2JYSFZTVTdNejhxV0tQbVZCM2pjaVhXMTFsbGxlZE1KN2xtYnpDeng5OTlzWVl3Sm1ybjRocXR0a2E4MnFhVlZyMlBYa1pyVGMvRFcvaTJlemkzWmZ2ZTl4VU5XL2V2V3VTc1cwUjRiNWhkZFUrckVVeSt6K242TzBtYmEwVGovTlZHL0lz', + 'OE5oM2Z0Zms4Tml5Qkl6UFZxRTc1ZzhIdUVBK2VOMTltajRYOFdtWkdzRCticHZTTFdrb1Izc0NZVE51dXpqMzlmWDI3cUhLMldPQWtXMU9sWXJOdktmcVQ2dW9zYjV1dXVlc25sbjMyRkFmRGFMei96aDhYVlo1OHB1U3ZXeEVHSEdyN1JGMFNLUkM3M3VRMmpCdnAzL1BuYWQwaVRaMU5ocGJab2lhVnF5dm9iQzBOY21VT3Q1WWhLcnYzMVk3aTMzSFZJNTR3VlVvdkdmTGdCdlVOeEZjUVo1ajVyNGYyQjF6WnkvNGorQ3laSnBad0FxWmpCZlpoTDBDYXJ2L1phUTg4M1Q4OEVxUEVXVTFHYiswbFdKTmZISWhvWUlacDBFb0cxbnkrMmJs', + 'R3Mvb3pRaksxcUZyYjU3NzdlNUVIeWFsRWx3NWZvc2doVnozWXBybTBxS1kvbmppSkE2dUZjbDY5L2w5eG9meWZFYnRjSitmR1RJazRUcHhBclRoSEZGMXhSMW9IeFhsUFk1YS8rL1dzKzhnTnJHdTljd0daMzIvTFdMV0k4WTh0d0VSL0pKdGZzTytQaElUVWU5TlFTaDJUTTZLeDcwcFdEaHArMm8vMUhPYi91NVM5Ykx2OW5pUFdqRHhhNUxsdXIxY0FHNU11cDRUT0cxOHBYbDVZREMwS0o2ZW90VkVxUnc4Ti8rMkNwcG1haWlvQ3dVMVhDa1IxQ0g0MDIzSEh0N0VMZDRqQmpuYTJsSlc2TTIrMUFacGxiNjBwaDR6Wk8vUGZSMHdTWmp4', + 'T2ZsdUNPUzUxN25YM01zZTIrekpyV3VqaHY2Z2YxdVZDd1JtdDlIVHVBN2Z5V2srR2MyK1NsQmNZRXpod2o1UHJpTkpvK04ySCtYYXp4N3ZiZUcyaXFSL3c4WW5hZG8ybzZ2RWl0Yzc5bEtFc3ZqREV6MEFuenBvWFJjT3V0bGxEengxRUJEem45dzhMVU5xVDQ4TjFpMmI3NisrVDg2YTY1OXQ4c1dwbms1M2lyaDk5K2ZwWjYzWFhlWUF1NTlKblpFcjJ1RkxNOGN6eCtOclZEQnd3eHhCSStHUUdhUmpSVHlLZmRoNDgvbDV0enZ2Y1RNNlhqdmx6UXJhTW1pcUl1SXliOHU5azI3RjJUNk16RlA2RWsvb1RPa0NNWitLZTVPTC84Q1FCN1hT', + 'WStUdHFwc3A1U3ZvV3d2U0h1NXorLy83Ky9CVGtZSXRTa0x6ZmRSeCtudHFwYmtObm1YaUVMT1puVWNFTWpNV3FVVmowSFNtbUtRZUIzSjBiYlgzMzYrcWZaYUk0TWRBWWdLeFY0c1B5eC92dWM5YlRNN3dZNTdMTEM4RFErM3VOUktFZS8yTmYyUEJOYXZqSTkwazFlLzcvYzgvK2FMZXJ4djJCWFBOakJzV0VDKzNPNWY4RDlZMm9JdFpCb3BZZnJJZEdxMEc2WXV3R2NyaU1vODZpVXVYa3RuOGwweGVGdUtzSzV2OWM0UG4vMjRpUFVwQzZUOVRiODlQZitjYmpwWVNTbWJTdXdEWHZVTy8veS9FZnA3dnVJNC9Uc1k5TGhNem1ORDRzNWxn', + 'OFl1K1RGbmhHYU96d2ZNMlFqd25YK2g0WTF4QitMb1I3ZjBzZDFWWC9oN1lVMDNha2p6VHZyMW1Oc21HSHN2LzVkMDF3ejVHdktBVEJGMElIcVBSQ1BRNjk4R3V4eWwrWmY1bmhHYmllYVZ0dlZySDdIVzlzWDRFd0lLTDZxWWpQVVVLVXE4YjJQTXRFcFNjS2M5OU5YaFNaTnhYSzhMUllNVUJDRzhieGpEZWdRNmJYVVcyMjlONmd4NFY0MytDWHNZeHlTN29GdjJHa1o2a3JGaHVFRUdSODMvL1J3Q29HUkxGL2xJWWdJYXYyZWdrTTRBeUErUFRJeWNHTzU0Z04wamc1V0Z3YUlqUWhuWENsaU92OTVUSDlMMmwyaW5qMDMybk43NUk1VU5t', + 'VWJ6WjIvNHZCMUQxeUdLeTcwNFNsRGJ5WmtxNFk5SENGeVZyQTVMZjFvWnp2aEsvZXhQYkU5aDNBM2xlYnlNNWJiejI5L1UyK3VqZlBOSzM3OWthYWQ5R0h5V2xXYzZVcGU2SGdXbE5PcTc4Zk9CbGk3K0dCRWgvdE5HS01iU1krM1daZS90NGtvZWsrNDcvMmNVMWlJRWZwNkFxOWgzTG42ZThNMHZrUmY1eXU4REpnem05djhib1Q2Tkh3SkZYcWlEM2k4RkFwajVzTW90eVhEUGcreUp2bVU4MzdhSUk5VlRvRXVxRzMzQURTVzZtQTErckZ2V1ErUzU2NC81dnNjVVFtVXFSaCt6ZlM4VzlnekJCVlR1WnZwNHIvYysvRStBaENZUGxQaTZ4', + 'MlBWY2plMy92b25mZmVhbmZUc0pHL0x4MDJ4WVZOV3p1OTNwdGlHbGRKekxYVHZ6L1JDUDQ2M0FNNlFhbUhJZ0dpM1BmTGk3bkFoMTMvVzZVTzl6N215SmhiOFl5clVpUFdqZ3BiT0V1dWlpaUR4NnBCV2NjVUdGN09sTENhWVNlQVBQYUdtNGc0LzdObC92MzBPaC85dGxnQXNrQzBRTU90T3o3NHd3L3JxRW1UamtvZ3ZOQnhWY3dTWmdiTXZmdjlOQ1RRSHhBbEZjbnQ3Ujd4Yng0LzdGWHIzUEhoTy8zbTFXeFo1cnV1dVRKZ2x5K2xFc1JjU0xmdUhDMzVmMkw4MGUvSlpSYi9ya0djZVkrU04vR201SnU3aEt5L25UUHhqL0hDdE9KbHpM', + 'V0hzOXlHUXoweTN4cjNkTFZ4Y2xjbUVOM1pnT1BJZm9mWDQrNDMzZkxHcU84SGpZZWllVi8vbnFQLzU1NXZPaUZYT2JGeUdacnFxY1hXZnpaMHYybFNnVXVhK0RGcmpGVytvYVo3dlBNNTBqWDU4WjNOSDJPSnVQdFljbmIvYmN6Zzd0alZyWXNZTGUzUjRqNlgvcm41V1JlYS9xSWE2NjZMWFFadmJNQkFHY1AxTUFZczYxdjBIQUl6dnhhZVVQRnlpOUxTYkR2Q1E4UEU2THZnaFZ3UU4vcGRteUh1eGpyV3AvL2U5L0NBaWdhMGZmcGdaTTMwKyt2T01FdzkvQU1yK1U4b3NYR0JOWEpnNzIzRURGS0JMQ3N0WFdLZVN0VVNlakVEanJLL043', + 'K3pNN2NjY3FkL042Nk5kbCs1TmFvYVBuYnViZkVGMzRaZjNHWXhzekRyZnRPR1g3YTkyekQvL1cvT2QzcVJSdnoyZnFPQXliMHl1WnlGSVRKRjJYWkV1TVY1ODMvWHZVK0g3ekdoTmJ0VjFNVHRZd2s2aWVyYkVmR0ZkaWFHa1BFdit2WEx2U1F4aTI5Q2tTazl4d1E0NWY4S3RvQkNPZWZROTN2VDl2QW9SUUJNamFlRzc0ZGVWSEdVL1ljcjJVS1VVeFNkamU1d3dUTTZjeUlMWDBxOXNzVGpjSGpRMExLcjBTdkZkeWQ1ZW01R0xwQnhZc2gycGgxdnNHanJscTZnKzc1VCtmNDlJOUJhNWJVREtXcmZPOUt2WVNoUlMwQzMrL1I0ZFRjaTVD', + 'VzE2YVVwUStHNHFxUFNaMEhkeDBCYTNtQ3NvUDJ1UHg2NGthMXJudi9mbGFXcS9Vb2FNTG8yVnVoL0JXdW1Wdkd3WEJCRDNYbEk3bFpJYkY0cGxyRUtkRlVvV2RENWxrVnJhU0djd1lZYi9QS0dhZGl4ei9ubGRuamhlNXhzeW9ieldrYzF0VDZPL1AxV3luVkVJaVdja3JkN1djZkkrVzFzTEhqb252ZHpPNmUrMnNpK1UycDRmZURKeS9lR2tBdUZrTStUS0RZZWxTdzE1RjRGZlhudktCUnpmcWdYdDZGeWJxNlFOb0h0eTNaN1RxM3h1MEc2bjZ4WlFYd3BDTUE2a1JhTEFEaTFQMkpHdVMxbFVlREJOOS9FTHR2TWtlVklUWldYR1puV1JZ', + 'RlVYTGEwUG5pdEpYdFdnbkR0NVJ1ZFpwcFBYM0xvR25udTcycE50T2ZuVGlaU1BlWWlwUHZUemtTOFpmU2FmSHB0WWZRWTNsZW40Smw0L3ladU0vTFZ5cGpSNmJHMnM0dmpmRzN1dnVrQUF3Q0o2bldMU0U3a1Jpb0VEK0lrVHBidzlIV0J0SnplZFA4ZktRM2dlNHdDME8rMnhhUlRCVGhKZ085MGZnRjJpN2hKejY1YkZqNjJFMEpsQStpZndINE9QYTQ2ekREMjZ2dnV2ZjFGYWVEQ08rOHd0eHVvMnJUcjJsNXU3bForN3lwU0VtY1MzbXQveDdzVldpUWZyZ3FQS0xmZWc4aWgwY2VZaUwvTkVwdVBodGJTV1U1MHppTnRWblhRWGlWNENE', + 'T3R6TDBMT21mdEhjeWE4WGlqRkNCSUMyTkR4M3pOcXVGcG5lall2U2Rkd3dsV2RxZDhZNGZxOFhEN0NrMUlOWER0VW1BeFEySHdQUmorOWZqd0k1Sk5MeThzc1I4RHdlVDVoNE1QY2wxbmJaSmk3OWlma09wdVg2RnU4cmxyRkhxUmxZTnAySVA2eWxDMVAyQXVIeSsvbThCZ0lNNTM1ZnErUmpZdVU2cThyVVdYSnRIcnFXdXU2aXZ2S3RqKysrVm5iYjZ4cFowZC9CS0wydzB6bm1xajBXVHpya1BaSmZBRURESmFkL0oxRXZPVWU3dk5ZUEREbGMvTEJ3QnBjdjYrQUsrTDhucVA1K3ltMi84czQxN29PdFlHSGtTaW4rcUtKYUtta0Vldjdo', + 'SWVVamMybFBWWkdGcUphTGo4TmJtWVNUN3o1dkVvSk9XcmRVeUJxaDcwUWxHQWh3S3F2d1g3d1JCTmd1NEVJOW9vakREcTdFQkp2S1paWWtOT09lZnI4RnYvZURLRjFrSDB3OUJ0bGJlMWZCbzhablN3LytjZnJEbFRsYmw3a2JuOXg5OS9QZTYrVENLRi8vZWFPSm5FcjBpMXY3TC9uRlBXYWtjSklPU3Y4dGM4bkxSZFBoWkpCTE9BZWhjL3Iyc1NnWldrZDlpYzYzVVhnL3V2bzEzYjM3MW4wYllEb0R3WWFwa1NMbDVMV29TS3pTNjRON0R4SDdmb3pLK3NEbmRtcUhoRG4xd1lITHhmVGZvOHBwQk5vTWxYU1QzRUREOVV2Q2VWR2hLanJm', + 'VHBRc3ZhOXcvZWhxVXlZemZwa1FiTDY4L0VCUzk5OWRkM1oxcndxVHl2dnZ2dnJ2YlEvR1hGZkFtNFZNdndNbmZmanROckxoaldEOEJ0SzRQaGRLTlZKcVVkVHFmTDZMK2hsdkY3NDNidlBmSGtuMzMxNWZXS2w4WXlEVEs1Yy9FVzh5T0wvMkUybS9FV1lOMjhFQzAxWGtXdTVsMS9ReEI2SHBIT3phMjZVZXVtOXVFYitYaXYxTm4rUi9GTkViVWxQZ1ljNVBWck5uZCtDUi9EQkFmQ0FnYUk4VGZ1UWxkTWY0UXdROWdxQVlieVVpeHd1UzlPdC9BazlMZmhNUjFUNjdSZmxLVzJtZTlUVm9aektJemdqQjVkTXYxNUtZR1hhRnhRUWRsdWt6', + 'dVJycmJOUEt2aVFPcVQ2ajE5aHlDQ2ZocWRDN3Q2a3FTSUVnZStYZll1STMvcEswVEt2ZlBOTTlINTdHSjJLRi95M2o4ZHMyUnc5ZGM0Q1BtZ3pGQ2ovWFhwMGI2R0ZudUpNK2NmZExvR0tlZWR4dDNzSzN3RXVVV1J3c3hzOWg3czkyVy9OSFpYNXpEVi9NNmVuNzB5RWUzblBQYys5cm16NlYwUUR1a3lsdUpBZDYweFpwTXc5dXJ6UGJIVjM3M2lFbkx6ZmxnS2RNbTd6d0pMdjA5RHl0ZC90N0p2M2M1akFoaGNsL3puOG5UemhrQ0Jnb1ZvK3ZibXp2VW9LOEhwUlIzNGNnaXZEKzc5eHVnY1A3NEFlNUQ5VjcycTJNc3JpMS82eXByWTBi', + 'UGYvOVVPYW9wQXdhb2dMOHFEdW05NFVVaEZuL1ZSemtKVTB2SE1zRjFmZGZJK0xWRE9YU1UwOU5OTi80aCtieE9DMkVtNHpGUk00UC9jVE5YeHgzSjEwWFl4NkprR1hUVStXNG5BZGJzRU4rQlI1VGZVbzNubG0vZVlDS1lidldtSnBPY2lTMDFzMFJXNzhhZVlHL0w5aGl4dFAyLzFudUFsNG1MTVRXUkpBTTNZYmZJMzk5MHplREpMeDdwRlpRK25heFFXQ09qQUtOdGRlZTVXUU1FVUFONWlRSzZHbmorTGlIRW1pUXhSU1VhLzhqSmFwTzc5YjZ2akdUbU9nckV4eHhUWWQ1OHEzQjlrVW15Wk5Oc2ticVhkbzhRSWhZVlFvd0ttTGxYWjlO', + 'Z2g3d1VHM2oyMlIvSWxDOWVvdjV0SG1qbXNGVWthd3Z2RVdNQkE4cjc1OTl2Yk8ydHRFak4xanBYUWtpN3dRYy9FMi8zQk9hVS9jcXBCMWt6ZHRxNjU1cFY4L3YzM1BlUk5QSXk3VWIwb3RqdmVTYWRlencwR3RjOXZ0NnlOM2ZKZVNUTEJQWi9SaUQ4WDlMdEhPVzh1SldXUzU1eUxmUys3MVNqOHRyTkg4YUY4WGlnTmlXYjFRclM4ZDlJOU9kMGxxOERlNlAyQ1ZKU1Jwd3pwSGhEcnVHdER4QVFBT0JKYjhFZ1BJdVZ6R1Z3bTk3M2o5WFlDZXNnc25ydmsyeS9xV04yREdZbDNGVEQxNTU1OXRGSEI1NnFCODhBdFUvLzk2OTZYOE4wNHgv', + 'eUQ2SmJwS0ZOQ25WdHRwWkhqdWNTV3I5RExUbkYwenp6OWRQaG9UaFA4dUN2MzEvcVpxQzBXOEQrbjVlTW9HY1Y4enAwei93SFlSVWpqNm9NNFFMRWJkVkpBZVV0MVdiOUVjNG1relMyUC9aWjYrZWVTOGxsbWVmOUpRem15WUFUUUkrVTZHLzNQWnpvb2IvL1ptZGY2NTZPVm5vRDdXRVB2ZXhUUTFHRjlEeGZrV0IxTDFMeGtrZks5NW1oRW5zSHlFM3pWVjZTYzM2U3ZacXdtMWZjeUdCc3NhMmdkaWswM2FYTmt1L2kwbC84R29OQnl6elFTM2lQUFd6QW0yVjBTVldrR01TQkFJM3Mwb3ZWS2VIOVZLNlE4ekJQZ1MxYm8yTjBYdU1Oakp6', + 'd1lBSTJMamk2SFV3RUh1RGF0Zis5RjJpN015a0pUZStQUEU5RHpqa2pEcXFuQlQ0NmsrZVBZSjhDUTdnNkM2cFJYL1l0NloyUXc5Tk5zdEVpcEtwQ2FQMmNKZE9nbCtLOHE2Wkh2S1ptMmxpaU5VaTBVNGJWcEVHcjRpa1hzWDV5bi9kUFdwQ2ZrU3lGRzhkWmlNc2VhYVpYSHA0cWw4a3dubkIvUjBUb0taOHk5UFBLdkx4V3hpVlN3bDdIUlprOFRKdExlZ2ZzS2FuL3ZMZHdTT1gvU01zUkkzcnExVlNYbk44Z2xyM1hUL25DTWZJOVVPQVhDeUNGcDgvZ1lYcExuYW1mTDVXdmVkSERaUEZic0hqSGVNN2tyVVVESkRlMW56U04rcS8rWDV1', + 'VWRMcmk3NGMvb2dXNkgxK3FSaVYvK20xb0FmaDlGeTFpQmtmVU9IL1phZWVkNkw2MUZrWkhZaCtsNkhJL29ySmlVaDR6dWY0eWR3N2l2UHFDMjVpV2lxVHoyV0VMSjJvSFc3aVVuYUIzblo5NVdVVGg4VjdLVDkwK2ZWNFlrVUkxaEZMdnNnd24zUXpmNzhPcWFwejZOcU1qdStEL3JTUklucUx5czA2ejA3dWZQNXNYaHRkUm5oZGVqUFVXc1IrOGNJWHNJNERva25ZWjhaQ2pjdURZWjdVZjdRVzQyVFJaazhkclRtTTE1dzZ6SUpkdkdQTDZOWWpCNTZPcjRqQ28vVy9nWVI2QWtlTG1nSEN2UkxNRGdocGtGcy9VSnZnaStCWkd4cDRoOVN0', + 'L2hPRW1wcDRHbTJDNjVLS25NOFVTRTdYMmtTZWhPMEhoQUx4ZjhTNFZVQkxkMS9FQ0ZHTHo1Q0I3WlhLTFdNdXc4WXRGZzN6UVQ4MzF2RUNTcUFiTUNLZWQ0WHpBdTlGOVRGeG1oSnAwTktuZGJvL3hZV2J0NWdVb0xlZmZlRzNEaW1XOThGclYxazB6K294aHVvV3cvelB4UmNZU1A2ZWZPSkxaUVg3L2Z6cnJET3dhQzFaWjA1RUwvZm1Zdno3SnA0TCtMOFpKc1ZmK2xrbVQrN2xuVTc3dVQ4T2tXWnJ6eXYzMjNTSHdkM0xxaExNRkk5dkVQNzdPUGpBbEhXS2M3NjNZbVBjZmVYWURjby9zaVF0anlTMk13Q1Y1MytmNG5zZkwzK2VkeFlQ', + 'SGFTb3pNd09HRS8xY0RrZFh4MWVId200bS9iMzZiQk9TOXNtV3lUOWxuSjZHenlZQmQyTWVwZkZjU2NLWkc2M0tPMlMwM0JHQ3lhWlVjYkxMam5tVFVKT1Bmc3FYaU5YQjVSZS8yaGhMWTRiNlhLRG5zZUNlZ0dWcTZUL0JTNWZkdm1FdForL0RaRHVNSGhCQjRhTktSTFltYlFONkg3TGF2cjJpRENxTE5mODBBTVJUTWpJMGNUSkRjQ2JzamVrLy96NStyMWcvQnUvbVhuTmpUZXhmNlBpQzY4eStob24zdWdOSXQ0akxaU1NKL0owQjg1cjF0bnFYOEpuOXZzRHhuek9HNHliMlhjQTc5YmJlL2dpSXVtajE1V0VYeGxmb0sydTNQMmRUTW5y', + 'N0tTUGRJekk2NDJsdG5rMTRVdUlDYXJFajVNdWd5MzM5RUJ4UXhNRzZlL1h1VldIMFBNVFVwR3phTzc1eVkrRWZFdXVyRE5pcVljQVhYLzJGMVZYZHhuREZZNnYrOExqWFd3NDgvM2pKYTFxVjlabkhkTXMvOTd2Vm13R1U2ei9CeXNRQkRuNjRKVXFaa1BLZjI3aGg0RG84U1N4QUFUUGdDajBYR2Z1VHVCSFF0WlFkRm5xVTlqMEMwTTZGU0NLRHBtRzB1Qkg5KzNYWGJ4enp5dTVkOWlFdE5FMGltNlIrYjRQdytTVTJ6OXRmc3VlSWEzZm1OM05yS3F6L3BmSG1nQ1B2VGpRWm5LcmhFRUhmdmM5MmV6OFo4VUQwUDUzTGN0dWt5ZjFLMmtr', + 'OWgyYXlHbjlySkRjcU84SGlqRkNobU5iNlJaUTlsM25tZXZoMlAvTHR6NUE5aUhNUnBad0ROZ21SeEVKQkNHZUg5S2IwVGRQYlpBS2ZvQytjL0c2QXBvZ2tlb3RoWXZpeFllVCtqMkltRkRmeitDb0pHUlpOWVFLc05MVFF1b3gzazFzNjc4SnZUOHZzZ3hGTVBkVVdTQmRJOU5vOU4zZnFJQlBKaFVuMEppWUxZNWFFVnJhUU9XTUtvL2pVYktZa0E4RjhNZDlGUW5ML0JHWkJCSDNONy9xYkltbmtVN1Q0Wmh1eVJlKys4a2VOVGgyVTJFZVhXU3k3UjVoRE1uRjNFS0JRZTBVWDZtajQ4M3ROTk5lWDFVZWZtZXllbi8rMlkzampaYmlYMnZs', + 'c1NlNmFBbmsvUjBIVmZJRmZBdTdkVnZFeUExY1hGU0hwVy9KSjdOSVNlMUIzOXdLRHE0QmZJZVczbUhubWNsOU4vNTRIMjY1d0Mxc2lib2pBbWRsNFVVNS9UYk9MS3hpRHVNYU0ybkpmbG03dG96VFBGbk9jUzY2U2xyWm15aVBTOTQ3dXVmWTNydWZOL3A1MzM3Ny9WL2lXVExFVWc5SUlLK09wRW9mckhQbytMQkIwVGY5NEpualZZVkVIZzhialdWSzhhN0VpTksvcHU0ZjB0UG9ISE5qK05ZWVo4UDI2KzdKUmNBVzVaVHp6NjJ5U2hRZkI5ZlYxTThjZU4vRlphejJSaEhTREQ5M2xmOUhaZ2MxeFZoUy9lRjF2TThiWnJKZ0pONFB5bzBY', + 'bUdOcVB0c2pZOGJKZjRHYjM2OXRGVDc4ekVyL3ZNdmtkZ2E1N2dUZU9NeHZzVjR2RVZrSTlGcXljbmhmWThZVERGZklHaktHSC9wbkEvVFhaYi9nZ0F6QVNUYXVFb093RS9yVkFwMndmMHVWQ3dobjIvN3B2OFhoUnRiWE5rWk9PclB4blU5Mi9pb21SOU1TYWpxNnZPZ1ZVUlhiUlFYNGxRN2tFaW4waTJCSnA5RFJMMW90em4yeTJsSGgzTG0zbnZTVzZibkRTTnZRSWZLRFhpRUMrY0JxT3hTTm1TdzREaHhDQjNZb2xuQlJabTN2SVFDVGVrS0IxejgrcVQvVWxVVTAweFZNQmVyOHdnemZLYnFjcjdhNnRMMWhZZTBQYzNVby9sNHZKT2or', + 'dzllOVVydGxyTURvRE1RTW1TbENHWjlKT3FtSm1MZjBtMU9SZnRZOCt0aW5ubkx5Rm9nSktiODNVaTlMMzIrKzFaR2tXREpHc05zcWozNS8vZVA5R1U4d29Pcjlvekl1VWk3N2JvWTRpMVRyTmpiMGo0MzJOSzdlTHdQVForVFdpMDJkUVhUQUhHY0ltcWsvUE9NMks0WGZranBiSSt3Q0svZXk3Rng3Q3kwSjNMYlcrU0hvZTIrTnRQN3NEZnNiSmcxWTh2VUFTMFg3ZjZXVlkxeTJUTnp2eEU5MmQzZWJ4Y0JiL2VNSVhDZ2Z3WkJZQWJCZ0V4M2xoeXhyekR3VU8rbFNsOHJDUUErQThmWVlndGhMTzRvb21LTlo0STYvYjU2ZUZTZDVlOHpC', + 'YThPMG5WVkthUTlzcnRaZFFQdVVEcXRROUtOR09QRGptYmVBTWpwRlJUb0U3VFNlZWNVRU9PR21valJrZlNBeExyb1hRd2ZXQWNrd1lGRVhEM3U0WElkTWNOYzlnNDJjOVk2SGVMOE5GYy9UcXhRM2lxcDU1NktLZWVTaU1qd0JxblEvYTJlRFpwZE1rYis3NzZlOHBEUzRxSjk4Sk9PSGpGYzdPa3FhRUlUTkFSeVFmUW1QZzJvMWZUbUZzdWNGZ0ZZdnlBeW9mYmo4eWo3RFF5cVZyOENSRFdGNUdpNW5pQVhXRm15Qk82dXZmM21oY3UzYzFoN1QwTU5oVElSY3hrdkJ3OTVrVCtQdDNpeXBDSFIraWRvR2VjSW1SaU1zN25obXc5NXVibUMr', + 'blVkeUl1Mk0xUmZwdUE1RVhBZnpneTdWVEM5LzJCTDZ1dE0veUpCMGlucE5vZE5UV0lHWEcrRW5PMnhYeDNMdnlTWTlSd0lTU3FTaDJjR0JrK1JKTXprT29PeGgzelloaGxMM1hwYlgrRnJoaTgyODlEZGptMlBMdFJGS1BiU29kZ1d1LzlTNTVMREUyNGZOeG9ndUlJR2llOVM0dkFUZ2g0OHZ2dXUvU0wxclpISmpaZS9PV1IwRUdYdHNwVFhLOFN5RmYvdEZtVWhJUDhuVEVLMGlLSUI3NzZ5enJYaERBcnUrKytLMm1UaE13MU1YY29IbXl6L3Z2RXU0NmdReEMvRzlpbmFseDZxTXRINzNWbXJqUit3bTBhekxlK2ZyRlBYRDk1d0I0Mkcx', + 'S21ydy8reC9RQ0hlK3oxeThwWit4TWxmOXM5QklIK2Q4TmxQSHVTK3o3cGVIcTZwblMzdkhCQ0dZMkhYZDhzWlkrdkVGZlBObkpzV2ZQbXJ6NnpvbXU3UGRUcG1RQ2RPODhsZytwc3pBUGZ6N05razBhVExXLzl6N1VRL0h5NDdUQ1BUUFNWdGZWRHhCVWtCQWdqRGFLMWdtSWQvNTJGOVJVRG85alp2MzVlL2ZqR013TnU3Y3lJL2ZjVTgxOHkzR3Ryclh6bGU4RzA2ajZpQ21HQlBQTmh5TUxXdU10aWpDalZRRFBqWE5sL3YzY2ZTTlE5WWtXSStrSU1SOHJHMmJwaFlnWlpWaTYvbnBqeUY0VHlIcDY5MVRrbThsT2lUOUdUOHFkaVVTLzhu', + 'YUNKNzMrQkdBNEx4eFplRENKTTVmY2JGQmw5RnlINkNiQmN4ZDcrNDN5a21qeC9TeGg2WWdnaWo3MlRqZDJoajZXOURTU1h5cjR3aElaSzYzSGhTR29iSDc3WWs4RG5nKzRCbmZwUWhFcTFJOUZEQ0pUdjR2OHh4eEhORFNEOGdrL2szNjRxVkhFVGVJR1Y5UGFzd0FNb2hsSlV1UklPUFBPQzhpaUlpcWdsTFBNSTRxSGxEYUVlUG56NzlEL3htY1k1enp5Ky8xTEVRSUNWdENqdS91T3VkU1ViNWJaVjF3T1FRNGl6T2dER2lsUVUvQmxLQlZKUmtRYnMvVHZhYW4vRGRiTVdtY2NFYTNXRnhxaktlY1d6OHpqOUgzVTZ3YWM2RXdrb1EwMnY0', + 'OWV5ZWNPRy9MWnp0anozZFB1cUx2TVl2OWJidnZFUG5EMFhnc3ZWMHFrdnNZUTJ1b0R3bnYwTE5WeEY3ZWlTMnEvMW5FN1kwNUw3NWtnVFd2aFI5VWFIVE1qak9LZGR0dFhIZEJqMDFqUHJKOE5YU1pFbXlpb1F5ZmVKMXBONHZ3K0JXZVhOdWpkLzl5MzZkZC9BbURLVldCM1NMUzh4UW96SFdjMTNHTTQrd2ZuS0ZtYUZJVTNGcXN0ckxMZnBHc0VEQnRoaXJ4TXNJc0pjQWFhR05nbk1IMXNSUVc4Mlc2UTVxTytSL2tuVlpTYm1MQWFWWkhxWWQrakhyNXZQL0c5MVlIbWZZeURrdXF2c21ueloyWlRlQXJWRDhRamRma0kvOVArMGxudjR5', + 'TjdvNC9BeGpiVHhBVTQ0K1RLYW1HL0R4MDJYTGFBdkc0NEJkMlVpLzVRd0tUN2RmY2V4RCtGeFNzblV0RCt3RnpMNVVLbmw3MzZIUER3UHVlQUJYNXZ2aE5HbjAxdU8vdWlKQWE1QjhjMGtYK0JJVDVJMTExQVhNUjd4TWJCTXNZNUNsNGd3SkpJOGN0c2llWUdHQ205c2d6MVBZTU5NODh6VDhNbkxoUmcvSlJmbWF0UXNvT24vMzcwdisrWnlOd2doNWNIUC8vOUJUUDVkaStWbGRYTkZqYUpOS1BYNk1qYmMzMzJXNVN3TTNjZnR4OElCcWtlRG02QjFlVHFLL1N0ei8vU3hrbTgxa0hlTlo1dTJ4TDFGN0JFOVJjM1pIcXY1MkNiTTNDbXA4', + 'RVFHeU5EOTdXY1RpUGE3aUNWSzU1MXUrRnhmcXNVS25qeC9TUEJkMDNXd29lOC85U3VkWDFtNC84SjZhdzd4TUhRWUd5TzlIQzBsNFFjZDA0L3dMUFN4U05ISHU0ajBlVktZTHJUNVFwbnhTR2hGejhzbUFjVEs4ZlAveS9jRzc4UFVNWXljZFFIMm5YbSt5akpjQjZRQ24zMXh4UE9URW9SN1dqQlRpYXpwU2ZESlRxdlNMZ0ZJNDVsd25UeWUzOCt3ZGRmL2IzUEZqbHJtSVVFSDYySjlsNWtTczEyZ3h4SVBSN3dTa3RXS0hVQVpYWFpLL2Z2SjQ1QTdoaGc4ZmNYQTZBS05NZ2cyYk5lamlxM1JNd1RTdzZQMnJwVGUzTlhlY1pBWDFXYWRJ', + 'eEdDOEFwdnBERG9CNzNDTEZ4dkhpUDMvd3VFUC9aamxSL3NrRTVjSjhmZXVsWW96TCswemdqYy9jOHlzZUZaUy9zL3RKUUhLR2ZKK1dLQU51dWxQMmVoVWI1cEJqcS8vSU9vdDcrN3Vsd0pLSWNNbVF5K0tySDQxbUhPYmdlTFFOTDJhZFBXL1ZWYk5jdnpiSXhxR3N1cFl3LzB5TWZCYUxjZi8vYjNRQzFjWUEvODAwTDYvMHhKUTc2MjIyYUVtNlovSEtGWWdtNG5KaHZwV0JKTzFOOGNXSkJTc1NZdzlldi8za24wbHBMMnRXci8zOS9QU2tVOFhSbHVBekNScDVPMlZHMWw1SmJsNGhvMkdPLzl0dFQ4dXV1T3VSZzVFSlFJNWJnWkV3cU9q', + 'bytRTStFUzkvanFUaGpidm4xVmI2empITXFhaHFmK0hQQlZpQk93RWdNZ0I0M0c3L3dSenYrajZtNkRCTnZ2WWFTMGkzTExCei9IN0RuSE1HOUR4d0dCR3YrRzlINm1ySVBxWi9PUEU0Wi9YQ3prQXFJMllOcC9uU3ozbE5McGVzZTE0bTRvNzRwYmxVMjhTcFRFd0xYNWZCYlVnNXk2UG56Ly9KZVdXV0QzWUNkZkgwTEt1L3pDR3p2azAwcmJVQXExZlBsTy9DQXlya2FtQkQ0eXZJTVkyaWR6VDVoZlQ3RlFiWW8vcGFJMmFnb3BYL2N6L0d1TzE5OXhSV3FWL0dhNW41TjhQMytpQ3BDSWlGWHZYZHYvdjNwNGZQbnYvcGtkMlJ6My8vNHNK', + 'ZGNZWU1qWUJiMFJUTlhhdS90T1JBME1PcXVYN2g4R2ZpNi9yQ1BMSlFTcHliRzF3c3JRV0Y1dUQrZ0VNc0VjZlg1T1BtaGVDeTQ1VTFtWGFDQ2ZKaHNOclczSzgyOVh2ZXRKZ3RTaFFMeHYyQVRrbEwwMitoT1EvN3llTjdiLy81S1NSSDZtb3B6UDVPRE8yVkN4ZGNNOVpKRXBUaEZsa0w3cE5MWVRZMnd1WDljN1A1TDkwOWJHUjVIMmxITUlEYUwvMTFIMGhkUklDTWZsNjkvbGkvZXQrK0xTV3NjNWVKcVRZdUNSdURuc09PTkoyUWNRckxVc3FsL3Uzc1ZOSzIxeGhpTk45OS9UVkJHTysreHhRNDYrTzdmOHYyODNYdlp1TDBwZmZ5TVhH', + 'MXJVekNMN3h4eHRkand6enpRZjFoVUZXVjArZWV0UEcvV0ZvY3oyT1J5emFVRjZLTHNaa0ZFTWNjaGtlZWNvc1Fzd1ZyV3QxcXl2dml6SlFRRzBlcEhzL1ZKNUpBbUJ5eUdoUmVlZ0ZkK3pEKzcxUWhZSUNpQVJCOFpZUjdOb29nanRPSmhmQTBHL2huMWIvdFl3UnpqNDlOdWZ0aTRoWDZyaTJmVHJRMjYvR1RrbUg3Q1hFeTRxRnp3Y2hDQXlZN2hXUFZlaG9rKzRPcmJLelJPckk5MzltR3hISEYrYTlhaEx1a014N2krNWJBWXFtdXU4enRRbXlYdnNvWnNxWUlQZzliMUdNY0tsZmYvYXpwREpROU53NXdMbno3Mnl3YWtyMzMxSmlQbjU4', + 'LzR5Y2QxYUZyb3M4OHExL2Z0ZThOTU9lZXp5dnZzTXhYWGI3NGQ3ZDNWMG56Ny9memdHczR5MUxvRG9WZGZiYkkrVWl4N1RLdXRsbFhyeHFvMm5VeGdEbk1obHZ2czRwdW0yODdkYTY2ZjNLTjM3aG5QZitJZWVPTy8zMUl0MUN1SDY1OC8vbksrMGtrenZobVhIVmlncnJyNFBQcHB0ZGNpbkZVMUJ0aWkzOVhvVFVFVHRpTG4vZnZNdDdwb3VlZTZDWmEzWXNPTk50c1BGUFBQem8zZ3ZGeVc2RGZRWXlCelVqNngxSndnQVRCYXhrZkZKcnBDaW56di9aTVYzVDVUOVAwRDdZbkM1c1AwWlNsbzlhRGhPVFZiZE84ejdudEM3RHREUFpyb3h2', + 'RURiRUZMdjJ4U05mL1gvUTlUU3l1cUx4L1NMNklZMlpoekQxbUFlSnRheDQ1YzdvZTZkK3RMRCtzUWFtemN2aGY3MEpSODE2djgvOFVXTmlvYlFHL2RRS3ZIMWVPTkZZVktIemZ3R0wyUnFyNzY2NktlOWExS1lHeXNLbDk4d1FJdWxGRlg3d001bFlDekZXZkoxVkIxckhyaTRZY3RsaG9FWFlmZDZLang1VlMyZkpoQ3VIWlljeVRkTFJFRWNUU1BiVE5UeFRIRDhsbkFuTUY2M1NZeDZyMDcvS3ZnTFBMVzNkNHI4ZlAzTEpJblVqWVVscXBDUysyVkNJaklRVWpEMWdpRERXdzdIRS9wQ1FaUHBteUI3TTQyM3ZNZHB3c2kzZGd5R0I0eGx0', + 'c2EzR3Q1dk1jK1RydkpkSlEzZGtaTVlyZXZCVkQ3ZEFtQnp5akxCbjYzbDVHZWlFbUxaTW1yaGNwOUhyaCtyUnRkZ3NIWDlDNHl1UGI5d1lvZUtCc0diQ1J0ZlkyR2pDNzV2RnkwbTRDYkhsYWhnU25MdGlqZGQwL0F4WEFjTU9lLy9yWnN5M1lma0dYR3R1TE9vZWJEMWRacEsycG8zR2xJMUdCMW5UNXpFZUdJMk5oZnpWckhDbDlUQjRsYngyakV4dlZPRjhQSThIcGpZRG03STlQWHFIODJYV1dTMWpDR0duTzRIcEZzdllRYUhaenB1UzJFNzgzeUFycTh2RUFiMER2LzJ4S0ZJK1p6Nlh0RFo0KzVkeUN3WHZLcUtuRm5IWUF0V0lZaCtG', + 'N3YzQzd0M1RiMU0rZXVSa0ZCcko5dHkzU3Zhakx0SDFQbFlwSkdGdm5weTRDNXQ2ZEJXbCtLeURCN3dYb2NrT0p1ZG9peldaVFJGOUJmY2Jsc2xrNXcwcUw2ZVlFM0dCUUJUdTJJbi80VWFYL3cxUW9EYTk2OW4rUUtlY2ZzWkkxZHdKZ0wvVXlJcGdtbjFyOWcwSmxuWEJ3YlhlZk1abXlZN1NJbHVMVy9nSnV5Z1NmVVZ3ZC9Oem9LMGw0YnBBVXNhdnh1aHlqb3I1OWp5c2MxSzlURmF2aU1vTStCUm5OQmpUZ0JBWk1ZeFhKeUgvMmdocitiVUVDVHRra1BGNC9uRlFZelk5OSs5ckM1MXh4THJydjN5bzVGVWJjQnI1eTl0RmRZcmFEQXhv', + 'bUpmNXRPTWZxZFBLTi82UXUrSXpqK0JVZmh1RjBXcmRTVEZXVGVIOXQ2ZXBDL205YkxUS3B1M21jQ0VUOFRXU3JhODYxZkNJMlBnOUkxVXh4bFZuVi9wSFBTb0tsU0dxYVRaYzUrYkNnTUM5WnZOUDdKZ3RHdUgvcGFDK3hzV2Q3MWVtZWNiamRiZGFYaHZsYk1teGM2UUdwMXl6U1BweFdudkl0WFRwUWNhN2YvZW5BazVMRXpKaDRQNGtjVks0aUU3TUU2RGJha0FGTG1ra2ZvY0NTdnkvcmVPNjNGOEZ4eXZVOWlmNGIyNlNPcDNoNThiQ3lkZjF1RURFdis2N0NuU1VLaUlzRjJyeXpjZlNCcnNrbkIrSW1rYXdWQWczYkF4b1djWjdsbDZZ', + 'WVV0MXZaditKWm9RSjMvT2p3TGtZWHQrVlBQN1RzOUxVV2Q4eGxVL2VjeEtKYnlaVGp5RHRmeUhsZytZSWw1WGFTRzFxbTB1WGlzVDZXNFM2R1hkV2NpSkNHdGxIUXlabDRmZ2ZJeVcybzdVS1RCUU51eTd0ZHNjRXFmcyttY1RYZlRtL0ZtVHJoa0E4SnU3Q3hBazU4cHBqM1Uvb0sweHozcjZCdE5SVCtQUFNHYlIrZjdYb01JK2x5MXZIMmVoeDcrUHYxdVlDamVHYm83eERZZFU5aDF1TnFvdWNlcXVWY2ZPZXR0bFlWS2YxS2hCTmdZVUZrSjlNV3haV1A3YzY4YVc1dW92RHFhNjFOYk5qemNmY29SQm5XOWxtcjhtOXhsVmxKMnY2aGpx', + 'SFB1U3lZZndRaUVBK21mQnk4b0VCQkgvaGJxR3dwSzhKcUx0MW5PdW1mdHZaTzI0K041TWErTHh3TzJxWFZmaFB1MUNvZlAzZitXWlorbmpOMHpqZW5VL0tmUFU1OElnekNWelh4U0FPSkl2UlNvVURIT0FEY3BvekxRUksvcjBUazNML2hFUDZQNkMrTlVYNEt1MVJKZ0FHdmgyMWc4a2FMRXgyNmwwazNtVk11RURNRWtDSkFVMGN4YXE3bDFEWW01cE8rL0hqUlk2cGJQMkJoWXkvdXI0N3FNZ0xORGJQRHNGS0NaSTQ4TmpWdkJRMlZwK3ErVzdNLzVUUEZTV3pMdUhJS1U0cVBQak8wYmt3emcrU0NReFRybzlSWnloTzJObUY5bDRiRnFs', + 'WmsxNE9lYzlLek1pM2NiMytuS09jV0hJeTdGWURSS3I0ODVsaHU4NE84cThKTXpQSmdvQjJGb2tGZmgyei9mWVVnekJRWHVmUHZVK3lOd0dBTkNIZ1ZFZ0wrU2JpanMzNWErZk1kYXFTNkg1SCtsMGhJdTlQdFBYSHBneS9iYXlxVDBOaFBNTkhLcW1EQ2NQRlpXa3FrbmpXRmFFSUZQL0VWRC9IVXlMMDcwSGw1N2lBbzh2RVRyc3luYS9tWTlmdmZ3dXRQV2ZSNmt1eWpqVU5zelJOSXUwWkF2WWxMUnlTMjhtb0VHUmsraDB3UEdoZy81S24rZmloQUp1SHFmcWtjN2dCZFdZQUVodndJQ3dGZEpzTklmQU9lVWFndXFqTlc3OWJHd1pIcWNT', + 'bld2c0N3djNnNGNKK1UxQ0pSdS9PbjBvU3ZjZTlNQ0l5bnpqMVI1TEtIcXZWZ20yNmNFMFJ5S1E5bGt4YzFSbmZjeCttdFZmbjdtRWlpcXhYaXZsQ1F6djllcVdWZFVuMWk0UyttTGRJZlFRb0JRR1FXOEtBMDVydVA4ZlRJeUVHMC9DQ3NFM1lKNDhhOUhGVXdXUSt4QlZQTEtaSVZhQWVNdUF0WTF1L1lZYnMvMG5DbkVieitKQks1L0tKUzlWTFdCa1pva2U0SGRQTUJLVTQvTjJiY3VEb1JicjZKTEF4N3Q2SFlQZWE5NEQrazgrcCtqVVpRUVQ4eWc2L3N5ZzRnUW9wM21DMCtFcWhJZ0duMDdsVFI1OTZhLyt4MERXdlMvVnpLcXBrQmdk', + 'Zm1oeU0yRnI2M0htb1BOdGE5dVBzRjNYd0NnWUJKcDlLVzBSSzc5KzZMdmYvamVBYkd5a0FBQnRFVUZxUkFtSUMzR2dBT3NnWlVOOUZ4R3VEMHlLd0hZalFjbm82YzF1aVA0czZaSzZrbkNYOGk4Y3lMNGVCQ1ZPQytGd0NoYjFrc2IxazlHU3A2TFdZUWFmZmxlMkFFMi9TRTg2TWNEK2U2dGZmcy9SdFAyZjhMdldNLy96SFVOU0VFSkxKQkdGT2hPWnZnams5Z2RCMThTM1NOT3RqK3Eza0tkTGYzTldVMlBXL0dQYm1uaU5Cb2hSRWdGQ3d1NVlBREQ5Ujd3RWxDQ3NIRkMrMkNlMkppa2VMeS92Vm9jc2N0K0lJeE93OEVnWkEzUkdqZE56', + 'QlBibkh2YjNJc1gxTkkwSktLY01oVFA0MGJWa1FmNmEvN1dURGZQVFNpWlkvTHh5TjBjZEtFRDFxckxXSzZtdllGcEgyRHRXSmNIMktub0lQVHQrWlFrMC9ZTVIyVlFHZTJIcFJLZ2l1SmtUSmwxUFR3ZUhzZWtSYVNkZHM1ckpCUXhZQ3dDQlp0Z2I2RktnTzVockF3QTIyanRIUXFlOTZXcytyd3Y0ZFFqb1ptZWRpSUlBd1FsSGdNOGtSRGlDcnhDOUVYSS9nVVljdzM3bE9XaXhOaTlhU2JuYmZwbkwrY3R2S3FLR0FHai9sQUlnRXZvWmNMVW5aRCtmcDcwdDFEdlkxcE00RWZnZU8yUG1BZVkrSHJVU1o5Y2RTOWowZWpSZ2o0b1VoMDBT', + 'M2pFNmdHZnZ2ejdocVZDTUFIRVlSQW1JQVgwbHg2T2RmT2JJRmNvRzhmT0VaNjkzQkhVOXpvcGRqSU1vZ0llU0RFeHpTaXN1NjFsdWd0MytJWW5wOTVHcG5UYnpSNm45RDU1LytxNDU3NlkzMmwyaDh2MEhjSDduTm8yaE5MV3NKVmJ6aS9QYmdzTkt5OXVhLzMybzNnTG4xOHF0U2J3TWxIVWo0UEdvUEVlSm5SYmZzWisrbUNrRmw2WDZRL0hlWG9kMzQzNGV2bXZPNFpMa0xvbkFhUU5Dd0dSWjI2dER3aFBIUDNlV0wwUkxUMXdlZU95bzNaTkZENjRseFhLQXdpT3pEVTJFUEFnSjErK0s5VThDSnJrcmQ2VFRuaysrejh5alJZellQMmdT', + 'ZUhYTmM5c3BLM2ZDZG9IUlR0S3d1blIyL3A2NTQ4SHh3T1NQZEVoKzI4K1Q5OU9jODNxL25BVTJzNmNjSzRpbzlMdHJ1NEpYcXBUb1lXRnhwVXdRZlNlNW9rYkpvZkVoaW5Id09ETVB2bER4eHhQZXFDTW53aVEvWUVCWWlVY3Y5R1ZsNkxENUFzM0dEemo4WkZ4ZC93UC8yOEtJb1VjU1JmNSt5Uk9ZOExHbFRhR08vOElsbCtPUWhOVWpLT1pZRXYyL0VOYis3TGFxdTMvdHdGeGg4djBlZUcyL096MnFsejlmREpLQUl0YnAzSDdDY1l5MEo5SHYydytIaVNXT1I4c0FaSXovbmNrMnZjam4rMHc4dis3K0theDlxRkRFNFRRQVlFQllpNGNi', + 'Tnl3dzF4ZXAveDBnMUV5WVNLQWgrVVAvQ04rNzlCclNkaE80TXpIWUQraGJzOC9KSHlJaDZacjMzTkNuUml2a1hlaHUrMHpCckZBelZGTW56MGZjRzlwRjZYWENtL1I4dGNBV0dEYWVyZS8vODhadlh0RXVkNUt2QVN1MC9sY3d3YW9YdGYrK0hyQTRsblB2dlNMbDkzQm95MzByeFplT0k5Znk3THYzK1JDa09NQTBDd0QxSUFiRW41dDFPVU9FeU1zNm1IdTg5dkpOaStUMkVmVyt5VHduRFh1Y0F5Z28xYW9JK2IveCt4Uk9lRDVGRG1OeHhvN3lzZWpzK1NnTTAzNUppLy8yV3VIdXRicDNsRG5KZkp1VzNucGNDWWwvSEpMclhTcVZ4NjFs', + 'OEQrellEUU1QczFEcFBNa0gvczFhUExwdk9oanFTQXk1WHJuSlIyN3B6Q1Q2NTlTYlNOSTVCTUUyQmFSbXVkZllHcC92bGwrNUFFcVA4dS9va1R2VzZQbmZPSW5XRXpGZUVJVFNwdmxEREU0OU53Nk4veW5MeUJQSlQvOFRUZTJQdlo4SWtka1dWNTkyaW4rZXR2d2lkRS9MbGcxeHhvQXJONDc1L2Q5N1d6M1luK09iRG4rSTlKUUx3T2dPbjNQMUdDaUNLVEE3MWZERWR1SHBXUStmdHAyOXIwVndQaVdJU0NBRUw1SStmN294Ync3Uzl2QUFBU1RBdFlBV01KYkFFd0dTM3FQSGJnWGU5eTIrZHYrUEFFZkl6N3JrRjMzSnVtNlBjZWEvS2Rl', + 'bFZWSjY1a3RjczAwMjROS0dVM1RMMnJPbWZnamNEQXNqNGZKdzZkYzJieklyTmZmZVJtVzZtVmtPWU13SEdpeTNMdldRQWpMRm5nc0FaaHBPUUtEdFJhZ05vSVNWb3lBOHhFNHZmZHU4ck9JUVFNWUZCNGlOWUxFSHdBV0JqQS9sWGdCTFF0NDFQWS9YMHEwZjl6azFmOFBJZXBVZlc0ZTBDelAvNGpIdjJtVzA0d1Z1eHEvZXcwWlE4Mmc0NmtuN1YzbnI4ZmRZRWVsVE1PTGlTcEhQeklLeS9qM244STh4MHhicnhPaTJadGppcVpXWk1EU1dDZEh3RFV3U1JZQlBldkNCbGZ3cjhZUkI1L0pCbkRoTjlMZFBKaG5yV0J3UE9pQXNRZ1dOZjc0', + 'QzlqMktOb2RjZFZHMGpIby96eEdIZlk2Um9yNTZvYUlyL2g4OVNCQUozaTIrQkhLZjhRUTY5NXRFbUVXZHNjUGZxdkxzZFg3eXlEdGo0ZkpBSzRMcjYyUlY2bGRjOWxwM1kxeS9TcnB1SFpYYnBJSk1INEZraVlDQ2tHQm1lT0lHREY4elY3bmU0L1FtQTFZZ3hqZ0tiZm8xOGZ2TGlzUFJOdmVmVEI2YzR0SkFpUCtBd29xRWdGQ3h1R1lnRnZmVlZ5emd6QWplMmdZOExjTVc2NmJXWTVmWDNQNjdOMGdRbVVJeEZRMlh1Mm45NFVEYUw1djg2bGJzY3FxWDhTUVMvc2lEUmNZamowZ3hUTVhRc1YwdEEzWnpZV2ZwM3RmUDNWTzN3eldGY0or', + 'V0tnRlNabHpNRXJyMFBQM044c3l4YjJYb1BIOTIvTzlVU2NpS3JqbkV0Qm5EQzdMeGpjVVNrRGZPUEg2SEJzVkJLZUpnQU94N0pwOS9WdVVFN3dsNzdJZ0NTTUN3R1JiMmdNQlJZb3BSelBKT0ljWjRyOVFHNXdkQXNXWS9UTytFNnB6dW5xeGl2M3hWVkNBWi9SVVR5Wm0vZDFXS091UGJSR1ZDTTN6c09DWHFEbGI3RXcwa2R3ejFnMTY3ZXY4c1UvOCtZdjRZNnh1bmh2Zy9JT1dJSTdOemRyVDNLSnoycWR4M3RRZDBKQTBBRXBlREs3RzBYQjhEdC9sNUQrTFpqTkFXOFlTajRqR1Z5eU5iajRyMXE5N2NuU1pWNS9jQjNHNFJVc0FzUXdX', + 'TlBic0VDWHdLdkYrOEhQUUlKZGdVNEQzWHV5ZzNXTHhtOVFMR1Q5T01TZEJtUGc1VzdYUHNzSDk3YzBhU3ZCQnJIZnhLeHJQNHNvc29TNEpmMkZzM1lRS3Y5U3Y2YzZxdlQyNmVHeC9Tb005OHpHUmF2b2I4NXhCenFvMDkvQzlwUTZYMGlLa0VuTXlFVitEZVNWck5xQStjT1A0dzlIVCt3Y2VySHpEM1ZhdHg3V3dLV2NjQzRNQTBJSCtEQ3dPQWtZdEN3Q0JiOWJzYVdxQXhrOG1QR2JuL3BiUlFIbmNDTzRCem5qMnZnT0o3Smhybk9UOTR4SHBRbWgydnI2WEM2ekF4c3V2dHoxTDl3UFI5ei9vdktmWnZMYXVQbmY3S0RYOWQ3eVpFK0h4', + 'eE9XcmVBaWx5ODVibGx0SnRMV3MvWU9VVXhzaU1UQVRTR2VoOTh2RVQ0REVNejdyc2wzZTJ6ZmQ5UFNNeCtDL2U5cCtnWXVJUXV4c3lqSUJsd0lDME9Bc0puZmo1TDFEZExnNEJPMUpjRGVRcGVRZlBpNFFoeXIrQVlxQjI5UVZGTGZYb09PVXhEUW1BY2p6Zk55bmhVMXVtYjUxdjhUeXA0Nk1MditZbjdFa1FPMkpQNStMOUp4a2FhL3VCK09tai9lazk2SmxJSVBOVFY3Tm5ISzRueERyditQMURtSEpPZklvSDR6QWZIZzhwOW04K1hWcFFEMkF5b0FDUDR4UnFMNkhTVHZweGpOUEt4bnJmaElTQllQdjdoRUM0aEFzUkUydXBCUWoreERL', + 'TmlQS3RJQ0cyUW5IajIxbksrOEg3KzVwSUFUNUNwb3ppVGlBazJWZHgxVExDNjMvVkp2dW85U3FhN1ZYNU5Bd2hqL3E3d0d2SW51ZXY0NXo5Z2Joa3RHL0xGQUhUWmIzTkNuMjV0MVhrdGJsMXFmUmJVZjY5QWtHa2VYNEZVN0wrdW1Pd3NFWTNGcjVXK2p4L0ZSMWZnaTZHQXRNa3d6YjVSODZkTkx4QzNrT0VDTkU0Q1dSQXVvSjJUNmFva3RrUVplOEVVUUFNK1JubCtrMi9YT3BrL3pIaVJIMjlBU3RCQTlIYzg4VnV6cHRnWVBKVkJxV1QrUFVlVzY0b2wxaDdNYzl3MFhvZms0a1hxdmNPZG0zSnVmakRiM1lWWkptOC9YaWs5ZDhIV2ps', + 'WFVWc3k5bjdPZmJ0d0xXOUt6c2kzVG40K0hOVDlrblFzcmtlOVAwOExGQVRXZXdjUG5QZ2JRL3ZiZnB6dzN3N2RjM0RMRjlENno3cGNIcjA5TE5nQ3BNQlloUXNkRkw0RythbSt3TEhSeU82MFdQK2NlVkErakltQXVTazhTRS94OVFxK1VIcGZvOWRCMk9DQ0FNRkY3aDhtTi9yM3lELzFONGp0ZXV2dm1EcldhQXpkYnlsNmJ5NzVmL3A2cHBHL0xSeTJ4TmNFb0Jwd3JuYkdNbXNTdnZJMXBJN0ViR1NuaWtmY2ZaNDZzZlNGMVRvYmlYR2pqY2lvNEhSU0t3REQxZlZnUVBwSEt5RGtuSGY0ZU9hWnd5VzUyeVpjVHVpelhPRHF4RnRhMnUw', + 'a2p3Z1FKaTMyZDhwcUN6Y3FuNHc0TkFmaDZGNVhVMTdXcGRBZlE3RHNqUGhMdkN4eXRnRDRSQ3BBVStIQUs2NnBNS3dibEpINlZBTzQ4VXhBNzhtUDhnQ215TmM5bzhISmhDQ01mZVM5Z2FIVk1HdXA1QjNScHkrUkxFOTZoZW15eTlObTVsNk1HdmpQeUkvMHdJZGtadWZ4ODdLTHpzMWFhOCtpMFRYNHNpTURka0tlUVR2eC8zWURTbEFhenZDUHB3NzZwK2tWQWtBZ1VnTmw0K3VjNWtmZi9lOVBka3Vhck5QMmhCTlk0ZGt4djJrZ0FDL2dWa2p0SHFoMUVZcVVMQ2FIb05UM1VPQVk4WjhvNWNLanZRZU0wZHE1bjlLNi9iRVc2OVBBeW84', + 'Q1cxbW9pZjhHdzFmc1I2aEYxVnEwejczbUZwNHAyUmxqSldxZ0JaZDI3QXA1QUhSZG5rRjlmeUJ1dEg2OGl2WDZYR1JZZk4rV0NLWmpteE14NWErOWMzQS82UFdlWndKYzl0aEpCME9pb2ZEWjhpc2lvL0MxRVp3R0s1SGg4SkovbFFOcENPT1B6OVYzUThhZE1Wd01RMTNPOEs2a3lBRUMwZ3hFZ2w3YUQxWWYxdTRmRUorQVFPZ000VS9RTU5zaEJiK1RTK0NPY0ovV0ZIZS95cGVlQTU1NkhxM2dqclBZZGMwdmgrWFFvOFhmMmVodFhLOEJrcHhVZUtiM1A1RjdkbnovOWNSbmNYSDQyR2JyeC9TQmdBWDJpOFFSbWUrZjVGWlhjYjkyWGt1', + 'Yk1FUmM2UEcyaDZ1SzlMdFBTcHNESWJvMVFsaGR0LzVuY2pBNU00d2Z1MXdoWDhORnRsa0tIbmZwWHZpZi9TdkM1UG8rTlBzTUxBSE1pQXNSVUc3T0lXQXpnaU9IakxUMHRqM1NXZ2ZMRWFzK1UrOWNja1BCcTQ1cERPTWFyWDIxeHFoTzFQVUk3MnJlcHM5MHZqSUx2YkhndmdXRDlYZmtPZnJBTGZLK0ZhbDkveGtBNjU1RUV1OFkxVEo2VjBRWi91bzlsTy9YZm5heSs5RlhodmxDNFNxdjNHMWwzMlNZMy9MLzB5TFMzQ1dzaThqUFIzM0EzVXBBZEtDNmdOQzhoQXAzUWpRNE9RdWRNYzZnV1lmZGU2bytqQWZwUGY1Nk4wcGppM3F5eDda', + 'ZTJqSGpjb2hzS1h6dlFObkJLQUVpQWNSRHVuZTh3b0cyZEk4QStXemdBQytXQ0lESURCazl4NW9wcmdPTlRQczdtVUJaUmhyZnFjcGdUWnJQQU1ERFhsSCtrdEhRaC9UNUtqL1UxUjlQSVlLWmJvUjdlREpNZmYwU2QrLzAxTXlvbndoOHZVQUpjWXh4T01pUmV2L1VrVzZtMW53MUtmeTdmVTBoUWZFT1RXQmIrQmY3d0tVcnBGOGl3ZzFPRnovbllPNmNrZUIyYmllOFZoN2VMK0E1ZjNQSnBwQnNubmRRSFJFQzBpR2JUOC9YQWV6dnlMUW5vblBFY2U1THE1ZlhWc1pQMngvOElWeWlESEZ4TndXQnhUV0JoZnBVYVRtK2lvZ1A2bFgzY3Zq', + 'K1JjNUNQbDM3T01CSkNmUmVwZDBDOC8yZTYvL2RjaDdncWsveEU0WTh2VUFGMDRLc1pRVmVwWFdmcC9DYnAvOGkwZG5hd0dJaVFIK2I2RFBTRnBSbWZLNWVEc3ZhL01lMStESkpMcEFVd3JFV3ZaaC9WT2Q0eVorOStqMGU4Wm5IKy9qQlVBVklBYkVuMUNqZFFJQkZIeVIrOXhReG1QVkUrSSsvdlhLRTExM01kQlM5N1pRek5UMWg0TllKZ2dQbkhUZm9JMUxjS0RQT3RRWlJLb2V0aHZGd256T1k3bGVsOHp6TmZYUzI2QmdJOGZpbmhTRWdieEgrYjk4ZjNuTTUrMXZnVDhLTC9mUjZwVEJiU3drTlJ0ZVgwQ3NBNkJkN2tEQXBJSlNGQS9k', + 'MDJDNmxON29tSEdKYlY0NjRJcDhjOUI0QVJnSGdVRWdMYWd0NHhYcnUvREN2UWNjOUp6bytmRWlNOGVpeG5BUWhQUDdISHpUSmR2VHZZaFFGVUNYRWpFTHNIUVNIMGZ4ZjRhWnVHSkZ0ZDRSRENQVDVydWRPTUpyTVVrUC9RWHovMjM1NzVsVjRyN3ZFRGJFMTkzZWVvalZITTYrN3YrLzFiT2VCU1c1QmJvVkpSTm51QTZGNHZIK0VBbVArOEI1T1VIU3d4NWdPZGw2bDZpWTBKUVNCeTRlWUdNSkZJeldmQXBwazZmR1c1NWRHUXRqQThkUlBQT2RjT0ZmditxQXBBbElTdjFaZmVZOEdUTUdWR2tDNEZIL1J5dGtudlBaL1Q5azU1Vkx0NDNE', + 'S3lVSHB6L0dEL2RZZmFaNDBBNFF2MFVTNm4vbVNNNGFUb0RYN2hJaGZsUlM4Q3VyZ2NYRUhQZTB3Uy9pL1gwOHhldXRGZHIxVU1LZjlFWUUvTEJ3QkZSNHRaR3BhcC8vVjlNZXg1N0x5Y2lYZVRHUXc5WDZQOElBci80aUdyK0ZBb1lJMVZFMWM4emhrNWphYWtlRjQ2eFJOSjhhSEdodlhybFhuS3QrT09mdGEyTmNuVkl3ZG9FQlNBYVJBdTRMb3BobkFacUowQS9FdGhFaDZVZ2JBZFNtKzlCaUxGcHg2eGsrNFFvK05MbU8xZjRCeHI5RWtUZUVtNnRDS0YyaHFHeEhBNWlKL25aWkUxTDlqR0U2TDFIT0hPKzFFZFc2N2RGRkg5VHQrWENn', + 'UFdyWExMT25yUys4d29iWGVlMi95K21EQkJjT0Jxd3pnY3pNNmZjQk1BZ3hxUmYvOTlxS1ZmeVJwb1hQZ3dkN0xrNWsyNEhkeHk3cmxUcisxNVRtdXYrNmhwK2s4b1hHQ1FnTWdXRWdMK0NZelN5T2tMd0pnc0ZBekxsQzFjb2Z2ZFc1MjVuckx1MG5SUk1aV2Qxdm1jMHdTS0doYmwxQ1EvMDhwTHVMWEU3NW5TNTNtR3VtZXNYYy9PNDFBeE9oVWcvajRicEE0MDRDb1Z6UXpOMTkvcE5YWGVXMlY0NmJTM2lPc2RvOWZhTVpNZDJQV2hFRUVoZ2tYeEZJU1l0Q3F2aGxzN0h6ZDBDSXBrNEUvbjBJTUIvUEtCbE53ejVKSk5QVGRUS1FDOENv', + 'RDliQWJNdUF0VXV0amk2b0hDeS9QaTJpTURvM0RqTlRmT0pneXExNnBqRGhYR3QvSFErK09RWXpuR1crMW5MRTdPZXZ5cWdKekpjek56TFNyOHVoa3V5N09kRzc4aGVpMjY5TjF0WlV3RHhqNGJwQVF3NHR5cXBNSUNlZS8xYnVnUEFJWHZVRFVjNXA3SWZJdWRWd0lMZ0V6OTVrQno1dnhidWFHY2xxWFE1QWd2ckJuMVVrZTNUeTgvek0rNS9tS0NkRXBzQjlTeW1DWUI2UTRDOGkrWlArMGg2ZG9HaCtGSWhlbzd3d0lMWkIrQ0F1T2p5TmNmYkIrdDB0ZjhURmpRZVpFc0lXRzJGNlV3QXdjTVI1OW4zMHpmV21URmErNWVKVlBMV1p1clBT', + 'bjdOMzM4TVkwRmZ4ejFWbDJVSjJqOEErV0t3SU1VMXNhaFI3Mno5VjlIaXgvM1BTN3BkZ0RBZTRPTEQ2Nk42ajVIYzd3d1ZNKzU4QXBUSkF4OGdlTXQwTnBONVoxTjU5dXovUHArZi9SZWQ4U0ZnSHFSZ1d1dk5FbGh4a3pGREZ5WHZYOEVHODRRZGkrN01LNjQvN296R2RFNC9DbmF1aUJrNnVoTHRlUWxRN3NIK2wvN25CZFFmSTlIaExObmpmQmQvcWk4UVFuamNlVUNLR25hTFAyUCt2TDI2OVh0SksvbjRaSFpUUER6R2YreXkvQlBMZC8rRFNuMjFkVllMcVBtVk9aZlpjNER4YVZZUUs5VGlCS0E5YVVJSXBmbGVaUkNpZHNsTm16dENh', + 'OS94bzEvOTU1N2ZjZ1lFMkF2b1kyNmpHb1dWb0xBZlplbG1TMVAxTE1ZNHY3SStNcktwLzBEa3ZGTE9wTWtGZzlTNm1wVCtmczdZMFZqaC8xcFdmWVRwdm5aWTVKK0ZoU2Nnb3V5QVNQOVlQUTg3QW5YblZyQ1hSZkpPV0lvb3R0dXFHVmxQNElrK0hLM3YvSG94dFZyUFJHb3ZlaUx2dXVPOEpmR3MzVGo1T0Y5TXY5azcxaXFsMnhNVko4Y0pmMDE3czBoUkdIblUvLzlGWVBnOHVBYXlRQVNvcUVzbExaelI0RzFnbzQydk5HODFPNndiY2t2Y1dLdzdQVjRKWG5MaEJPQjRyQURSd1VMcG5DREhaWUpDL3FKV2czY0RjbDZodytGSGlyR05I', + 'RTV4aFJrOEpleTlLMlAvdG5FM3Z1Q2VKQy9JK1d1dHZqVGZLSDFyL2x6L0RuWFNoZ2J3Qjdtayt3QUJucEQ5L1RDeUNBVnc4b1F5NVBpRkdINUVRdHBtMEVlSTFXeUM5b1hDYXdiUVpMWm9nREFvSkc5OUZGSGZjdVUxTmF0eHoxU0JDbGlSRWoxaWhENFFTeWRvSElpZlBrdXN4UCtTTGYxa3NQOVhvelh5cWpIZkFTUCtmeFhpWENOblhLbUE3L2wxSURyRXJZUEJ5ZmV1eUZ2bjk0aHcwZVB2MDBEZkhVSmZ2MEM0QVFvK0lRTDNoUEVNbERBeFhqZU5SSDJ1L3VTdXVobENPMTRmSkFpWU5pdGRWUVd1Ly8veTd2OW4va0NRR1NQT3hrUHBw', + 'NjFMLzREQ0ErTm45VFNwUURkelU4K3JKV3dWcW5tN1VYY1cyMjNuM1hVWTR4NUQ5d0U5R3BmOENFREZvR2hPd0xtQ2JFZ0RaMUhHWW9CblRXL1hKaTRBNUdtd0NvSFB2UzgrUE1CMGZISnVNUFpOZlJSK01DbXVId2poQlpzYnRZQUVUSDNQVGVSVWtkcnpVMHFEZTR2TW4wdkd3RTNydnJMYUpBMy8yVXVPaDBTKzE0YnBBa1k5Q2l0Zm9YUS90K284TFd0TXVQOUtzdWlqdC9jeFJVR3NmQk83QnNqdUVWajhaLzl6d1AzQUV5enRlZncrclZLL3ZIMjc5K2VQNTk2cDV5Zk13andLWUZCcXRMcDdIeS9PbVl3NVhRWEF6OEdoOGRzTFNVcVRB', + 'MDRaK0l3aHk3OHZ2cmd6L25aZXVVSDRBOEtTa1hFRzZYcHEvSGZ3VnZFcTJlVlRlQWsra3pLMTlUbmIrZnNIL0ErWGJPZm5pNnAzYTh2VUFhb1dCeHVTSjVGZTk5Yi9sbENJSHB2YVpCdkk5MGpsRDZJSVQ1SlN5Y0o2RlZOWjBLQmJJdS91Ly8vTy9QbnI3NzFKMUtJTmdNaVNFZ0p5eVlINUVyRThIWEpSR0dXL1BDMEJoUTVXQno1N0twNjN2RE42alZuaHMwRklUaGJzVXBvUlk4RXMzRko1R2xXaUlRcStkSG5zUEtLN05EUzBjLzcyUnc3WDdKL3Rycm5yclk2MFROOFhpZ05TRFlaN1B5YUJIM2QzOXJtRExQTDlKYTlOdXBEUWFRZUp0', + 'ODRVemZ2MDNFQWhnZUNnZlgzNG5NT0xzZ2FFbDlFOTFSZ2NUMzI1NTVsdmYvOWMrNC90ZW5aK2IxaVBDN2t4N2lOVk8veFJiL0Q0cEdjSDhONThsMlhPUkJaQ0oySExkK09pSytmK0F4OFQxbHM1TEVsaWVwL0V1QU9nOVJZYnBnWGJzUXNLUFZybUMwc1dvM0ZmUUtEQ2ZKTE50MHZPd09uTzAxSGRjL25ONW5wN0V6dDdXdXpPQmQxcWxIVC9vTGFJNTltK2pMdlEwcGd5NnpLdFptK2NscitBN2Q1MHNxSGNQd3IrUG5XSk5aUGRrc1NnbmN3b296ZUM1OC9waFl2L0hqVk9PNGd6TisycFhkUzc5VHpMQk4xNHlnTkZzLzZ5MzRIUTJ3N2tD', + 'UDZhZ2Mya2RRTk9helR2NDdlMUppUHhHcUhsdVNTZWxqcU9jU012d3pJUEZJRmdXYm12dDJaN0dQcWtsdFFMbysvUVFjMXh6WnJ1RE02N0g2VWkzby8wenQ5WGlnTlNic1o3UGxXeFhQUEU0N3JMdi9IY2lXdnFNM01UcFNyd3ZzUG4rK0QvSkliT1pMcVRhUDBzT0JscjJKWmNVTldWMTExbDFxcnU2ejNUUDl3MVlncHBBYVlNQmJ0b2FISGgrSlIrQXdramJOdGtBbWVRM1J6QitUSHFrZGYxd1Nsb1U4Z2dQTlZBdFpZekpjOW0wK1AwdXhUdi9aOVFENWNZZm5idCtPN0s1R21pKzhGK2t1cklTTDEvdTcwNzFFdDVqK0hkU3R0UFR2aWRp', + 'Wlc5cnh6Q0JWaDY3bHRYMEptKzkveStmci9lL0hYelhmUjJUektLVDZ1Slh2cVhGblVNNUhReHY4QzBiY3hGSnFEQzkrdjBGbzdxQlFSTHQwdVROYTJzYVl5RHdHcFJnVzBFN2d4Q28vTzhLMS8wbkxHSm9nRjNxOVNEb08wQ0k1NTJLRE9EWmJER0ZiNlQxUHNjRTRudlExS1FqSlorSml0dFVINm5vMHpZYkZjemhmaGRVVjNCYzNObGM1aCtvOTd1T2k4NWJia3JYc1c2NTI4THh3R2hOdjI3bHRyOGlETi9lYi8xTGp5c3R5TFAramxrZTA3WFp1K1hDei9mMjN2dmpLaExDamg2K1RPYVhVMGxVZWRPU2pOdG5jcjdmUGQ2MGRuL2ZmZEZn', + 'NXN5Q3MvbnFjeEU1SXNKV2VEODZaL0Zxc2RBUG9hdnpJSlJrYW1LR0tQS2RJUHFrNjhQUFF4bWY3V1J3NTl2TUhDLzVrQUZueUd1UGt1RTZsOXBNWFFBU1p1UUppd2hTK2VQT0lnOUE2S3NJdld6TWZjM2hjbHBkcWpRK1B6bjJEN1E4WFRnZU1uZGl2M2YwSFUvL2FIbnQ3bmRSN0o3bGNxOS9TQU1SYTd0OWZSYXEzdjc1N0xOWFhlYXdLYTlLU3Z5MVRQVFc4c1k4WFBXblRTanZBMlFTMW52UGt1KzRVZGFWcDRzZVFJVFYzWlY0b2RiSFAwMzN6eFB2VzN6MUxLMnM1emk2c2VKbFFGaHRvdTFIYWVZOEcvZHowQzFnZ3ZBOGRBZjZ3K1hh', + 'WHF0VWpRTXlQMVR4N1A5emlSeDNMM0oxRTI4Z284OEVHL1IxTHJzR2hPQVNzTktIZ2dzWVE4ajlIbjF6bHd3OFRYWS91djdjMy9lNzJWbDZxNDFjcjFWM0FtWXQ5eit2cFpGbi9wNDVpKzNyVHhzaTJjTGxZQzVaY2dJaDdieTBDQkIvRWtmd2FUUERyUGFsZGt4WHBkSFgwL0p0cithdkErdjNQdHBtcTdyMmNiNXBJQkF3WngvQW9UdkpBbTRJTndtRSthVmUyVlNNTjdiRmJBZEFLNnpiSXc0UXZXVUtyczRTZkdCeG5hbmRLa0kvajBleDlFKzg0SXh0dktNVWlYSlR6bmRBL1hGTURBNFBhWExpTTFLSS9FR3pUeVJmeTBlTTNkS1hnelg2', + 'SjN6TDN5OXA1SjEwVHFsN3NUUVNwdVNaNmoxODhYZ1NFZy9zK2J3S2E1TkRTRVUyRncvaC9xMUJ6OEZoODdRL3ZJY0NXL2x4ejRDbm4wRUxENS9qVEViL3M5M3d3L3I3ME85TGp1UW8wSkdQbklneXNEc0o2Y01BZ29TcTI2Q1hoOXNMQWJxa0lIeWdoT1hpWWd6K1RqYyt4T0FIVU1XZy9zczREc3Q0OXQ1SlBGZGFLUWJQU0FVTzBJTmtsODkwK1J1OEhLM2VRdmZpbE1Eby9zYXd2cnpURmxaZDJ2azNqbjBsKzM5Vm43WDB0MS92cklqOUcvUkU0K0h4d0dCdW4xYXZxTE9JWVg0ekQrZmQ5NzFKWjZSeGgxbmw2Y0pCZ1FtODFubTh6R1Mr', + 'VDRsNHl1a2JOUmg2cjE4ay9xOGt1NHFNOGRmRnBqUHQ2LzdRTHVkaEF3NFFiK3NrWCtBTC9UQkIxZ2FFZzF5cXNYWlUvQzVDQlZrT1MxN2pxU3lvaGxTMkJ3WUhtR2JHWlNjY3BWVDArcDdEVUxaU2NRaUhpSG5UVjJBRUpnbWgvbmhFOVBoOHl6MURVa1BYalRwY1p4WHlITE9TSW5LU3g4QWYraCtuOS9ZbjY2TGpyYW1tNjRPN0VZQ2ozVjdnb2JkeTNqN0h2ZWV3dzczMmZkU3dMYTlxeUNob2RhL1p0cElPK3ZCdjFqa25oMkh6UG5leThMdUQxbGNkdFRGK2EvZTFwY1Y0dmpibjk1M09RWUpXZmFNdHpHaTFCcnBBNllpZEp2NFVaVisy', + 'N2JsZnVJSCtTcFFjeWtlT0M3MXBLMjhIZVY4Qkg3YzdJd3p4cWhqanRwU1lTZEg5N2hzQjdidUN2V01TNFFoRytjK3pVRjc2ZXJnbnB6ZWlCQU1UeXhhSkJtdHpYSDMwNzIvYmFQeXA0M09tVjNVYVBlTStXS3dQVFlkek5HSENSeEdSeC9kOS9VdTQ4eEJMdnRFOUxhbk5BZ21iZnk1Smh5MmtHU1RFWTRHTy9Ra29ScXgzNENscnU2eTN0dDVMd2tkYnliazV4ejdSODhPMk8yVHgzQlk3QVlQVVFnTFlGbDRXUVVBaXhEWVZHTWY3eS96Rmt1eDZ4blJhWEhiR2I2UHZTcEpNZEFUUG9rczduNEJ4RGxTRG51ZFk4MkxQK3JlRGtwTEZqblNh', + 'Nnl2bkJOZjFpcUZTa1FtaklLTURQWnpodXo1WC96UlVtdWxodWZYcEptZjd2R1BMRTBXcXJQbSs0dVBiLzkzZ054Tjg4c3NOTE5MNEZyejZKNjJ3amV4am5WNXFwS1E2WmFKOWpZTnBKeGM5eGxteHN2cmczUnZ5ZnA2UnpSMkVaSzlWWlFjSy9GQUhIT3FvU1VWZmdBQ3lSdjFmYk9HM0x4SFIxZ082MDJxKytNeW44L0VpTC8rNmo3Z0VpQlY4ME94UnBxUUVqUWZleWNRc3RkRXZoclh2QXd4cmViWXZUMTlzTkhNOG1zbHkwVmZueWdQWlM2elpuRXFDU3hjMjU2NzgzYVg5OGZEZHNjVDlaZVhySm1mN3ZHUExFMG1xclAyKzRjSWI1NW0r', + 'Ym0vLzh5eHRYbnA1UUZST3VLZVJuZ2tJSFF6Z0lMNE1HWFNzQ1EzUWRDUmE0VW5GdnVmZTdrZ3hIVXpySWhOR1FDSWRWeFVCZkV5UElPK243VVJ6LzVQcFRScjh4dVJOUjdDVlZLQ2xCL05UMDdkeXpXaWI5R0FCVVo5d0x5M2ZUaEZTaFFMeHYvNXU0Y3FRRWluckp1ZXNaMTJ3NHo2MHEyeExRMmtGaVlqUHNXVjhqbFk0WmZmdUREaUF6TUg3NGZYeUJwdm5UNzlaK2NadHp6cjVSQlZKaFA4Qmp0TmVTVThvQXIwclV0aFRibE93MHlEZER4L3ROdTRtdkgrdWd1dTRLNjNhOHZVQWVvbXlZN3IxcGt0SGI1L3g0YkFGcDBZKzROZzhCb3RR', + 'ay9na0I5UGc2eG1DT2VaU1l5dGVmaVpjaENUZEpPNTNyeFIwUXJpQkFUOGkwekJ6QWt0d3lHMjFLaXNMOWhZVjgvK3ZIZlNqRk1GZVlpMy9rNmJTRktGSzJoWEZjcnVuNyt6UlJHak5tb254RkNhRVZCMGl2QUdOSUhsWkRrZGw0VG1lSlE5cGtOOUtkR2ZRTWVPMjBxc3l6VDlBZnMySUVIMHhnOWF5ZFBFMzRwV05aQm0zOEpsdzhDTC9sL21TVFpiWVlFNnhkQXYrSTVjd2tMNG42aGkvNzZNaTc4UzQ3V1RyYWU5QlhodmxDNGdxclgyeDRNTTAyanpmLzEzdGg3bkg2citTekJNd1RNR1NrRlFNQ2xIc0NJZFNmaHFKYXFVMVYremhPVXRL', + 'a1Y5RUsrMmF2ZmZZa3RsdUJOWVo2UzlFaTFIcFRBM0VkNncvMi82Y242RnNwOXo1bGVLQVRyaTlSb2FxZWs2RENpZ0VWNG5xVXJmOCtKTlhFOEVqMU5MTTRVdGljaGpKUWV5NGV6Z1ZJK3VVYVlFVzB5NC9ZejZxejNaVDRuUVNUcXBZdzlrRTlaNWN4RExDVUlEL1J5R0FOekFEbTlZbXcwbHdyeGVlUG44akpyR1N6bEJUQkh1N2RMWlBUUy9nc1VzVytHbHl4cy90bkUvMzJXKzcvb3I3N082aUpJN2o0YlpQWlprRXJoWUFtZmR2dmV3cWxpZWVDYmwvOE94WklGem5Mdk1BWkNSV2JheGwvSzVITkQ1VXZtT2xEbXRnRWIvQ0oyTWRKSDhz', + 'bWEwWmc4ZTlJQlhDbHJpMWRpZmc4ditGSGk0UTl0REZjK3pWQXdmeTZaa0xHZHV5RW5ZZnBRZDBDU1podFhpb2dnZ0FCYVJEc2hqY3JteUt1TFlaUXBLWExuVUErL1J4N054NWlWQmtQeVNTT0FnTVNoMitQMEo1VFpTcW9zMUg5UmFvY3lxb0I4WDFBMXRFc0Z0NXBRaURHZTJHZ0pYUy9kYTBCd0NXNVBWb1QrYlZsWWR1dnA5S2Y4bG11UE52cm1teVBpdmx0VTJSNDdCSUd3S2dKQzAvbjUvL3FDMkV5ZXpwK2M0VkFqTThSdnBQSStUMUt0a0hrMW9PM291bW5jOTZiVXljRjMveEI1dFZtdGRkL2U2SnYxZXhYbE1aOCtQMVFrak1MckZU', + 'dit3WkVaeVhuVUJ4OTZZSUdWc2FVd1RpZlc3L0pPa1RYZzBxYWpKQlZCbElMdmRBNTIzYmpwdGREOE5TdTBvV3NDMWU1NElJenc1cFg0SzZ0cmVwQjhEa2huU1NoTVoxK2NJaytmQXdOd2g5S0IwalBIZ1dCaHFCNlB5enhXeDNZRGdXOG5MMm96bThQcGdlcTNnRytVQzhQZUduK1pEUm1OOTlkUDdxbTN2b3huZmZkQjhDSC9SOHRBcDVKekZPQVBSVzM5MC9tMnJuN0hvaHlMODhpMFZuell6MGhHNThDblI2bTAyUzZucUkvVDFsRzE5UXUxWi9KNXhFcm14WG9UNHQreUpLZExaZGMwb3d4QzYzTitDU2I2RmdUT3lmQndFaTRvalB1elBQ', + 'bmJKZjJCdFhhUG5wRE9xVkpkTElpd3hadGlaQkd2dXNHbXJOc3VEU0dBZExkalBvUTd2dGo4VHV1QmpZZFJIM1VLNVJSbFJDeFFTaTdSN2RHZkxqQStQcEEwdnE3Skk3OUlEUEM1OUZObUIzNDJOZnF1SjhEdXpockZmSXFWNnJKZGNVN0xhZHpESDJpV25mcnVyYnU2eUpLOWo0WlZYcGZFTU9BbXhZZWZkZlBHZmZmVUsxWGRSeHZMeTZvS2JhaWhqOG5RU0hqNkJ4VEJIN1hPVm9KUThCTjY1L2tDcGFZclRhbkVWRkVFeTNIaHl4WVZpekJYRHlIRVRLYnZSc3htV0ZLSFhYM2pjY0w4MnFTUG5TWlNJQS9iVytHNHBqczhxR1BWTjRRNEVO', + 'V3o4Z2lMUGxVZWdCdkowU1hlRmlPOVpvRnYvY3hHZkNkMUlpSjFmQUpTWUVJWUpiQkJ4akNjQW5oZkt2TGdoL2Vjc3Jkd245NlZxVS9BYnpvdks4eE1wRzI0d21WVmNjTzVROCs4S0YxbDA1MjJsK3VyekpjY1ZOWlArckxtcTJQaXZsQzBpUktyZDdzQzIvdnZtL3E2ZmVlcy9HTE4zM0Z0ekc2K2ZoZWhpVm5sc0tPeFBJOUtwcFF6NmQ0Ky9TejJaem5icVdpME50bVI3SjhUcERPTmpGQzJuMXdRR2NPQSt6Uks5QTUwRHk4a1AzSFYzL3ZoZml6akk0N0lkYlpVUUdIeUtubDdWbWVGSGp1RUw2bCtiV1ZVOUtIYnlsTVRlRitIWFd4UGVz', + 'QjllK2RybGhRUkRsMTlXMHpmZ0tjQlg5VGhNSUZ2eWhnRUZiN1MxaS9lQmtyNnRRdTdsVEUrVEhJNm41dlVHRSs1d1Vsa0hJdTNFL2ljbSsvcnRJL2d2WWNhZnMzdFQwL0xCd0ZoKzNiMTF1SyswZXEvdnU2KzFSQnJiejVuWGsrNTVpYWFCRjVFUkhuQTFta1hQSTlRUzJvZURHZGNsL3BlQmRuS05WcE1EL0MraFNOTG1TbmVjZExud0JJRFRNZHRoZ2lQN1Y5SGJXL20vdStKNVNDZy91dzRpOEFtWWtDTVh4TEw5SWEySGNtMFZVTHl5dzd2ME5xLzV2aFVZbFlYa0M0K1hjTC9pS0N3enRSOGNtSVgybDVXTVpObmVGZFF2MW1rMU9oS3R6', + 'QlNDR3I1enR6YWFLZ0lDWHVTNmpxaXpVNTB2K2pkQzlPRDREZXEyV0E1TlNwdi9ZcStJSGxSU1BzUGtybk9Wam5qdThKYzYrdXI0djI2L3NRcS92VjNOTU1yakpPOWo0WWh3SmJZaHlzZTQ5QWFDVCtEZ1lMODZNMGpJZDJBTm1aeEFlYXNKSkJoRG5VMkxObVl5Q2gwSDkxazlyNG40R3o0RFEwUU4yK1NJUG4yaGtSK2FGSTMvOWVMSVUzZjlQajgxZkFqdlNOK0lUakFPTDNLZUdwT1VtYTJ3NTFMTEZJTXRHMkRHWU4zOXBIVkdPTG5WMnBocWRXVEdBcEhaTVNXdTRGTDN6N1JzQm5UZmNwVlIxaGJCaTUyQXErc2FmbjM5c1Z5aTNxL1pG', + 'eURudlFiK3dwRm5Rb21tay9kNjRPNERGeTNlMXZvSFpab0xTWDZiMlo2NzhpMjZ4NHpHVjQ4WDlaRHdkTW1pK1BpdmxDMHpSS2tkN3NEVS91dnV2Myt2UFBNUWRsbC82cTVTbmk0blpFNmNGdjVrN2VmeVVFdERGdWJ0S2lyejdFVFhQelVPU3RreElxRDd4WlhTcEYyenRVNHhYMlFjSmM5TWlJbGVyNjF4cjRZTkpNV1orbm1sRyt3QkJ5MFlWekdPR0I2bVJTeUZaZEdQL1c2aHU3UWE1UXpxTXdBdzJzYVVjdzU3S28wMzJRQW8rY1R3MEtIY2F2eERmOUVBNVJuNURGQjV2R01JVWVOejdVU2hFZEtvWmdXRmpwaUR1VVV1N3F4WXZpWTEv', + 'ekZ0RHQvTGFiT0x6ZGNBSGpaU1pqNWZKQUtZczJhN1N2MVJIM1gvL2RSWHZQMkhGdmVoQm5NTmZVVWZqNFVWT2N5WlBtT1hkZUZmeGhMOXZ5eitpK0I3TVoyS0lTUytMaE01Y0N3OEM1V3FYTXhjOFEvc2J2VWNwbjFoNFc0MmlySDlIaXhZeHBzMmxDWHFLMWN3cnc0NllUb1ZSNlZ6blM4cy9CcmdrV01OcGJMdUdsbUFUQThubzU4am9pM2ZzUkwyT1hkcTRRZ0JHMHFicGdNcEJBNkVHd3hNR3g4VW9mcXBML2l3cmk2enFnZDFxSWtablVTQitTMXhlYmdlaWFLWlYvYmJlNCtqZGkzOWROaTRPMTM5ZFNSamo1KzVqNGJwQVBjYzV5dWVV', + 'eDgrZGZaLzM1K2V1UktELzdUNE9yTkx2eHVhVHRoN0wyZU5zZTd2bzdsS1c1OXJkaDN5NXhxc09aNHF6NUZIS0lTaVFRU2E5MkYxaEpNSUV0U0VTbUkwN3NLMHpsekhVcjlqK0l0ejIvcm5mSTJjb1ppVG5YcVptL3BHeEE2UkJWdXVVMWF0UDhiekVCRjlET0dVQlRIdlYrOXdKdXN5bjh4eVg0eS9ySTIxc29TRGtFSVNINTNudFBQYVFmdkhyQnFOK0lnQm96RERVUFhwSmNjM3crRFgzN3JjaUlMaTlsOWV1VnZVMW5UNXQ0aDFFbkdURVhUS1NNT2YwQmwvL2FIU1AzMFFpWHNoK3VUVGRNbWZyUGl2bENZaHg2amQ3Y3JVZGNmZFA1SnYv', + 'OHdBVi95enp4REJ5ZitHYlZMZlh1cHpOWDg5eTkxWThUemxVUHE3VkFLRDdvRUwzeW8wM0E2NHpEK055M2k1TEJWZUV1QldES1RjSWNkV0VCNzMyVXNKMy9VTXlvWDJQU3FBTmxGQVpVYXRnRTBEcXJZMllWY1BzZVpROERtblRCOHdwVU1RY05IYlc3SlBmQVpYdit1TVVFNDdTK1FmRHpnQWpIUk00bVkyTFJ1K0oyazRubXBTQ3g4MVlmcXAxSW5UODd1cEkzL1lnaWNFdGozV25wdkc4QXVsc0swcFQrQXpwb0xmZTdmYk8rL050ZWg3M1YwOWtmNC91QXlZVnhrZDBGNzRpM0NDUllOOVdGODZqT1BVazB2dG5YMGh1TFd0TmhybXg5M2kv', + 'dk1Dem9iK2V1Ynd1amJrZ1pxRExpL0IveUxvM3FmM0NtcUo1eHlQU1lvRHFrL0pRR0pTbmhXYW5vcFFIU2ErRGlCMjNPQXF1d2Q0Z25hVEkrTlBuRzlHdmRLdnNTU0VKSW92cjIvdFJhck53L3Z5Z2crSk45L3VJL1ZCNnZlSHhsYTUxSmF3cFdoTzhjN2hWN2xtV29lRml1SDBjNU12bnk5WGliR2VLOE82OTVyMFNXSkNuL1B4OGZ3WFgzRXhXcjN5ZnBZOTRnKzFlejk1QVg3Mkp2empyaXZqdGlhcVovU01zUVlHcjIxZEJhcS84OWVZOTdudU1hTzV2QXgrbTcvbExnMytMVDgvWmN3NlgxbXB4Zi91SkVmSmluUERoN0krZFA5M2E0L1pu', + 'YlV1Z2FEYTRCc1BrYnNHRnpqazlTQ3daaU1OekoyMlN4d21ReHFOK3U2cjgwVnJwcEJRVHNLQUxXWDNzQVZEZTMvN2Y2b1JSbDgzaHg3em0zNzdJRzZQdkM1bHU4RmZibmdNRkVFVlRpVXYwMVJZcHUwVm9MWmkwTnN6TDFaUUdMR2Z3R0xqOXI1aXJmclR5TGhmZ3JQak00QzBMSCtzcFUvUnZobjVpcGMyOFFoanQvN1puTDU1ODJxVWUvdGF1aDE0V1RNNkh4M2lPUjdJNGFNclRiWmVicEs1eUxRUDdEWTFMRjNQYnM3M0IvZmRrM1JmNUNSbmNoekNpaDRYZUVXQ2pKTjNDVGpjS1dQSEVIWUNRNXdoS2FSOFNCWmtWZ3B1VWVEb0tnMGgx', + 'aEloUWc0Z2k2NHNBOFBJT2txditKaTVJOGlCQ2ZvaDk1ei9oNDE1Q3o1M0ttNHJMZ2t6V3NvOGhWQXU2NlR0bGljcHVTZXMxWjBCQWc3MDg1TmZ1VjVHcWZ3OVpxa3BVWG9XcC9kWndsc3VxT3RrbWhLN0hESnUrM29ndk1jK25tTHZTL25ZSU9nL2tocXFYNUVRTStYQ2dFU01DMitXWWhYUmpDREhXYjJ4eG00T0VQTUxPRjl6VTdMRUh5WWFkTGovZ3UwZnlyNHpZeDVrWTBSb04wWGNaSE90NFRNYzh4ckF0bXZob1Q1UUg1SG5YWEVoMHFiYytJM0xOVmZPcHArMEhWM3drcUd2b2x1K2JaRUlsOVE3ZWp6WHhodnBTZHUwVHRsNWZ1UkdE', + 'RGhJQjV0cE9ZWXg1ZHRMZXNhcSs4TDFReTUzS1lqTmJLOWxPeDFRSGxZYlhwZ21aTTd0blAzYjc5cEszTDkwdVhpcW44YkNQazRhWGFGRGg1S2JiVTFzNkREN0ZWNzlxMGtTTjhpVkVkY2hoc2lsVEpxTXllMFYxQ3Y4THBwZkl0ZmZIVzg3UW5UMisraDdiSXBxMzRBWU0rWENnQVNjTndLYitmVnZWaDYrWkM5ZGVPei9wTHhKT2xPeFExQ1NrUDU2aG1Nc01tZVdMNlRwYS90dGR2MStVT0lhTHY1MDVnZ21qK3dkY2RNQ3JvakVsT204ZmtlWHFVQ2dkQmtkSy9BUUZzcUZNNFJLZ3NkNHAxU1RQandteWN5QmlmbzgvcU5iSEZOQjlITXUz', + 'MmlpTnFucG5qYkljaFdsN1NrUFBYWkM1OGIxVis3YUkvb2JRRUQxN1ZKaThQMWFRdDNNOS9pbm5VUmc1OWM4S1ltSEFnQVF6MDRPR28rRmZQYW1aSjl0M1lBcCtRS2l1ZXduNHR2eVJTcEpJMlNCcWNMUk5pc0FOaW9mTFRwYVVzYXZrQVE4K29IZjArMC9mT25kYmRmc2JkRjF4MDQwUEVEYkU0RW9GOXlPS1NFSzNmYlB4WnIrUDZYZUQ0MnB3dEtsWlBLZVArSzNHamlQbWh3SWFFNE1oa0QxVFZsVXJqUHRTOTNXcHZ0WEZjK3hqSTYwOWpyNHlzaUdodW1maU1VNVNZRzVNY2g2ekdPT0ErQ2ZJeG9nN0lNYk1EMUxaeVFWa3dOdTl4RVVB', + 'Ti9TdGxmRzMxU1B5ZkJ6MzhFYVNlUlhmdU9YbTBLREpidW1NOURUOFBjSFhmMUwvZmhvUy81eEt4V1lBNVVmQS9Qclo0OXkzbkpiUVpYQ2NZMUkzWVRMVmtEU3kzU1YrZXVKK1EybFgxRFZUdEZSV0pueTNHd2xQUnBLa2Y0clBTOU1wVVNxbHIweVRwQzU2RTFRdysvV0pvekwrZm9MTCtkZjUyZEZXeDE4RVBHUExFNEVJRjk2ZUxRQXJ1OEg4eFd6ZjN6cjdVY3ZmalM2ejN3TDFndTVIQ3ozMmVWNmtRUzNmdkk2V0I0L0lWYlM5eG9RU0J3Rm81RHZzaWw2U2p2dERGR1RDQnFjY1pGSTY0VEl2ai83YVhVS2tWVlphY29hTlpJb0ptT1BS', + 'NFQ5U1FFOUxSNHBTL3I2c3h4Z2tJRVREbDg0S1lKTmxFTXkrZGFNUjN5alZMVkhYSDVnLzhqK2thT21FUzgxRzRBallrK1kwWVB1TG1idTVta2pkMXBQUDRERWdPTDc4VTN3KzlNRXhpRTFOYk8zellPb2c2cjB6SmY5TXVvMlp0NW9GeVdHMVk5MXRMeTZJOVZnTDBEbkIyNTBMOW83bDhGR1JkZVZOTWJmbjlDS0NYaHZsQ0VDVWlnY3JIYUl4WE9Bck9iMy9WWEd6Q1p4OFUxcUNUNmhEZVdCTHFJQnRoZTI3Wk9DVGZUY0FQUU52Q2tUSXZBaEIwSzdmWFZFRmdibWZlUW5HaXRBeUlpbGRoc1R2UGlZNXVmU0ZWWGJOenZrWWlkdmFURkg4', + 'dGFQZTJRY1g2Tit6VWNLRnMvQ28wYnRuUXF6YVFjNmVjZGxOdXovUmx0UC9LQjRFeU1wNnZaekhxWTQxZzF3K09FSklBSnRXcTlzbEtEUXpoT2pIZU5rbkNQZVVMMkpBSHkvbHRUY3BVd0Q1UjRVRlpPREpZUzB6RzZjVHc3b2xMR1RPWXhkdjY5bEEwMXJFTzg3OUU5OHo4amV0NjY5Tnl0bXI1RVc4K1hDZ0hTTUN3dUdZalhaTXkzdnR6OVhmdlBEaGRRTXhtY2RWMVZxT2xUeHdvQW16ZDBhS1lXRy9FNVN2NXYvUzlrNE1KbGJGZUJnbVVXZWFkb1ZsVksxaUFMRVIwZ1JnWkE0aGxSaHJ5enhWdmxXUDlOeFJSRWNvL01MVGhoMENJemY0', + 'QTZZVjdGUW1xUUNsK3VYNTAzVVRpZVBkM2VrUWMvMXEvK3JFYSt6ZGRFRjlIdHdFTmsxTGhwVGNWWHJzRDhJSERHYzZ6WUlkUnl0a0FBaEFaRUl4ZXNjMmpMdWxteE5Deit6RGs4andsZGZwL1JTSHpuVDZhYm00TXB0aUd1WFlURGhkeEFMLzVYYUxpdTBDV2xqSjBwUG5VNk9sL3MvcFZ3dlAwQjAvZm9LN0JhQkZ0TVpCUEVQTEVnQ1FMbWh0WU54RGZUTzdZUDUveGsrdTByTU51UFJ6MlVIT05oNm1KUU0xS05xMVYwMlp4REJvZVJXMERLUW1vT3VKclEzcjFpMUE1OEJoQ1lIc2twdlVzTkNYQW53ZzZNdG5LRUlET3VtRVJ4REttdFRJ', + 'RlR5ZXhTY2QzdFh4bmVqSmxFaVF3NlIrRTFJTTF6RTcrMURnL3UvenRaZnpzSWQzdjVBVCtjYkZReXpOV3daUC9sb1RUT050OEZoS1NOVXJNbklxUCtTMi9JMVNTTFhVay9RVjg5bVMzRGdreVl1WDdScXRrUnk1NExwOXhDZEFUV0hFZlpIa1BLSjBrb2FhZlNjZTE3bFZoVnp2OXlxUkJYbkx3SFlQRXRoM2pFQ0ovYUtSMzRTM3YwRG9ZWUtaNmxPMzhmZkg2ZWNmTUVhSDdnUnFaK2E4c1FRR29HUlpzREFlZHYvTUJhMk9NZkV0NDhvQ0wxMnBKQTlwN3JJUVVJK05EY3IwckV6TVdDaDEyYmlqNGpjekoxS1FMQXBWcDFScm5iZjFsaE1k', + 'aFRuSHkxNE1xQXhobGNIbC9saEQ0WTI3TE1EYWhvV0FSRWdJb28rT1hIYkMzaHM0VDNKMGlQVlQ3aldTa1NBRkhkMWJqZ0VXSDZpV2VoQ08rY0xFVCsvUEVmMlREVy9HbmtlY0pxYTJnc2RJZGlyZDNlU2ZzUVptdWtNNFBJQ01GSkRXazBKOG1Ma0xUMU9mMVFQdHM5cXRaM012bXdOcnhXdWVodnNoYUFPQkhCTjVNUGhTenl1ZjNiSlJSeHVEM3ZCWTc2dWpsWFdTdTlhYUloelhSdjVoMnM5SEVhNW43RjM5L2V0VGxCOThiM3F2Y2ZUZHJvR3dxK2ZKZ0JpcWVidnhKOGw0YTVEaDhaMWZKWFVYc2pxOFowRk0vTDBCZFZHc3BLSkVsSmtp', + 'bStCZEdpVHlGQXk4SWNCYjdCcUhoWEFjdklicXpLbUVkQnU0enNEOXhsd08rRE16VW1VaG9meVR0UHRKMDF4Q01YRHptSWJaRkVRaWV5SHIrU2NZQW5NTjFVVG1JS01nUC81RFlLb2JqMXVWQStMazRWZGFrUHpNSUJYUHpRa05vR3FkQ2FUcFFaUFF1bWlMWUthVDU1QVZrelpxRWNveUQxTlUreGpHU1ptK1hrVERlTW5rLzdvNDQrMFhpdjdqdEZlRXBnZTJCUUpaSFVtOTlJSVhQZCszaGFZR3M4aUp1UVNzMXNFKzcxcXMyVzdhSG1INFBpRi9UeUlKbTFsOUR3cWw2TzB2VTlOQlZuV05SNnRMUXRxdDZURlpOa1VtelpmSFM0Y1ladEcy', + 'ZGhKNjNQeG9mclFHekxxYjkvWG56OEgvKzY2NjB5cGZDRjUvcUJMRWtDV1I5dS9PSTBsM1BNOVpnQWVmbUhDY25qREJjeUJIOHhvcER3RURXVGlZdzFjTThQRURFTTN4ZTMwamtSMTRYSFAxTjloa3dGMFRna0ZIczdCVGZxTnRSdFdQSkN5QUNrR0o2b3JpaC8ydVNjWmI3WGgxWmJmSU9rUDdXMTNXRlpuVU8rZzdQR1BBZzEycFRTdVRPaWh3UDhNTUxMa2dtay8rVVZ1M1Jjb1AyalM4cGk0MURrNEk4Q2h1ZTQ0clJPUUpYZGtKMFhWeXJtWkxIQnRQT2o0Nis4SUVzK1AzSGx4NTR5YXVpam5yU2JRMWQ2eVZUc095KzRUaEljSnhFUnhT', + 'YmlYSEdaTTFEd3VsZFNGYXdSNGM0dXFURTY1MC9pUkVmMW9ucTUzMHhXQ3c5V2lvK3hMbEx2THNuMlJLbVRPMU05bEl4QUpUMmM0dldGNUw5cnJaSDd1aVhPeTVGZFF6NzFWMDNUWmFtcHhQaWpGQ040eEkzbTI3ajdTNHk1T1RmZWcvMlYwY0FrQjAzMC94bE1MbHFDK2trL0hKaFlCTkhNWDZoODVXWmlTLzhQK1E4REdVYkF1Q29GaFpVcUE5RFNQR1JJTWJWYWpRT01CU3dtY0sxRHhuWWEzS2xhTDdIdHdjWVhZcnUrZmtLdEVZU0VvbWVTUVRpN2dNSWxidjZwQ3dkSTE5SDNDcHNrSENnWmNTaWpZTVJyTkNlbjNpaEhpOUt0eEpwaUhF', + 'Y2hOR1pJd25HK0dvRUFzQTgxYTJhZHNwT0JoUHF6cVlYZGxoUmlSOEJWSzc0UmF4NGpIaml6TzhhVENmbU42b1MzeGR1UmFNdzBWK3JhUktMU2NGcCt3TlpRbjlYNTk1QVExUWFHVDJtY1FmcEl3UGg4WHRyOUR0VXFyOXRQajRPRjJqT25BUGtiVEh6V0xKL1BFTjAzaEJ5QWJiVG1oWnFUS1BjcDg5SlQ3bWt2QlRiMXUwLzhodW00MURkTmh6MzN1dU4rM0hnUjBmSmpGQ2k0ai9YZmVxL2xZYmREUS91VXZTSHVnQnh5ZXlVWUd5V2Z4blhVc0F4VWVJQURSNlhzTENqV1VvVXg0MXB3dm5pUTFKL0xGQVlLWSt6Q2VnYWtjYVFCekFXL1Jp', + 'bEY1V0p4TVRFTFNXM1R0RVFtWERJRGVzSXExRVI4Tk9zTFVVcjVySkkyT2lNaHRkZ0xxaVl6SWhhRUVJRTFwekNaL0l2TzF3TmVDcndJdE9QVC90bURRNThFTVVyQnZqUGxYSzRUT1FKdm5xTExyNjNxUmpKd250elJTVDdkOUwxYnZXQzVCdmxXRVNSZ1Jpa0lTUzBUM1JTSmU4S2M1Wks2dXZQSGhtKytQaW03N3pxbjBPRXQrd3JDMEhTRGUxb0lpQ1VPb0UyWmdsR0xPU29jTXJvQ2FEUXdMVFRta1FHeUVGSEJMLzlwT2x4V0hVQzNBSVpEV2ZiZ0ppU0p2S1ZOeVkreVN3czFEQ2ZNRHQzTlVwVG1HKzVqVVdlb0xJZGRiamNPcDZtdkxL', + 'M3pFWm1iL3ZKakZDN0JsSUx2ZFR5LzV2bVhudEhpTUJlSXZZVHdzdEVnN2RSN3FZMzhNNVU2eUREd3dDTWVTYzZjSXh6b0ZIeEVWNFBMaXdSK3NEdHJpRW5IYW10dVFQajhIbUVhMmVQZHdkVTh4SGFETGFTakFXSGE0QUxHRXVKUENBOW43WllhTEpvSjJKYUNJRGZrb0JiYXpJSmlMV015WjBpSlJ6V2t5TzBnVkVJMk1pZHBEYlVRY0tJVytmbHMwUjNrZ0NpNVcxWjBISm1qeE1vcU5hbFpUak5hajBGRXpZTW9SK0VrUjUvU1ViV3ZTamlGYkhyV0tpTTc5MUt5RXJ2V3h5NXhpUkd4UHZDS2xNRUxubEdQeTRMSzFub2YraU9BSElDa1ox', + 'QWpXUlE3QjZGTTN5WmZPQVdHbzd2KzN6akR5U2d2N25qOTl1ejNqdWpkRHduRDdqYUlnUjR0VVg2N0daelR1Mzdlb09BWUtkM3M2OWFKZ2lUakV4RTh4TmNLWkxxa1FZZlNKcG9UVVZ6R05IN1BOcDU1RGRjOS9EZE5oTjdZZjJDa3h4Mmd0UEppUmEvRFlnaklBTGxacjdoMTc1MHRSODR4bVFseU5DNllnZmdKQnRveS93N0g5YlYxUlo1bkhPWk15WW83ckpqT01BYVNQY2dOQTFRd2ZlTGdPWlN0RWdsUGt6SkRZYVhPVmFla3BKREJRQW5tTEM5UXZIMUV5aUl4Z0pDcDAwZklFOGFCR3k1Uk5STjBRRkRURFdNYUxsRWJpbk1mRlpXTDJF', + 'Yk45OWhYZHV4MHhtYWx0b05HVFhyck9LeW90MWJUZURRQUozVzNQSkkyUTdQcEYyWVNidFFYdW45ZlNYb2JpTVh0N3RHUTVBUk04dWlpVHlvenF6MmZNNmt5bVZQTjNzazBPckhabm1FUFhyV3RpUDN1RklEaTNuMmxQdk9CN2QvcTZaMitFMU9NS0lCR2Y1YjdhS3lxZjJCdENoRGRDT1JRU25vZVdHaGdHazBKQ3ZQS3pBVnM1a0tCSzZrRFN1SkZpc1dIbEVPSktROTE4V1RZVDArUDV6dlAvM0xHT1QzeTRMLzJxeGwvdXkranE2bjljZWZqS2lEaUFtemJaYzJnNHdwVExrdTFLSVlCWTRDVnlzcHR4ZzdGMkJXVjQ3aWVSKzh5V1c4OFhO', + 'Y2YyVkdyamFyeGZsQVdZTkMweWJ6NldOdWZvL2lCMmYyRDhoWkJ1ZUFOMlI2UENqUFFmUkh6bjFqL2hEanhCZVFqOGsxc0hqSTBQaHJ1Qm9UNkVrTTNWYUhzT3RmT3ZMWGhlN1VQeU15SVJ6aU1OTlZJdUcyWFp5R0FDbDZJb2hwc2lFMGpsWlN4SHpFbG5oVEVqUGovWElUQUFwSWlNMUlmL2NBRHZYVTNkckdlREpnN1NTc1pKR1kyaTZlbWdxVUxvZkErZ0JNTk1BbkpOV0JDZm1KanBWeFVkUGdPV0ZSTG1QVVhuSnpQd1BTU3lnVkdSc1BUWGtPaC9LZ3VNbnVpaVVBVldTQVRueU5iYzB6Z2dpeUN3bU5wbG43Ui9QNEtnWndBQ3A5VHhD', + 'RDhwcXZ5SDJrZ1lhWDJ0bnFIM0RFTUgvcStGeDV6MVBHU0d6SjF3VWJJZG1oeVN4ZzYxYWl0VWU4R1BDS1NGVDUyRkxObVpGVjc0alZTWmY0OFEyN0xhaE12LzI1ZUx6a0xBSEcvWWJ2NVYxNVBORklzSFVpNDgrUjU2UndwU0t5ekY2RmV0eko2RlVJL2E2MmRvcENSRXJ2RTE2WENXOXhjNTVnTUNOc3YyOHpZY1Y5WjZ4ODNlWlhMeWROYzFvMHVnbUI5TE1GQjhwZitqVEFkQm44NVFBejVUZWMrS0hIVzFNWUFadzFySlRwSlpxVmRKSklHUWdNVTI2c1E3Z2RYc3hyUGlGSXpMWmcyVXlkY0tJWnowb205SVhIUkdxY2FOcG80MTlCN2Nr', + 'Uzd6QlgwajBXTit6OWhrRkdJelpiWEs4d0xwWHBJQnpHcmRYRjUyRGFvRUo1QVY4ZHNpSzVRdTRFYzZlVlFsZ1RpRUk0SDJRU0VESS9OODU1K1lnRVhVMURabVlxdkQ5QlhWZ3czdlF6YkpRWllZY0NzSklwVUJYaWxNbEJiQzg4MWJvWnp4b3F0M0hwNEt4a0NBNXIyNklyRnV0RjIraVpNYWFXV0d0czJobjZhTTBYclBjaXUvMG5LTDMyQWlYLzdkMkJOL2RkQk1STHN0YmpBMy9TQ2JFNENXUjhhN0oxcXhIZkxwN3VxZS9WdlNTN2pEWmRPMzRFSmxubmtJMCs4Q1FId09FOFRZOUpDZjZGMjFlVlBDbmlpQjd5UjlmN2xRYWtxeUtoOUNx', + 'czhGa2lOMG5jSlNZQXlGQ2s3ai83UFVuOS9KZDNRSWZCTWlBNjBNM291Z0FVY2JDT0ViTk03ZEFlWU9LaFd2dENvUERoekgvazhhT2pRUGVyQWhoVmxmVlQrckVCSkNmc0RLayt2Tm03L1g5Y2ZwMit2TGwvL2JOY1R3RE4yUXRkd21OVGtPVWhBTHdMYWo5UVAzSzNWZ1FlZCs2UU01UkVoNGI5OTMwQU5MTEp6UkphTXRpRW50a1B6VEt6WUJqYTQ2cVlxb0tzTlUvWWZheHJVUW1nNStoMUoyLzRYODZVandjQ01GTUE4TXpFQ2xiQzZ5YVVkU29zQ0NsTEE2V3ZIczl3U2s1bFRGTUxKNUdsUkxTUXdHMnZOby9CNDdjdzMwS084bjBCN0s5', + 'S3FMWWNhWXcrSnpPUHhudnJFd05Oc1VXbE03WW5Mck53ays5OCtqYjc3TkQ5ZGQ5TCsrM3pQdGgvaGI3UUdDTDlaL3dQUXphZUdKZ01HdHk3QWxuK2d6UG5VWW45NXI4c0prN2FMV0Uzc2hDVGc0OEFWTUVsZGdqT3RTendrRU9oRXR3SFRZeWt5MlpoTFFLaFdvenZST3RoZUc0L0h4QzhiWmZxYVZOODdVSzloQlNUaHRUZmU5YWYyZVJmWXV5UTBPSDZUdEEyY3J3dXpqL2NVYUxVZlNhbFA5c2pLSEs2UXR6bUF6YkFlNnp2RXUwYkowUy9kMTZmakZoWDZ1NUFsWXRzc0crVTJUZGYxaStaTTVkeFhDbE1wclN0SjlaTVRQaDNKZFMwTnlw', + 'YVRlZmVDMXI5QXg5em5kSTU1ajlyMyt0TjA5cEhaczJ5TnEvbEFZaVJCK09RNWg3MzQ3MXRYN0k5ZFkyWmJoZFRHRXBnaW1sekNFSER6SjlCaDJhRHB3TXI5ZFZ3WUFOVVI5NFBIZk1XZE1vbmk4M05yTE9hbDVpZjhjOG84WW9xRHpqZ3l4M2JMNUg2YXVDZ1J1bEpCNHJQL0RWdlQ1MU5tTkk1b09nMkJkTG1IZ205eExUK2Z5N3RQRmFSVUYvWWltWlVoaVpnN1RIQU9lKzBLZnV6SHZVY0tRZTlSeWwyb1RXNkxDZkU4SmhIeDJMOXN6NVQvTWIrTFAzM1lYUDN0Uk8rK0krV0t3SEhoYjcyMEhlcC8zUHQyNWw3ckxtZkdHWW1JNW1OSFFN', + 'ZEFYbGl3SjkvdFdNbE16QlNJWUlQTE9WQjUyZFpLaVg4SHNCcHBZQ3oxazZwSys4WEYvb1UvWEVsNXZIUlAyRzRmWUw5SGdBazh6NVhFcHhEc1grWmVEMGpmbDlxcXkvK0UwUzQvb01tZCs5enlNZlJGUlc5Qm9ic0pPcGZUTXNLVDYrcGI3ZmtvZnJ0WUVCMnI2UThTOTNwYmd3SkZuZVhaR3RISDBjamNLM3duZlNGYzJRNjBsK1JaeGxldjRaK0xTUzQvOTEyMTFyYmtrd1BpdmxDRXlSUTNPTCtoRHo3M3htNzh5K2hOemgwNStwMEJoY0pjQnowYVErVWtORlVPRFc2TUNwMUM0TnREQ21GbVZOL1Z5QUxtNkc1UHlEeGpCckd1RytMdWk5', + 'T1JEWXh0TS9XQzRrQTFOM0tHdWM0U3NNekYrZnRJTndmVytXVDlUaUt1L3J4ODJmU09mSS8vbVA0U1AvNVNGeGNDcXdvNVNtOEgwbUljZmtWRU9QbHZuT2VOeDAwOXdhZWYreGN5WmZQYlNtaVVXZ1ppUElteWM5UjN3LytRZjRlK2FmNGlPdjJ6KytPYXpzTitSOHNRZ1JNaUF0NWIvSHBqRExnN1h6V3U0OVdMdVlCd3A1T2Z3c0FPbU9kY0d2ejdrSGtlUytHZzlEdkhLMS9OaEJ0ajVPMmNSMlEzK1J4RHhWTWZkOHVjbDdNcjQyWHE5VWI1QVlMUXlYaVRoUlRpbUc1Zk8rSUtTZWwrNVJ4TGhPRWJCZDVkbmppMGNFbm5Ic0tFZ0orVHlD', + 'eEdCbVlpc3czNHJwaW5Hc0Q2NmVBWldBQzJ6ZWJ2VTUvbldHd0NPNkhjQWlVVzlyTzkxemt0NjdPWnUvU0hrUDlhaWQ5U2ZTMm1YN0FYa0R1a05KQmZFL0xGQUFqS0FMZnNObGdQcnVPMlVpNTBzdFRqYThlM2JGNnVkaHoyY0ErK0VXMHc1TE1WclRsTWdYU1lSdHlyTHZFZ1M4SzN1YzR5WGpmNGpmVVlCL0R0N1VLVVRpdmVPSHY0Sm8vVUZIcGhSVTFFS2ZwSjNHb2pwMGJDL2ZKWWRFZnMzOHcwU2FrdEJ5NWZvUWZpWkZaQjREd1czbHRibVRFWnNDa1ZCWjFBOVhxNWxUNSt6bFp3OU12MCt5dlRMZ09odzhSTStBY1doLzQ4bWZkTjAw', + 'aFJDcWFJVzBsVU1HcTVKL2VwSjhQYUxDK2NjcG1UWnZ1SEgxRVZYMzZlVTBROFNmNnU3Y3ZYMFpmUEJrUGFmODdPNEg0SU96czhIeHdDaEZ3SVN6bmk5TjllL01HaS83dHR6TEYrZDBiSEF6Ykt6MkFTcFVRY0NCWlNaQ1lhUUdBYVVLODZ0L2tBSXVxajlYeGdQRTBKVFhFYXAyTjBLU2xNM3BqSWg0YnlsVWNxdC90RlZraFVCajRwR21uUVRGeHc3T1lTQTdOL1hFTDFmcUgwT0UvVGljQXFoUWZPeFBJTzZNejFkdkZ6TWJzQVpFOXd2Q3dYbWFZdXNrSHlqUGZOZFpRNVBJckZtQklpVDhLNWx6eThuME5YcnBkNVdLRUE1Y3BCOGthMmhI', + 'b0MxelBUMitVbFplcG5kM2VwSEwrZXB2ZFBocnh6cjJnTkl0cGw0ajRicEFFWU1CWnRIUm9EKzJ0TjU3T25udFJCM0lJZDVpaEJESkpUQW5BeTcwUUdKSUxVRUEvaENCNUVzSjBIQThlb3NIMGZFNWkzTGtDdzZSODBEOWt0SlRkNXYvVVBBVkF4S3ErVHR5TmlKK29FOUY0ckpFckEwSkcwejcrYnVJWGdQZy9zdHpYSUNIVE01bURaRmhNOUJ4aVN2RW5KSHpkVGNtcVdvVE5tcHZIaGp6RC9wbWtlbkhzYWZNeU52d0wrYWNKdk44Q0g0c3lVMHk2UmVwc1EvVWEvMSszNThsZXU0Qjl2dmJjaDM0enFUcy9MQndGaFYvZEU1VGYzeGI5VFB4', + 'Qy9QTWQrTnUzK25TdWhRT2hVSG9tTUpOTElqZUJEL2g5dHo2QTdZWTltNkxWY0NqbXJXN1F2eHpmKzY3a0xKcXlWR1o4NC9TMlBlVWhjS3V6K0hKRnpsQnhMTkJOMTAxSEI0UC84N3UrNHJQdkpPVi9WUEloTGhiVzFVOFl6MTMvc1pQOXZ0UjRqRDFjdEhyZzZMbmVQU21XMVlNeTBWT0hFbzJsd2owUkV5U3BMbFhtaTBQZWlzQnZZSndONWkvWStMbFR1dVVJOCt2cGQ1Qit1ejBUL1I4c1FRYU1DUXNCNy80LzBmM01odS9Ga1pCNGhGVEw5TGhCTlhaM2l3bU5QUUVVeUVFeXFqd255d1JPbERRUlJmd1RCWkZyUjA1RmFEbi96dC9nRSs1', + 'MHp3WW9ERHlKTURBemdXOHdOU1djaVptbksveU5ybDg0NlBkSWdUTk9Zb3pCUkNWR3cvTnlmVUtwNlAyc1BFL0c0ZmIwRWlINXpIanozWktCbk16T1l2dnBJZGVvMmtRTVlYQ0IvakJwTVh6TzRRdkhkaUwxYnNrUGVxRDgzcjlrN3BsNlRpblhmd0piTzY1MEo4UHhOK25ZL2ZpZ05DN2dWMGx3eXVjTFUzcEtCZllKL2F4d2ladTh4dFRoTHd5RTl5bXBDY2FDU3ZBY2NxcTBUWVlEY0J3NEM4RUMwREpDOGxLeHU0aFRxS2paMzlBSUQ0L1NVdS9WelNLS2RKaHhNbkF6MzA0b0NXU1JnUHc1cVpHejgxMlF2VDlyL1BUZjN0cCtGYW9EZndh', + 'ekMxOWVJZEhBVG55K2JTMUM3amZucWlwVll1bDh1N1lJQkhiT1hWVUdFY0ZzdkZOYi9RbFlWWHlQN0l5MjM1TGZCS1NMTnc0aDhVMHVoUHYwYjBmdjJMRWZNMHh1QjhlalgrTng5dkVBUEV1QXZBQ2Y0K05lZFFtZCtpMnhKYXZoRG0zbHdNQ0VubHBjdmlucEJjV1NtQU9CWUdBV0ZyL24rcnFnWjRYcFYxU2k4ZkpocE9TSDE5ZlRjZTlhS0JPSzRQbjRmemU0cjRIVHVaYnRjajg2YXlIVi9uS1J2TnJpdUcrTkdoMVNSc1k3ZnNOcCtMaUZPK1NQbFQyQ25hNjBXSjlFNW16TGNld1RRT2VwTkI5V3FGN0Mya3ZrTExqL3U5bStWSEpmVWgv', + 'Y2VtMXd2emk3K3R0dGZrNytNL25mRVBMRThFaklJcjkzd2VnYnpXaytQVkR6dXk1VC9ncHo3MGdtT3ZiU3dpSjlPQ1FOaGdaY01BdmttaURCZ2hud1hobWd0NVRQOXlCNHZKS21kR2xXQlQ0QStEeENKTXNOcThaeFR5cnMvamd6NGpCK1FkeTl1ZjJQSHZNaFl6Wnk4SzNLK0pjcUpWa29UbDRxRjZKOG9MbnByK3pMRng4ODRaeWo4T3d5NVd3ditrZ2k4SzZKdVVmNVNyVkdRMzlyMGZFZnNKd0VQUm5pSkZTZnRMWkljTkdhME8vTEZnRkN3U3ZNdWZJM05wRWZaZFkzT1I5dVJiVzZ4TURFbm54Q2FtQUFOTkpVSVhRbkl5VFV2ZzhBOExn', + 'NUJhR3dyUWs0MUdmWVN2YmpsOGFZS1EraVBTRk8wQm1vMU50SnpOQVlFNkFBTXF0SEtHV1lZbWdvL2hxU0VENGpNMWZTUWcremJUL0ZSVkFaZXFvUTRTOG1FUk12WHpROFpZSEVkdFB0S1hKZ01SRjRla3o0dk5WeVhjUkJnaHIvOGtjcWwvcUoxMXVEL01VMzc1RjlweWxCRHgxazZGeEZ6TERockE0dTdSKy9kS0RzdjcyY2VIcmszNjlzRG9RWWMvZS93d3J4ekNCeUFhUlIyQnFXWmZPOHNmYUplLzgvczFtNTdFTko5aVpiUUdFRVRBVEJDNlRBRGVTYzBhaGhCd1JBM2djQk1UQWNoYjl2ak04QXdGQysrc0lnUUNpU01ESDVhU000d0VQ', + 'TTRiQUd1eTlINDJ2WXNGWmJCNEErZ0VUQ210UTY3dkpEa3BMNit4RVF5WE5MbFhKME5SUDdBRi9iczJxMk9nbU8ydFV2Nm45QjFoUnRkY3pNaUxDblhBTElNVElJV1RNVDRwajh0bFNBRm9ldVYwbXFVSTNKZG0xa09MOFo3QStpb0hKYTZFRnZoZWlyYWZTMkFmTXBzMS9FMVI3NlQwNHQrL3BZNU91N1VvdThZSDRod3VZdEtLQUhqdmxDTUFFaXdzRFN2d3NjNFZCcE5DK01URDUremdZeVlkY2dhRmtVSU5GQnp3U2FpR0pLQ2cyQ2hwRmtsUXlRRUNpTGsyRmt2aUNQWUpRd29HNVNCeG9td1BCb2hNV1diRU1pQTJHeDh1SXJjdlVMQTlK', + 'cEYrRVVvZ1pnT29wSDRYQVdSNDJ2T09SeGM1QlNsMTdvbXh0OG00OEJJa1A3bVRNNTg3bU1ZemhrR090SithUFE5bExhUGYxN1A2dHBMMktLY2ltUFdWTUhJY3I1Wm5sU2trNlN1UXp5MnpKUEkySXZlT1U5aGpXL3VGU3JWZlNkQW1ZZ2wzdkk5NC9XZEFjZlVUZ0tXN1RkSkxCWnhZOTBDSnUvTEJ3Q0pPQlpGZjI5MzNZbHZaY3o4cWRiaTZ1NExDWkRrTXRiWDVlNE1OaE5aTWlEQkQwdlErQSs0QW9tQkpDNUxpWUVwWU5XamNDSWFnWUNCallqaHNJa0pINDltNm0xbkhReWtZRFJDT01JdVBaOE1HM0VQbGZBc1ZQNmZxNHZ1TXcxeDZY', + 'QTBVQnpmZDhJMEw1ZlFvRkU5TTFYRjFKVkYySHZLK1lyL1psSEt2VDBKTmVLNmpVYmk1Z1JGeXJJZWhsODl4MFlvSThpa2xYSGViWC85Y3Brcm5URk5lMHBvQjRPTHgzN2IyNXJNUUUzdDZnUThSMUJtNFJkTVlGTTljMzRpdzZic1NhQ0hyL2xBb2lFalF0RE5yVVJmOHBPemZtRi92WmFJaTNtcVJKK1lHRXBvUllnbWRrNnhVL0ExR0lSR3dQaEFzZFFlaE1EWXl5NGpqRldyVG4vQlVJbEtnV0NNSCtmajhNSHpMMGpnNUFhdmgvZ0hZbzZMWkVZU1BLMmRxenVKUVRsQjlBazlENUdHT0EyU2NINnoxMGR3VlBsbCtxWlJFemlyZzRxZzZH', + 'ZXFJN1VrQ0N1U1FsY2JKc0o0NFhJSFhrWm92SjdwMlRDc2dQSjlnb2w4cFhKYm0vZlMwRFprOGFEWXZJcFZ4YXV5UVFkL0tTTU9IV1pJdFB1Nnc0dmR0c0JndzROMkdUKzlEeHdHQitCYUJ4MmwxVzRiZS91UnJUdk5kOVg4NmZGNWpaYUEzYm5zT2NhNm5vWHdFTkFaTUl1dzI5aWpHazJTZWQ0VTBwY2dBYUJnUkFNV0U2MzVMZy9qOURaSzBWUWxqOUI4UGFVSU5yTVJ3S1Q5dHFINkw4Sjk1cGR0SDR2TE9hQWM4M0tiNDl3WE93Sk1vMFBHd1VGR0M0WmZmSlY4cEY1aHdEMDd0SnJCQmRSd0M5UXNISlh5WEU2Z1lQVjNnUHBYU01RZ0F4', + 'eG5FQkxlWFRlVEV5WnZwczdoWEdVanRiT3crSFdaQWNQdW1NcXcrTm1hdTA5YUg0aHd2ZHR5S0JyeS9TQmtBVkljN2d5S1E5R2Y5dXhORGsvcm5iZ2JZa1BVUU1xQS9ZSUJoWVpGaGFWbStuRXBKa2pnRURvcEQzaUE5R0FCQ3dJZzVPNGpnWURnSkF6blFLMVBRcmgxdCtHbzlGQWdaZ0dGQWI0cUxCRzhSUzVVRVVuN0NnTTlFMW11YjBrc0Q4QWV6WlYvdUdIRDZuaWpHNzZ2RDZySStKU09VbmhvSFJ6VTMzRThVaERsTkpzRHlzUkhFN1E2dUl6RkJBNWpPazlSWVRiN0srbTRSL1FvM0VYWWE0VGN0Qm4wWjZUdVl2ZExTMy9yUms3MzVz', + 'eVozUkc3dUExY3MrYmpnMi9TTXNSVUxRTEdnRmVkc2JoWWptbjhTTFRCM0hiUnlYN3Eya1lpL210S3R0WFBsckptc0F4RVF4a3dFQkUzMjlqeTJremlPQWl4WEVqUUduQVltUkpTUU1PUWdNQmRLWEVJR0NBUTg5REtZemxBc3RRaUZ4NFFTekNvZEEvQzZPVTlrNCtadUkxK1lBVFgzN1hjWDZ2VDBzSVNrMG5CUGloc1hFOWdnbHVadklkd09UOVB6Wm82SWZJZWhqaUJTNmZLR1pQQmJpZDIrL2l1MHU2RFY4ektpYm5UWDNUV3EzY1RRVUF0b04yNjVMZklPV0l3TFFMR2dGeWxOR3dhOHg3aEduOGFpSnUvL2sxYnhiVFVuT1Buc3RwUDV2', + 'bDJXL3E0MnQwN1ZrMXNpMCtUeTNTM01UZnJuSkJpUmx5Nm1FZktPSW9OSmhtRytZUWNsRjZlWDF3RkpYUU1UUEpFNmRqemhFaTlDTTVJbzdqd2QyY0JRbXBJeUYvZkpDSVE4dXduNG5GTnRLQms5ZFRiTWk2Wlc0T2R1dzAzbFhYdTYwMGhjaDdRcVFOa2VGUFRMRE05enJJQnJmZGZ5ZCsxN05DUmU4YkQ0aUlFeGFXWnRBVjVmSkFTb3FFZ0ZDM2F4d0VlMHpCcTlaUmwrTlJGVDVxUzBaVTNQUjdvSkpERmJObkV3M1FqTWJieW81SmZCN09sa3hUUmtpTlVUVFBGbElYdzZrRnV1cWlHWlhmelBuOVNoeUxHN2NwSG53NnNPaDFwbGd1QkJy', + 'Y0dTR1JJY2Z6QUhrN1E0bWJiUUlCbE5GVE90STExdHNrMDkyblF5NWc1Y3JkT1RaMVNQeVd1bnBPWjU5TTFkMzJudUV2M1F3S2F5K0c2dUFpQVNSQXVvYTIydFlwQ01SVkpBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFM', + 'RWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFM', + 'RWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFM', + 'RWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFM', + 'RWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFZ0ZDd0dCWWlBY1JBdVlBV0lBTEVnRkN3R0JZaUFjUkF1WUFXSUFMRWdGQ3dHQllpQWNSQXVZQVdJQUxFazFlSXNrLy8xVlY4dGlxVGNMTVZ2N3M3MnpNZFBUUDlXVFBWOTEzOXJ2WnAxc3ZjeEJjdU13eGxFa3pJSkNDZ0NDSU1CRkZVWmlBcFVmQVI4RWpKZ1l3aFFQUUJSUlFHdFVPb2tESWNjSEh6bHplMzJjbWU2YXVGUkNnSDBGN2VoSFZCUlVTQUFRQUF3TSs4b1lYOEpLaEw0UDM4M1Ix', + 'Y0ZvYi9oN2h6blo1VThONFprZkd2aXR4QVBud2hrblNuVFIxYzZBc3QxTTFEb0hKQWt1WUFnaHgrQzZ2ZVV3c1lEd04zOFhnci80ZjgzQlFKSXVpSSs4S0o4dkFGWTFaVUdVUi9jZWxqaTZ6ZU9BQUs0SmdEOG1YQXdFelJqRk1GNFhLbGZDaC8rbmYvNVc3NWJoK3Q5bjIvdTZMaytDcHpUUDk1cmtmMjZqcy9zOUREZlEyOWwvOS90OHZ1dnZZN3Y1YnVmcnRORHZ4NDcxdjEvVlNldHJlajJiYmZCK1Z3elR2YTcxcS8wNlQwZmF1eG5YSTY5K1BIOThTdUR0N1JtZDlNUHZXN1ZEUFU5SjBmT1hYdk1ld3hKTzkvUmNlZTd4RVAwMkJnUEk2', + 'elA3MDdHNy9ZL1gxN1BlZkY3MThQWjNXNHVrdU0vK25iTGE3VnYrZFZ1clB1cHdiNmNUTU5hZS8wNUp1ci9WUnVleHFjdmFtS2pmSjU1RFhINHl4ZEVoam1XNjlTR2ZzMWgrdnZ5MjlzOXh2ZThPNHRQYXorR2FlZ2o3YmRlV25PY3VQekZKN3ZidGY5NG15Vm5qbkUrOFpUamM2N3ZFWExwbTYxcEJudnY1NE5mVXlXVDI1aUtuUTM1dFB2OFI5UE8zWVVQbTRvZlBWNUoxUHgweHRINjh3QlA5YlRPSFVpalNjWXJObVpEZDNRdTkzUzlacWV3S3N4QlpkUTVEc2RjdDl6ZXZtN0haZjEvZWYzNGJldEhKN0g0YlhiYmQ3Mm9PbnJyeHVCM1Zw', + 'bmJXT2UzK3Fyb1ZMeE5HdmhsZHFxR2ZxdjkyeDNxejJFdjlyV24vYW9WOXNXMS9ZL3AxV0ozeWt6ald1NG1ac2ROVmJmUjEySzQyYmJVMEdQWlkrRFJXdzMrRlhQOHFMclR3NjNycWdWSFhsM0pIcXkwNmVlMU1yK3VXSmFXZGp4cGJ0ZHdsNnRLcHJpeXFOcnd0S25YSitsYlg4Ymhpcmc5NjFYT1M1am1OZXNXcnBmNW1sRHMwNlNHdkVpTFIvNGxMN2ZwbUxsZHgrZnArNiszeGZuWEkvRmVaK0ZsM1M1eUg3Z201V2dQTFd0ZzdGYlBmUnpQdTViazMzOFlNOTBtcWVwMjJTMkxSL2ZNWFdjbnNycGRxTVQySnZWYXBTY3QwM3M3dWQxWlRm', + 'MXVwQ05iM1p6bDV5TU52UmpOaU1Ha212ZTZNbTljNnNwTlBOenIyZnF3SFZienZXY29WZU1aeFVPa2l0a0hQWldMN2YwNnBTTTV6aXFzSS9LK0FaZkpyZGt0TjUvTkFxWUI5V1lrQ0ExcXJVMDhxWXloYm0wN0VkVm1DS2lQVW84Z3BUWWF5V0tldUZXVHlQUC9relAxNTJKdjB6dHZzYmtiODVlTDNHNUVlT1hKYXRpaURpM1QyVmtkd1oxZG1seXl2c1BuWlpNL0xUVEh1TWgvalFkVHdLRklBQ2ZGL1Z3Zit5UlhaVWJPNEx2V2pYWXc3TDA3bytLcG5RMDVQL3Z4elllcHpPTld1eE1PK2NZTHZkN3MySGNkc1NqNVJNdWllNTZKVEhic2VU', + 'dGRhSmxPQ1R0cGtLVXFHazYrb3BqR0dxbnJVV2xoVEordy9rY05wSEladFRxdEVKWFMyazg2a0xsWVFKZUx4T0pFUGhNbVFyeG5HK3d6ZlN1TGpyMjRTTWNBbjl4c3pHcmRSdVB5aXhoaklERFJYY290T2FkVE9mNWlCak9tb0dxMVlKUVVPRzgxb3JFWlNSa21JYVB5VVI0Wms5aDM2elhtZ3JOZ2ZhOEpEUGhnRFJzWGpOUlkrR2F2aFdWb1pFcTlSdU53YWhrY0lhSGViQlhXd2hGd1lFNTRjbURQdW4wamhPTlFpRWtuaGZKNzl3ZDY1MnBBZk40Q0JVeUFOTXczQlVYQUlQQVB6dlIvcjdmbStuVC9heTNlK2pDL015eG5CYkhod1JzTnla', + 'Zjd3N3UrMmt2ZTU4bm5OOXBRZjgwL0hlUDI3TWVIazNKMDdaWnRRV2lCYjZnMWRlVnRYcDVsMWUybG4xNlJwODBYUGY3UlRlbTN6SWVnUlAzNGU5M0xrN082K1YzYTB0TXROcWJwN05WdGVwcjU3VkhjMWE0bkd2eTRGR1Ard2FHZW5MdGNKUFgrd0YzZ2Rkc3F6V05VcWhzTzhsbmJ3NVNjT0tuM3paRE1kclRGNVUyZUNOT3RCMDFqR2VvdUgxd1FaTVlmT1h5aFM2b3IrSWlHdTBodWRJREhNMUhVUy9kNjMxK3NjUGl1WFZkWGJYaTZHd3UwZEh1YXYxMml0dFgzU2d0bXA1QmI2enpJMmtyTjJiK1ZyYnkrNldubGxaeDJVYjZXcnF6MmtX', + 'R3hLenR1WExieXlLV21wbFoxaVVaNWVMN2FSSldra0YyYXh6emIzOG1rZm16QjM4ak5uWE0zU21yaTU4elEyeXB5cDl1dERNdG01RTNNUE1HM20ybTFETXVpcDVhYVFtcWpKOVo2RVRyWkNKTUpjVE14MCtNdWRqYmFjcWpqMzRITVdVTmViSStpTWJrK0RoN0llR1J6UTliNFVqcmJVU2ppem9ITUNjTWV2aE5ZWXBEejF3UU1NVEcrMGcxRTh0Z3hNb1FISW9CaElZZS9Qci9POXJRL2k2WFk5emkrR3A3ZmRYcGJmOUxxWGU2aEw5c1Ivd1UzZTFlb3VWcmZTZFRXWDMxVmJkNlZuMjB0ck9sclRPNmdiZHNWSEVwVG5aY0dHYmh4OFpCZm9C', + 'THhBWWk5VGFQVjdtYW5iN0NvZElhYmoySlI3emFOWHJPWWRvcjkxS0d0Q1gxRTZpUE43UTVSS1BVekswT25HNVJuOG9wSjZrSE5hVXg5SzJRanExb01OanJCbTF3R2RRcCtuVmZ0NjFxZWxxblI5Q3FldVYzQmx6ZysvVC9XMFBENUZpK0NadmFvSFEwYlQ2VEhhdmkyTm9kT2FiaTJ5b21Zb05IcXhCMG9kYWZvMkIxbWwyUDJtVzJXNm1TWnlwVzBxNWhhbXBtT2FmTDFiVDlja1dhcTdtNmNZTmlvMlBVWkxxMU9sUFJSSHBjSmFhQ2xOVFpKVW1BVkVESzlCRlduQ05UOWprZk81TFIrSWszQjVWaDRDVFpwaGNRUnVySTNja3JDU2Zpb09U', + 'NjZrT0pwOVFhcEVWUW1xSGtFRFM4TFpPa0lEUkoraFlqSXVERVBCeGRUY2RFWEl4cFNjT0pPMUY0K0NSMmlZOVNReVI0VkUxOU9zVFM0Z0UyQ0JWbGdDUllXRWtLQ3psQzhCQk9tQWpUQXFSL2ZCdkRnL0t3djF4djJodnR3blE0blI4VE0rNUp3RGNnN2FDY3pFNG5GQk9QQ3JlRXZlQjhkZXcxY29WMWdWRmhWWmdiU0JtWkdXcERhaER3RUxobW5EbTZGV3FBQ3orQTViaWFyQjlGZytrUnZPUnUzb1cxUW5Jb25iMExTa1RGcUpMMFJVMGpZa3lXQTF3Z3F0Z3E1QXFwTkVGbmc4MVJxTFE4VVl1RFFhT0lQSmtIS2k5QmxhQ3kyQ1p5Z2M1', + 'Z1krUU1aSVJpRkNaT0twS0lGZklFSm9FL2dJV0ZGWEVFdkdFTVRVTURnQTZDSkVDajR6QjQ5Q1F2SVE2cUQrZER3VkN3VkF3blJBbkVBbkJCYWZCWXZEWU5Eb05MZ1ZKZ1Z5Z1VTQm9aSG9wRWdaS3o1Nkcrd0lIZ2xLQkl4QVFpSUFFQUpJK1RBc3IrQW5kRUFiS0J5dzA0MlFDdkJvUThqcmNTMWlKZkJoOXdGQXEweHZGN2t6M0Q5dmJMY05zRDRvSW4vM0Q3di8rSDdIQUhNL21kYS8xaWF3N0tHM052K0tsZjlIa0EwTlhkMWxNSDI1OFZrTWtDK3l3a2hjWFZTSlZLU21nbkZ3by9hcFRVc0M3aW12ZHBYWHF3eFNtbFRHODNBLy9FVjND', + 'VFM4VkxpWEQxSldzcnY2Z0hyeU9Od3FSeGVzWWdOQVdqQTc1aTVVeHI5aHQrdzJTbkp2TkFmUjJQNDhmek9QMnpzcDVNWVdzVTYzWTlQSHlxeXdlb3VqcUg5NXVVRVlLMExsZ0ZXY0hWMkFQL1lRYi9uMlBZYVZldXBpalpGQTcwREFlWTczaDNsQXdHRis2TWlhZEJ0UGhlY2dwZzJHdzUrb3hGcHNxZmdxVENlRUtuU2ZpUmhuMWhmaVExSThRQzdBaG5Rbzl2L0lNOTR1RngxRldBZHRnUGVCMy9CWGpIVHJTWXdaTXdJR0VFYjVBYWtwSERRbVlsT1JJdzZjL0E2M2UvZmZsZ05QZURYT1l6ejdQUm5CRDRKeldRakhsaWw1ZUJUdUVna1B4', + 'SkFldVJvWVI5V2hNRW91OHNPNHI1VEFVQzFMRkNPK2dGUUFKQzluQm9Jd2FESEI2aUdKR1pvNGtCaXdDZ1E2QkFHYVBVKytBUVB0M1VEVU9BdzBBMU1JSU1aQUNPRUFSRTQ3RFpZbEl2NFFjNHhaWkVodHdTbTU0cVRsZ2h2d2tGM0lVS2h5TDJCU0xuYnlGWUtFMzdwU3M1VnlVTHl4clVnaFVCTmZwQmxDT2hPRDJ1TEhpd0ZtQXVBbWFxQURXSEJVYTdFalFMQkxYaGp2aTVCZnRETy9LR2VpWlZjZmhhZFRFc1pNMitDR1kveWl2S3pMYXB4a294V2ZLRmNJRnZ3UlFiRmY1aXJja3c2UmlOelpVWklicVFzSmtjeCtRckNSMEpUa2l0aUlW', + 'RXJnWTJGbmVZcWZWeVpoei9tdVZFdnBsZlYzOXJBdnFQeGkvcWd0Y1UrY3JMVXVYaG9UVXpXV1FrQUNzK2lIZzJFeUV5VmhGT0pZRkREUnVDcElablZzUzY4Q09vR0hEc0owUkZBdUlzSEU2TVkrQkI0M1lSMWVLblVvbE5yVU1QRUdRUmVROE53S1FIVDBaUjRPSVR6QnBDZDNNMk5QRG52OHhHYTV5S0JNMjhaUXluVCt1LzN4TS9UcDM4SVpCRk5Ja2l1SW5zR0VyOG1YTkdNRE5mYnRUREdmbGZ5VnNDWUUwMlJzT3hCUVEvODVuc0xFWVFIUWlRd1NSWVg0N1FSdEYrSkN6eW5nZmdHZ1pUZWNqeUFRQjRHNHpZTVpZSHhyU1pjY0pjcFVX', + 'SC9pbmhBZ3dSQzlLTUlYSktNcGx6VEpRQ1lSa3ZvSXZBQUFmRGRPNG9FQ25DUk1nREFPTGdzVVJ2K1A3L3JGNWNlMXRSQ3c2N3U4M3RQQUxBTTZZakJMa3ZjY2pBd0xEQWlvQ0I4VVN4WWFwSEZUQkhhTWx1OENrQ28yaFNTa25KWU1nRDByN25OWG1QblBuLy83NXoxMzg3VmVmWERrVXZ0Q3NZcHJ5cXN3RmVYc0ZXZ2lqRWZnWUlxSzZzVndpMUdjVTBabktJZ0J4aENna1JBYlJwRGdXUVFKZzFJU0M5bXdTaGlXU1N0bG5XazhVWWR3VlZ5SmVBQVFac2xtWnZKSFVnTTBRSkIxUURsbVBNQUFBdElRQVZDQUFBWUFDZUhBQUE4ZkFBQWdV', + 'RWhVU05BQUFBb2dHSzB3Uk9CVmksNDZlc2FiO2ducC9lZ2FtaTphdGFk', +]; + +export const logo = simpleDecrypt(logoArray.join('')); diff --git a/dashboard-frontend/src/components/navbar/Navbar.tsx b/dashboard-frontend/src/components/navbar/Navbar.tsx new file mode 100644 index 000000000..0f23f0f5c --- /dev/null +++ b/dashboard-frontend/src/components/navbar/Navbar.tsx @@ -0,0 +1,121 @@ +const Navbar = () => { + return ( +
+ +
+ ); +}; + +export default Navbar; diff --git a/dashboard-frontend/src/components/session/capabilities/capabilities.css b/dashboard-frontend/src/components/session/capabilities/capabilities.css new file mode 100644 index 000000000..3db7fab5e --- /dev/null +++ b/dashboard-frontend/src/components/session/capabilities/capabilities.css @@ -0,0 +1,35 @@ +.capabilities { + @apply text-[12px] flex flex-col max-w-[440px] m-[16px]; +} + +.tabs { + @apply flex; +} + +.tab-header { + @apply cursor-pointer font-bold w-full py-2 px-4 border-b border-gray-300; +} + +.tab-header.active { + @apply text-blue-500 border-b-2 border-blue-500; +} + +.tab-content { + @apply h-full overflow-y-auto; +} + +.key-value-pair { + @apply flex text-sm my-16 w-full; +} + +.key { + @apply font-bold m-0 w-48 mr-2 whitespace-nowrap overflow-hidden overflow-ellipsis; +} + +.value { + @apply text-gray-500 m-0 w-1/2; +} + +.download { + @apply w-1/2 text-white bg-green-500 py-2 px-5 mr-10 ml-20 rounded text-center text-base; +} diff --git a/dashboard-frontend/src/components/session/capabilities/capabilities.tsx b/dashboard-frontend/src/components/session/capabilities/capabilities.tsx new file mode 100644 index 000000000..7a77d921f --- /dev/null +++ b/dashboard-frontend/src/components/session/capabilities/capabilities.tsx @@ -0,0 +1,185 @@ +import { useEffect, useState } from 'react'; +import { ISession } from '../../../interfaces/ISession'; +import './capabilities.css'; +import '../style.css'; + +interface CapabilitiesProps { + session: ISession; +} + +enum ActiveTab { + DesiredCapabilities = 'desiredCapabilities', + SessionCapabilities = 'sessionCapabilities', +} + +function Capabilities({ session }: CapabilitiesProps) { + const [activeTab, setActiveTab] = useState(ActiveTab.DesiredCapabilities); + const [isFullScreen, setIsFullScreen] = useState(false); + + useEffect(() => { + setActiveTab(ActiveTab.DesiredCapabilities); + }, [session]); + + // Add fullscreen handlers + const toggleFullScreen = (element: HTMLDivElement) => { + if (!document.fullscreenElement) { + element.requestFullscreen(); + setIsFullScreen(true); + } else { + document.exitFullscreen(); + setIsFullScreen(false); + } + }; + + useEffect(() => { + const handleFullScreenChange = () => { + setIsFullScreen(!!document.fullscreenElement); + }; + + document.addEventListener('fullscreenchange', handleFullScreenChange); + return () => document.removeEventListener('fullscreenchange', handleFullScreenChange); + }, []); + + const renderKeyValuePairs = (data: string) => { + const parsedData = JSON.parse(data); + return ( +
+ + + + + + + + + {Object.entries(parsedData).map(([key, value]) => ( + + + + + ))} + +
KeyValue
{key} +
+                    {typeof value === 'object' ? JSON.stringify(value, null, 2) : String(value)}
+                  
+
+
+ ); + }; + + function getVideoComponent() { + if (session.hasLiveVideo) { + return ( +
+
{ + if (el) { + el.onfullscreenchange = () => setIsFullScreen(!!document.fullscreenElement); + } + }} + > + Live Video + +
+
+ ); + } + + if (session.videoRecording) { + return ( +
+
+ ); + } + + return ( +
+ Video recording not available +
+ ); + } + + return ( +
+ {getVideoComponent()} + +
+
+ {[ + { id: ActiveTab.DesiredCapabilities, label: 'Desired Capabilities' }, + { id: ActiveTab.SessionCapabilities, label: 'Session Capabilities' }, + ].map((tab) => ( + + ))} +
+ +
+ {activeTab === ActiveTab.DesiredCapabilities && + renderKeyValuePairs(session.desiredCapabilities)} + {activeTab === ActiveTab.SessionCapabilities && + renderKeyValuePairs(session.sessionCapabilities)} +
+
+
+ ); +} + +export default Capabilities; diff --git a/dashboard-frontend/src/components/session/session-info/session-info.tsx b/dashboard-frontend/src/components/session/session-info/session-info.tsx new file mode 100644 index 000000000..1d6035d78 --- /dev/null +++ b/dashboard-frontend/src/components/session/session-info/session-info.tsx @@ -0,0 +1,62 @@ +import { ISession } from '../../../interfaces/ISession'; + +function SessionInfo({ session }: { session: ISession }) { + function runningTime(startTime: string | number | Date, endTime?: string | number | Date | null) { + const startDate = new Date(startTime); + const endDate = endTime ? new Date(endTime) : new Date(); + const elapsedTime = Number(endDate) - Number(startDate); + + const hours = Math.floor(elapsedTime / (1000 * 60 * 60)); + const minutes = Math.floor((elapsedTime % (1000 * 60 * 60)) / (1000 * 60)); + const seconds = Math.floor((elapsedTime % (1000 * 60)) / 1000); + + return `${hours > 0 ? `${hours}h ` : ''}${minutes > 0 ? `${minutes}m ` : ''}${seconds}s`; + } + + function getAppName(capabilities: string) { + const capabilitiesObject = JSON.parse(capabilities); + return capabilitiesObject?.app?.split('/').pop(); + } + + const infoItems = [ + { label: 'Device', value: session.deviceName }, + { label: 'Platform', value: session.devicePlatform }, + { label: 'OS Version', value: session.deviceVersion }, + { label: 'Status', value: session.status, type: 'status' }, + { label: 'Start Time', value: new Date(session.startTime).toLocaleString() }, + { label: 'Duration', value: runningTime(session.startTime, session.endTime) }, + ]; + + return ( +
+
+ {infoItems.map((item) => ( +
+
{item.label}
+ {item.type === 'status' ? ( +
+ + {item.value.toUpperCase()} + +
+ ) : ( +
+ {item.value} +
+ )} +
+ ))} +
+
+ ); +} + +export default SessionInfo; diff --git a/dashboard-frontend/src/components/session/session-logs/app-profiling/app-profiling.css b/dashboard-frontend/src/components/session/session-logs/app-profiling/app-profiling.css new file mode 100644 index 000000000..755b4ef76 --- /dev/null +++ b/dashboard-frontend/src/components/session/session-logs/app-profiling/app-profiling.css @@ -0,0 +1,7 @@ +.app-profiling-container { + @apply !max-w-[700px] flex flex-col m-auto items-center h-full; +} + +.chart-row { + @apply ml-[0] mr-[0] my-[25px] h-full w-full px-[50px] py-[0]; +} diff --git a/dashboard-frontend/src/components/session/session-logs/app-profiling/app-profiling.tsx b/dashboard-frontend/src/components/session/session-logs/app-profiling/app-profiling.tsx new file mode 100644 index 000000000..35fc97080 --- /dev/null +++ b/dashboard-frontend/src/components/session/session-logs/app-profiling/app-profiling.tsx @@ -0,0 +1,230 @@ +import './app-profiling.css'; +import { IAppProfilingLogs } from '../../../../interfaces/IAppProfilingLogs'; +import { ISession } from '../../../../interfaces/ISession'; +import _ from 'lodash'; +import { + Chart as ChartJS, + CategoryScale, + LinearScale, + PointElement, + LineElement, + Title, + Tooltip, + Legend, + Filler, +} from 'chart.js'; +import { Line } from 'react-chartjs-2'; + +const colors = { + profiling_chart_system_cpu_border: 'rgb(194, 230, 153)', + profiling_chart_system_cpu_background: 'rgba(194, 230, 153, 0.5)', + profiling_chart_app_cpu_border: 'rgb(49, 163, 84)', + profiling_chart_app_cpu_background: 'rgba(49, 163, 84, 0.5)', + profiling_chart_system_memory_border: 'rgb(65, 182, 196)', + profiling_chart_system_memory_background: 'rgba(65, 182, 196, 0.5)', + profiling_chart_app_memory_border: 'rgb(34, 94, 168)', + profiling_chart_app_memory_background: 'rgba(34, 94, 168, 0.5)', +}; + +ChartJS.register( + CategoryScale, + LinearScale, + PointElement, + LineElement, + Title, + Tooltip, + Legend, + Filler, +); + +function toMegaByte(value: any) { + return Math.ceil(Number(value) / 1024); +} + +function getTimeDiffInSecs(startDate: Date, endDate: Date) { + return Math.ceil((endDate.getTime() - startDate.getTime()) / 1000); +} + +/* Cpu Usage data */ +function getCpuChartOptions(appProfilingLogs: IAppProfilingLogs) { + return { + responsive: true, + aspectRatio: 3, + plugins: { + legend: { + position: 'top' as const, + labels: { + usePointStyle: true, + }, + }, + title: { + display: true, + text: `CPU [${appProfilingLogs?.device_info?.total_cpu} processors = ${ + appProfilingLogs?.device_info?.total_cpu * 100 + } %]`, + }, + tooltip: { + callbacks: { + label: function (context: any) { + return context.dataset.label + ' : ' + context.parsed.y; + }, + }, + }, + }, + parsing: { + xAxisKey: 'timestamp', + yAxisKey: 'cpu', + }, + scales: { + y: { + min: -1, + max: appProfilingLogs?.device_info?.total_cpu * 100, + }, + }, + }; +} + +function getCpuChartData(appProfilingLogs: IAppProfilingLogs) { + return { + datasets: [ + { + label: 'Total CPU Usage %', + data: appProfilingLogs?.profiling_logs.map((v: any) => { + return { + timestamp: v.timestamp, + cpu: v.total_cpu_used, + }; + }), + fill: true, + borderColor: colors.profiling_chart_system_cpu_border, + backgroundColor: colors.profiling_chart_system_cpu_background, + }, + { + label: `${appProfilingLogs?.device_info?.app_package} %`, + data: appProfilingLogs?.profiling_logs.map((v: any) => { + return { + timestamp: v.timestamp, + cpu: v.cpu, + }; + }), + fill: true, + borderColor: colors.profiling_chart_app_cpu_border, + backgroundColor: colors.profiling_chart_app_cpu_background, + }, + ], + }; +} + +/* Memory usage data */ +function getMemoryUsageChartOptions(appProfilingLogs: IAppProfilingLogs) { + const totalMemoryInMB = toMegaByte(appProfilingLogs?.device_info?.total_memory); + return { + responsive: true, + plugins: { + legend: { + position: 'top' as const, + labels: { + usePointStyle: true, + }, + }, + title: { + display: true, + text: `MEMORY [${totalMemoryInMB} MB]`, + }, + tooltip: { + callbacks: { + label: function (context: any) { + return context.dataset.label + ' : ' + context.parsed.y; + }, + }, + }, + }, + parsing: { + xAxisKey: 'timestamp', + yAxisKey: 'memory', + }, + aspectRatio: 3, + scales: { + y: { + min: 0, + max: Math.ceil(totalMemoryInMB / 500) * 500, //round to nearest five hundred + ticks: { + stepSize: 500, + }, + }, + }, + }; +} + +function getMemoryChartData(appProfilingLogs: IAppProfilingLogs) { + return { + datasets: [ + { + label: 'Total Memory Usage (MB)', + data: appProfilingLogs?.profiling_logs.map((data) => { + return { + timestamp: data.timestamp, + memory: Math.ceil(Number(data.total_memory_used) / 1024), + }; + }), + fill: true, + borderColor: colors.profiling_chart_system_memory_border, + backgroundColor: colors.profiling_chart_system_memory_background, + }, + { + label: `${appProfilingLogs?.device_info?.app_package} (MB)`, + data: appProfilingLogs?.profiling_logs.map((data) => { + return { + timestamp: data.timestamp, + memory: toMegaByte(data.memory), + }; + }), + fill: true, + borderColor: colors.profiling_chart_app_memory_border, + backgroundColor: colors.profiling_chart_app_memory_background, + }, + ], + }; +} + +function useProfiling(session: ISession, appProfiling: IAppProfilingLogs): IAppProfilingLogs { + const processedData = appProfiling?.profiling_logs.map((data: any) => { + return { + ...data, + timestamp: getTimeDiffInSecs(new Date(session.createdAt), new Date(data.timestamp)) + 's', + }; + }); + return { + device_info: appProfiling?.device_info, + profiling_logs: _.uniqBy(processedData, 'timestamp'), + }; +} + +export default function AppProfiling(props: { + session: ISession; + appProfilingLogs: IAppProfilingLogs; +}) { + const { appProfilingLogs, session } = props; + + const processedData = appProfilingLogs && useProfiling(session, appProfilingLogs); + return ( +
+ {appProfilingLogs && ( + <> +
+ +
+
+ +
+ + )} +
+ ); +} diff --git a/dashboard-frontend/src/components/session/session-logs/device-logs/device-log.tsx b/dashboard-frontend/src/components/session/session-logs/device-logs/device-log.tsx new file mode 100644 index 000000000..f70ad1e6f --- /dev/null +++ b/dashboard-frontend/src/components/session/session-logs/device-logs/device-log.tsx @@ -0,0 +1,174 @@ +import debounce from 'lodash/debounce'; +import { ArrowDown, ArrowUp, Search } from 'lucide-react'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { IDeviceLogs } from '../../../../interfaces/IDeviceLogs'; + +interface DeviceLogsProps { + deviceLogs: IDeviceLogs[] | null; +} + +function DeviceLogs({ deviceLogs }: DeviceLogsProps) { + const [searchQuery, setSearchQuery] = useState(''); + const [debouncedQuery, setDebouncedQuery] = useState(''); + const [currentMatchIndex, setCurrentMatchIndex] = useState(0); + const containerRef = useRef(null); + + // Debounced search update + const debouncedSetSearch = useCallback( + debounce((value: string) => { + setDebouncedQuery(value); + }, 300), + [], + ); + + const handleSearchChange = (value: string) => { + setSearchQuery(value); + debouncedSetSearch(value); + }; + + const matches = useMemo(() => { + if (!debouncedQuery.trim() || !deviceLogs) return []; + return deviceLogs.reduce( + (acc, log, lineIndex) => { + const lowerMessage = log.message.toLowerCase(); + const lowerQuery = debouncedQuery.toLowerCase(); + let position = 0; + let index = lowerMessage.indexOf(lowerQuery, position); + while (index !== -1) { + acc.push({ lineIndex, startIndex: index, endIndex: index + debouncedQuery.length }); + position = index + 1; + index = lowerMessage.indexOf(lowerQuery, position); + } + return acc; + }, + [] as Array<{ lineIndex: number; startIndex: number; endIndex: number }>, + ); + }, [deviceLogs, debouncedQuery]); + + useEffect(() => { + setCurrentMatchIndex(0); + }, [debouncedQuery]); + + useEffect(() => { + if (matches.length > 0 && containerRef.current) { + const currentMatch = matches[currentMatchIndex]; + const element = containerRef.current.querySelector(`[data-line="${currentMatch.lineIndex}"]`); + element?.scrollIntoView({ behavior: 'smooth', block: 'center' }); + } + }, [currentMatchIndex, matches]); + + const highlightText = (text: string, lineIndex: number) => { + if (!debouncedQuery.trim()) return text; + + const lineMatches = matches.filter((m) => m.lineIndex === lineIndex); + if (lineMatches.length === 0) return text; + + const parts = []; + let lastIndex = 0; + + lineMatches.forEach((match, idx) => { + // Add text before match + parts.push(text.slice(lastIndex, match.startIndex)); + // Add highlighted match + const isCurrentMatch = matches.indexOf(match) === currentMatchIndex; + parts.push( + + {text.slice(match.startIndex, match.endIndex)} + , + ); + lastIndex = match.endIndex; + }); + // Add remaining text + parts.push(text.slice(lastIndex)); + + return parts; + }; + + const navigateMatches = (direction: 'next' | 'prev') => { + if (matches.length === 0) return; + if (direction === 'next') { + setCurrentMatchIndex((prev) => (prev + 1) % matches.length); + } else { + setCurrentMatchIndex((prev) => (prev - 1 + matches.length) % matches.length); + } + }; + + return ( +
+
+
+
+
+ +
+ handleSearchChange(e.target.value)} + /> +
+ {matches.length > 0 && ( + <> +
+ {currentMatchIndex + 1}/{matches.length} +
+ + + + )} +
+
+
+ {deviceLogs && deviceLogs.length ? ( +
+ {deviceLogs.map((log, i) => ( +
+ + {i + 1} + + + {highlightText(log.message, i)} + +
+ ))} +
+ ) : ( +
+ Device log not available +
+ )} +
+
+ ); +} + +export default DeviceLogs; diff --git a/dashboard-frontend/src/components/session/session-logs/session-logs.tsx b/dashboard-frontend/src/components/session/session-logs/session-logs.tsx new file mode 100644 index 000000000..28a3c257d --- /dev/null +++ b/dashboard-frontend/src/components/session/session-logs/session-logs.tsx @@ -0,0 +1,153 @@ +import { useEffect, useState } from 'react'; +import TextLogs from './text-logs/text-logs'; +import DeviceFarmApiService from '../../../api-service'; +import DeviceLogs from './device-logs/device-log'; +import { IDeviceLogs } from '../../../interfaces/IDeviceLogs'; +import { ISession } from '../../../interfaces/ISession'; +import AppProfiling from './app-profiling/app-profiling'; +import { IAppProfilingLogs } from '../../../interfaces/IAppProfilingLogs'; + +function SessionLogs(props: { session: ISession }) { + const { session } = props; + const [url, setBaseUrl] = useState(); + const sessionId = session.id; + const [sessionLogs, setSessionLogs] = useState([]); + const [deviceLogs, setDeviceLogs] = useState([]); + const [showImages, setShowImages] = useState(false); + const [showErrorsOnly, setShowErrorsOnly] = useState(false); + const [activeTab, setActiveTab] = useState('text-logs'); + const [appProfilingLogs, setAppProfilingLogs] = useState(null); + + useEffect(() => { + async function init() { + try { + const sessionLogs = await DeviceFarmApiService.getSessionLogs(sessionId as string); + setSessionLogs(sessionLogs); + const baseURL = window.location.protocol + '//' + window.location.host; + setBaseUrl(baseURL); + } catch (error) { + console.log(error); + } + } + init(); + }, []); + + async function fetchDeviceLogs() { + if (session.deviceLogs) { + const deviceLogs = await DeviceFarmApiService.getDeviceLogs(sessionId as string); + setDeviceLogs(deviceLogs); + } else { + setDeviceLogs([]); + } + } + + async function fetchAppProfilingLogs() { + if (session.appProfiling) { + const appProfiling = await DeviceFarmApiService.getAppProfiling(sessionId as string); + setAppProfilingLogs(appProfiling); + } + } + + return ( +
+
+ + + + +
+ + {/* Log Controls */} + {activeTab === 'text-logs' && ( +
+ + +
+ )} + + {/* Log Content */} +
+ {activeTab === 'text-logs' && ( + + )} + {activeTab === 'device-logs' && } + {activeTab === 'app-profiling' && ( + + )} +
+
+ ); +} + +export default SessionLogs; diff --git a/dashboard-frontend/src/components/session/session-logs/text-logs/text-logs.tsx b/dashboard-frontend/src/components/session/session-logs/text-logs/text-logs.tsx new file mode 100644 index 000000000..996b77fcd --- /dev/null +++ b/dashboard-frontend/src/components/session/session-logs/text-logs/text-logs.tsx @@ -0,0 +1,460 @@ +import { Clock, X } from 'lucide-react'; +import { Highlight, themes, type Language } from 'prism-react-renderer'; +import { useState } from 'react'; +import { ISessionLogs } from '../../../../interfaces/ISessionLogs'; +import '../../style.css'; + +interface TextLogsProps { + sessionLogs: ISessionLogs[]; + showImages: boolean; + showErrorsOnly: boolean; + baseUrl: any; +} + +const isValidJSON = (str: string): boolean => { + if (typeof str !== 'string') return false; + try { + JSON.parse(str); + return true; + } catch (e) { + return false; + } +}; + +const isXMLLike = (str: string): boolean => { + if (typeof str !== 'string') return false; + return /^\s*<[^>]+>/.test(str); +}; + +const formatXML = (xml: string): string => { + let formatted = ''; + const reg = /(>)(<)(\/*)/g; + xml = xml.replace(reg, '$1\r\n$2$3'); + let pad = 0; + + xml.split('\r\n').forEach((node) => { + let indent = 0; + if (node.match(/.+<\/\w[^>]*>$/)) { + indent = 0; + } else if (node.match(/^<\/\w/)) { + if (pad !== 0) pad -= 1; + } else if (node.match(new RegExp('^<\\w[^>]*[^/]>.*$'))) { + indent = 1; + } else { + indent = 0; + } + + let padding = ''; + for (let i = 0; i < pad; i++) padding += ' '; + + formatted += padding + node + '\r\n'; + pad += indent; + }); + + return formatted.trim(); +}; + +const formatData = (data: any): any => { + if (!data) return ''; + + if (typeof data === 'object') { + return JSON.stringify(data, null, 2); + } + + try { + if (isValidJSON(data)) { + return JSON.stringify(JSON.parse(data), null, 2); + } + if (isXMLLike(data)) { + return formatXML(data); + } + return data; + } catch (e) { + return data; + } +}; + +interface Token { + types: string[]; + content: string; + empty?: boolean; +} + +interface LineInputProps { + line: Token[]; + key?: number; + style?: React.CSSProperties; + className?: string; +} + +interface TokenInputProps { + token: Token; + key?: number; + style?: React.CSSProperties; + className?: string; +} + +const CodeBlock = ({ code, language }: { code: string; language: string }) => { + // Helper function to check if a line contains error-related content + const isErrorLine = (line: string): boolean => { + const errorKeywords = ['error', 'exception', 'failed', 'failure', 'fatal', 'crash']; + return errorKeywords.some((keyword) => line.toLowerCase().includes(keyword)); + }; + + return ( + + {({ className, style, tokens, getLineProps, getTokenProps }) => ( +
+          {tokens.map((line, i) => {
+            const lineContent = line.map((token) => token.content).join('');
+            const isError = isErrorLine(lineContent);
+
+            return (
+              
+ + {i + 1} + + + {line.map((token, key) => ( + + ))} + +
+ ); + })} +
+ )} +
+ ); +}; + +const DataViewer = ({ data }: { data: any }) => { + const formattedData = formatData(data); + + if (typeof data === 'object' && data !== null && data.error) { + return ( +
+
+
+
{data.error}
+
{data.message}
+
+
+ {data.stacktrace && ( +
+ +
+ )} +
+ ); + } + + if (typeof data === 'object' && data !== null) { + return ( +
+ +
+ ); + } + + if (isXMLLike(formattedData)) { + return ( +
+ +
+ ); + } + + if (isValidJSON(formattedData)) { + return ( +
+ +
+ ); + } + + return ( +
+      {String(formattedData)}
+    
+ ); +}; + +interface ImageModalProps { + src: string; + alt: string; + onClose: () => void; +} + +const ImageModal = ({ src, alt, onClose }: ImageModalProps) => { + return ( +
+
+ + {alt} +
+
+ ); +}; + +function TextLogs({ sessionLogs, showImages, showErrorsOnly, baseUrl }: TextLogsProps) { + const [expandedIndex, setExpandedIndex] = useState(null); + const [selectedImage, setSelectedImage] = useState(null); + + const isEmptyObject = (obj: any) => { + if (!obj) return true; + return Object.keys(obj).length === 0; + }; + + const hasError = (response: any) => { + try { + const parsedResponse = typeof response === 'string' ? JSON.parse(response) : response; + return parsedResponse?.value?.error !== undefined; + } catch (e) { + return false; + } + }; + + return ( + <> +
+ {sessionLogs + .sort((a, b) => (a.createdAt > b.createdAt ? 1 : -1)) + .filter((sessionLog) => (showErrorsOnly ? hasError(sessionLog.response) : true)) + .map((sessionLog, index, array) => { + const currentTime = new Date(sessionLog.createdAt); + const nextTime = index < array.length - 1 ? new Date(array[index + 1].createdAt) : null; + const timeDifference = nextTime ? nextTime.getTime() - currentTime.getTime() : null; + const formattedBody = sessionLog.body ? JSON.parse(sessionLog.body) : null; + const formattedResponse = sessionLog.response + ? JSON.parse(sessionLog.response)?.value + : null; + const isExpanded = expandedIndex === index; + const isError = hasError(sessionLog.response); + + return ( +
+ + + {isExpanded && ( +
+
+ {showImages && sessionLog.screenshot && ( +
+ +
+ )} + +
+
+
+ Response +
+
+ +
+
+ + {!isEmptyObject(formattedBody) && ( +
+
+ Parameters +
+
+ +
+
+ )} +
+
+
+ )} +
+ ); + })} +
+ + {selectedImage && ( + setSelectedImage(null)} + /> + )} + + ); +} + +export default TextLogs; diff --git a/dashboard-frontend/src/components/session/style.css b/dashboard-frontend/src/components/session/style.css new file mode 100644 index 000000000..1243713e1 --- /dev/null +++ b/dashboard-frontend/src/components/session/style.css @@ -0,0 +1,8 @@ +/* styles.css */ +.table-header { + @apply p-3 font-bold whitespace-nowrap text-center bg-gray-800 text-yellow-400; +} + +.table-data { + @apply p-3; +} diff --git a/dashboard-frontend/src/components/sidebar/Sidebar.tsx b/dashboard-frontend/src/components/sidebar/Sidebar.tsx new file mode 100644 index 000000000..a80e9f544 --- /dev/null +++ b/dashboard-frontend/src/components/sidebar/Sidebar.tsx @@ -0,0 +1,61 @@ +// import './sidebar.css'; +// import DeviceFarmLogo from '../../assets/device-farm-logo.png'; +// import BuildsIcon from '../../assets/builds.svg'; +// import BuildsSelectedIcon from '../../assets/builds-selected.svg'; +// import DevicesIcon from '../../assets/devices-icon.svg'; +// import DevicesSelectedIcon from '../../assets/devices-icon-selected.svg'; +// import { useLocation, useNavigate } from 'react-router-dom'; + +// const Sidebar = () => { +// const deviceFarmRoute = '/'; +// const buildsRoute = '/builds'; + +// const { pathname } = useLocation(); +// const navigate = useNavigate(); + +// const renderSidebarButton = ( +// isSelected: boolean, +// path: string, +// icon: string, +// selectedIcon: string, +// alt: string, +// ) => { +// return ( +// +// ); +// }; +// return ( +//
+// Appium Device Farm navigate(deviceFarmRoute)} +// /> +//
+// {renderSidebarButton( +// pathname === deviceFarmRoute, +// deviceFarmRoute, +// DevicesIcon, +// DevicesSelectedIcon, +// 'Devices', +// )} +// {renderSidebarButton( +// pathname.startsWith(buildsRoute), +// buildsRoute, +// BuildsIcon, +// BuildsSelectedIcon, +// 'Builds', +// )} +//
+//
+// ); +// }; + +// export default Sidebar; diff --git a/dashboard-frontend/src/components/stats/trends.tsx b/dashboard-frontend/src/components/stats/trends.tsx new file mode 100644 index 000000000..537b14c65 --- /dev/null +++ b/dashboard-frontend/src/components/stats/trends.tsx @@ -0,0 +1,763 @@ +import React, { useEffect, useState, useMemo } from 'react'; +import { + BarChart, + Bar, + XAxis, + YAxis, + Tooltip, + Legend, + ResponsiveContainer, + PieChart, + Pie, + Cell, + LineChart, + Line, + AreaChart, + Area, + CartesianGrid, +} from 'recharts'; +import { + BarChart2, + PieChart as PieChartIcon, + Clock, + Smartphone, + Activity, + ChevronDown, + Search, + X, +} from 'lucide-react'; +import DeviceFarmApiService from '../../api-service'; +import { IBuild } from '../../interfaces/IBuild'; +import { ISession } from '../../interfaces/ISession'; +import { format, parse, isValid } from 'date-fns'; + +const COLORS = { + success: ['#22c55e', '#15803d'], // Green gradient for Pass + warning: ['#fbbf24', '#d97706'], // Yellow gradient for Unmarked + danger: ['#ef4444', '#b91c1c'], // Red gradient for Fail + accent: [ + ['#8b5cf6', '#6d28d9'], // Purple gradient + ['#ec4899', '#be185d'], // Pink gradient + ['#06b6d4', '#0891b2'], // Cyan gradient + ['#10b981', '#047857'], // Emerald gradient + ['#f59e0b', '#d97706'], // Amber gradient + ], +}; + +const gradientDefs = ( + + {/* Pass gradient */} + + + + + {/* Fail gradient */} + + + + + {/* Unmarked gradient */} + + + + + {/* Device Usage gradients */} + {COLORS.accent.map((colorPair, i) => ( + + + + + ))} + {/* Duration gradient */} + + + + + {/* Count gradient */} + + + + + +); + +const Card = ({ + children, + title, + icon: Icon, +}: { + children: React.ReactNode; + title: string; + icon: React.ElementType; +}) => ( +
+ {/* Gradient overlay */} +
+ + {/* Glow effect */} +
+ + {/* Content */} +
+

+ {Icon && ( +
+ +
+ )} + {title} +

+ {children} +
+
+); + +const CustomDropdown = ({ + value, + onChange, + options, +}: { + value: string; + onChange: (value: string) => void; + options: { value: string; label: string }[]; +}) => { + const [isOpen, setIsOpen] = useState(false); + const [searchTerm, setSearchTerm] = useState(''); + + const selectedOption = options.find((opt) => opt.value === value); + + const filteredOptions = options.filter((option) => + option.label.toLowerCase().includes(searchTerm.toLowerCase()), + ); + + return ( +
+ {/* Selected Value Button */} + + + {/* Dropdown Panel */} + {isOpen && ( +
+ {/* Search Input */} +
+ + setSearchTerm(e.target.value)} + placeholder="Search builds..." + className="w-full bg-transparent border-none text-sm text-white placeholder-gray-400 + focus:outline-none focus:ring-0" + /> + {searchTerm && ( + + )} +
+ + {/* Options List */} +
+ {filteredOptions.length === 0 ? ( +
No builds found
+ ) : ( + filteredOptions.map((option) => ( + + )) + )} +
+
+ )} +
+ ); +}; + +const safeParseDate = (dateString: string): Date | null => { + if (!dateString) return null; + + try { + const date = new Date(dateString); + return isValid(date) ? date : null; + } catch { + return null; + } +}; + +const formatDate = (dateString: string): string => { + const parsedDate = safeParseDate(dateString); + return parsedDate instanceof Date ? format(parsedDate, 'dd/MM/yyyy HH:mm') : dateString; +}; + +const formatDateOnly = (dateString: string): string => { + const parsedDate = safeParseDate(dateString); + return parsedDate instanceof Date ? format(parsedDate, 'dd/MM/yyyy') : dateString; +}; + +const chartStyle = { + color: '#ffffff', + fontFamily: 'Inter, system-ui, sans-serif', +}; + +const modernChartConfig = { + tooltipStyle: { + backgroundColor: 'rgba(255, 255, 255, 0.95)', + backdropFilter: 'blur(8px)', + border: '1px solid rgba(255, 255, 255, 0.2)', + boxShadow: '0 8px 32px rgba(0, 0, 0, 0.2)', + padding: '12px 16px', + fontFamily: 'Inter, system-ui, sans-serif', + fontSize: '13px', + color: '#1f2937', + }, + axisStyle: { + stroke: '#6b7280', + fontSize: '12px', + fontWeight: 500, + fontFamily: 'Inter, system-ui, sans-serif', + }, + gridStyle: { + stroke: 'rgba(75, 85, 99, 0.15)', + strokeDasharray: '6 6', + }, + legendStyle: { + fontSize: '13px', + fontWeight: 500, + fontFamily: 'Inter, system-ui, sans-serif', + }, +}; + +export function EnhancedTrends() { + const [builds, setBuilds] = useState([]); + const [sessions, setSessions] = useState([]); + const [selectedBuild, setSelectedBuild] = useState(null); + + useEffect(() => { + async function fetchData() { + try { + const [fetchedBuilds, fetchedSessions] = await Promise.all([ + DeviceFarmApiService.getBuilds(), + DeviceFarmApiService.getSessions(), + ]); + setBuilds(fetchedBuilds); + setSessions(fetchedSessions); + if (fetchedBuilds.length > 0) { + setSelectedBuild(fetchedBuilds[0].id); + } + } catch (error) { + console.error('Error fetching data:', error); + } + } + fetchData(); + }, []); + + const getChartData = useMemo(() => { + return builds.map((build) => { + const buildSessions = sessions.filter((session) => session.buildId === build.id); + const passed = buildSessions.filter((session) => session.status === 'passed').length; + const failed = buildSessions.filter((session) => session.status === 'failed').length; + const unmarked = buildSessions.filter( + (session) => session.status === 'unmarked' || !session.status, + ).length; + + return { + name: build.name || build.id, + Pass: passed, + Fail: failed, + Unmarked: unmarked, + }; + }); + }, [builds, sessions]); + + const getPieData = useMemo(() => { + if (!selectedBuild) return []; + const buildSessions = sessions.filter((session) => session.buildId === selectedBuild); + const passed = buildSessions.filter((session) => session.status === 'passed').length; + const failed = buildSessions.filter((session) => session.status !== 'passed').length; + return [ + { name: 'Pass', value: passed }, + { name: 'Fail', value: failed }, + ]; + }, [selectedBuild, sessions]); + + const getTestDurationData = useMemo(() => { + const groupedByDate: { [key: string]: number[] } = sessions + .filter((session) => { + const startDate = safeParseDate(session.startTime); + const endDate = safeParseDate(session.endTime || ''); + return startDate && endDate; + }) + .reduce( + (acc, session) => { + const startDate = safeParseDate(session.startTime)!; + const endDate = safeParseDate(session.endTime || '')!; + const dateKey = format(startDate, 'dd/MM/yyyy'); + + const duration = Math.round((endDate.getTime() - startDate.getTime()) / (1000 * 60)); + + if (!acc[dateKey]) { + acc[dateKey] = []; + } + acc[dateKey].push(duration); + return acc; + }, + {} as { [key: string]: number[] }, + ); + + return Object.entries(groupedByDate) + .map(([date, durations]) => ({ + name: date, + duration: Math.round(durations.reduce((sum, val) => sum + val, 0) / durations.length), + count: durations.length, + })) + .sort((a, b) => a.name.localeCompare(b.name)); + }, [sessions]); + + const getDeviceUsageData = useMemo(() => { + const deviceUsage: { [key: string]: number } = {}; + sessions.forEach((session) => { + if (!deviceUsage[session.deviceName]) { + deviceUsage[session.deviceName] = 0; + } + deviceUsage[session.deviceName]++; + }); + return Object.entries(deviceUsage).map(([name, value]) => ({ name, value })); + }, [sessions]); + + const getTestCountOverTime = useMemo(() => { + const countOverTime = builds + .map((build) => { + const buildSessions = sessions.filter((session) => session.buildId === build.id); + return { + name: build.name || build.id, + count: buildSessions.length, + }; + }) + .sort((a, b) => a.name.localeCompare(b.name)); + return countOverTime; + }, [builds, sessions]); + + const getTestDurationDistribution = useMemo(() => { + const durationRanges = { + '0-5min': 0, + '5-15min': 0, + '15-30min': 0, + '30-60min': 0, + '60+min': 0, + }; + + sessions.forEach((session) => { + const startDate = safeParseDate(session.startTime); + const endDate = safeParseDate(session.endTime || ''); + + if (startDate && endDate) { + const duration = Math.round((endDate.getTime() - startDate.getTime()) / (1000 * 60)); + + if (duration <= 5) durationRanges['0-5min']++; + else if (duration <= 15) durationRanges['5-15min']++; + else if (duration <= 30) durationRanges['15-30min']++; + else if (duration <= 60) durationRanges['30-60min']++; + else durationRanges['60+min']++; + } + }); + + return Object.entries(durationRanges).map(([range, count]) => ({ + name: range, + count, + })); + }, [sessions]); + + const getDeviceSuccessRate = useMemo(() => { + const deviceStats: { [key: string]: { total: number; passed: number } } = {}; + + sessions.forEach((session) => { + if (!deviceStats[session.deviceName]) { + deviceStats[session.deviceName] = { total: 0, passed: 0 }; + } + deviceStats[session.deviceName].total++; + if (session.status === 'passed') { + deviceStats[session.deviceName].passed++; + } + }); + + return Object.entries(deviceStats) + .map(([device, stats]) => ({ + name: device, + successRate: (stats.passed / stats.total) * 100, + total: stats.total, + })) + .sort((a, b) => b.successRate - a.successRate); + }, [sessions]); + + return ( +
+ {/* Test Trends - Full Width */} + + + + {gradientDefs} + + + + [`${value} tests`, name]} + labelStyle={{ color: '#4b5563' }} + /> + + + + + + + + + {/* Build Statistics and Device Usage */} +
+ + ({ + value: build.id, + label: build.name || build.id, + }))} + /> + + + {gradientDefs} + `${name} ${(percent * 100).toFixed(0)}%`} + > + {getPieData.map((entry, index) => ( + + ))} + + [`${value} tests`, name]} + labelStyle={{ color: '#4b5563' }} + /> + + + + + + + + + {gradientDefs} + `${name} ${(percent * 100).toFixed(0)}%`} + > + {getDeviceUsageData.map((entry, index) => ( + + ))} + + [`${value} tests`, 'Device Usage']} + labelStyle={{ color: '#4b5563' }} + /> + + + + +
+ + {/* Test Duration Trend and Test Count Over Time */} +
+ + + + + + + + + + + + + [ + `${value} minutes (${props.payload.count} tests)`, + 'Average Duration', + ]} + labelStyle={{ color: '#4b5563' }} + /> + + + + + + + + + + + + + + + + + + [`${value} tests`, 'Test Count']} + labelStyle={{ color: '#4b5563' }} + /> + + + + +
+ + {/* Test Duration Distribution and Device Pass Percentage */} +
+ + + + {gradientDefs} + + + + [`${value} tests`, 'Duration Range']} + cursor={{ fill: 'rgba(255, 255, 255, 0.02)' }} + labelStyle={{ color: '#4b5563' }} + /> + + + + + + + + + {gradientDefs} + + `${value}%`} + /> + + [ + `${value.toFixed(1)}% (${props.payload.total} tests)`, + 'Pass Rate', + ]} + cursor={{ fill: 'rgba(255, 255, 255, 0.02)' }} + labelStyle={{ color: '#4b5563' }} + /> + + {getDeviceSuccessRate.map((entry, index) => ( + = 80 + ? '#passGradient' + : entry.successRate >= 60 + ? '#unmarkedGradient' + : '#failGradient' + })`} + style={{ + filter: `drop-shadow(0px 0px 10px ${ + entry.successRate >= 80 + ? 'rgba(34, 197, 94, 0.2)' + : entry.successRate >= 60 + ? 'rgba(251, 191, 36, 0.2)' + : 'rgba(239, 68, 68, 0.2)' + })`, + }} + /> + ))} + + + + +
+
+ ); +} + +export default EnhancedTrends; diff --git a/dashboard-frontend/src/components/table-filter/table-filter.tsx b/dashboard-frontend/src/components/table-filter/table-filter.tsx new file mode 100644 index 000000000..392abcb2e --- /dev/null +++ b/dashboard-frontend/src/components/table-filter/table-filter.tsx @@ -0,0 +1,173 @@ +import { useState, useEffect, useRef } from 'react'; +import { Filter, Clock, ChevronDown, X } from 'lucide-react'; + +interface FilterCondition { + column: string; + operator: string; + value: string; +} + +interface FilterData { + testName: string; + platform: string; + device: string; + status: string; +} + +interface TableFilterProps { + columns: { key: string; label: string }[]; + data: FilterData[]; + onFilterChange: (filters: FilterCondition[]) => void; +} + +const OPERATORS = ['=', '!=', 'contains', 'starts with', 'ends with']; + +export default function TableFilter({ columns, data, onFilterChange }: TableFilterProps) { + const [isOpen, setIsOpen] = useState(false); + const [timeRange, setTimeRange] = useState('24 hours'); + const [filters, setFilters] = useState([]); + const [uniqueValues, setUniqueValues] = useState>>({}); + const [showValueDropdown, setShowValueDropdown] = useState(null); + const filterRef = useRef(null); + + useEffect(() => { + const values: Record> = {}; + columns.forEach(({ key }) => { + values[key] = new Set( + data + .map((item) => { + const value = item[key as keyof FilterData]; + return value || ''; + }) + .filter((value) => value !== '') + .sort(), + ); + }); + setUniqueValues(values); + }, [data, columns]); + + useEffect(() => { + function handleClickOutside(event: MouseEvent) { + if (filterRef.current && !filterRef.current.contains(event.target as Node)) { + setIsOpen(false); + setShowValueDropdown(null); + } + } + + document.addEventListener('mousedown', handleClickOutside); + return () => document.removeEventListener('mousedown', handleClickOutside); + }, []); + + const handleAddFilter = () => { + const newFilter = { column: columns[0].key, operator: '=', value: '' }; + setFilters((prevFilters) => [...prevFilters, newFilter]); + }; + + const handleRemoveFilter = (index: number) => { + setFilters((prevFilters) => { + const newFilters = prevFilters.filter((_, i) => i !== index); + onFilterChange(newFilters); + return newFilters; + }); + }; + + const handleFilterChange = (index: number, field: keyof FilterCondition, value: string) => { + setFilters((prevFilters) => { + const newFilters = prevFilters.map((filter, i) => { + if (i === index) { + // If changing column, reset the value + if (field === 'column') { + return { ...filter, [field]: value, value: '' }; + } + return { ...filter, [field]: value }; + } + return filter; + }); + onFilterChange(newFilters); + return newFilters; + }); + }; + + return ( +
+ + + {isOpen && ( +
+ {filters.map((filter, index) => ( +
+ + +
+ handleFilterChange(index, 'value', e.target.value)} + onFocus={() => setShowValueDropdown(index)} + className="w-full px-2 py-1.5 bg-gray-900 border border-gray-700 text-sm text-gray-300" + placeholder="Value" + /> + {showValueDropdown === index && + uniqueValues[filter.column] && + uniqueValues[filter.column].size > 0 && ( +
+ {Array.from(uniqueValues[filter.column]).map((value) => ( + + ))} +
+ )} +
+ +
+ ))} + +
+ )} +
+ ); +} diff --git a/dashboard-frontend/src/components/ui/tag-input.tsx b/dashboard-frontend/src/components/ui/tag-input.tsx new file mode 100644 index 000000000..acad07f59 --- /dev/null +++ b/dashboard-frontend/src/components/ui/tag-input.tsx @@ -0,0 +1,53 @@ +import { useState } from 'react'; +import { TagsInput } from 'react-tag-input-component'; + +interface iTag { + tags: string[]; + onSave: (tags: string[]) => void; +} + +export const TagInput = ({ tags, onSave }: iTag) => { + const [_tags, setTags] = useState(tags); + const [tagsInEdit, setTagsInEdit] = useState(''); + + return ( +
+ { + setTagsInEdit(''); + setTags(newtags); + }} + onKeyUp={(e) => { + if (e.key.toString().length === 1) { + setTagsInEdit(tagsInEdit + e.key); + } + }} + name="device tags" + placeHolder="Add tags and press enter" + classNames={{ + tag: '!bg-gray-700 text-gray-300 text-xs font-medium me-2 rounded', + input: + 'text-gray-700 h-3 !text-sm text-xs font-medium border-transparent focus:border-transparent focus:ring-0 !w-[100%]', + }} + /> + +
+ ); +}; diff --git a/dashboard-frontend/src/contexts/AuthContext.tsx b/dashboard-frontend/src/contexts/AuthContext.tsx new file mode 100644 index 000000000..74a1af383 --- /dev/null +++ b/dashboard-frontend/src/contexts/AuthContext.tsx @@ -0,0 +1,128 @@ +import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react'; +import AuthService, { User } from '../services/AuthService'; + +// Auth context interface +interface AuthContextType { + user: User | null; + loading: boolean; + error: string | null; + login: (username: string, password: string) => Promise; + logout: () => void; + isAdmin: () => boolean; + isCurrentUser: (userId?: string) => boolean; + isAuthDisabled: boolean; +} + +// Create context with default values +const AuthContext = createContext({ + user: null, + loading: false, + error: null, + login: async () => {}, + logout: () => {}, + isAdmin: () => false, + isCurrentUser: (userId?: string) => false, + isAuthDisabled: false, +}); + +// Auth provider props +interface AuthProviderProps { + children: ReactNode; +} + +// Auth provider component +export const AuthProvider: React.FC = ({ children }) => { + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const [isAuthDisabled, setIsAuthDisabled] = useState(false); + + // Initialize auth on component mount + useEffect(() => { + let isMounted = true; + + const initAuth = async () => { + try { + AuthService.initAuth(); + const currentUser = await AuthService.getCurrentUser(); + if (isMounted && currentUser) { + setUser(currentUser); + setIsAuthDisabled(!AuthService.isAuthenticated()); + } + } catch (err) { + console.error('Error fetching user:', err); + if (isMounted) { + AuthService.logout(); + } + } finally { + if (isMounted) { + setLoading(false); + } + } + }; + + initAuth(); + + return () => { + isMounted = false; + }; + }, []); // Empty dependency array since this should only run once on mount + + // Login function + const login = async (username: string, password: string) => { + setLoading(true); + setError(null); + + try { + const response = await AuthService.login(username, password); + // Ensure we have all user data including access key + if (!response.user.accessKey) { + // If access key is missing, fetch complete user data + const completeUser = await AuthService.getCurrentUser(); + setUser(completeUser); + } else { + setUser(response.user); + } + } catch (err) { + console.log(err); + setError('Invalid username or password'); + throw err; + } finally { + setLoading(false); + } + }; + + // Logout function + const logout = () => { + AuthService.logout(); + setUser(null); + }; + + // Check if user is admin + const isAdmin = () => { + return user?.role === 'admin'; + }; + + const isCurrentUser = (userId?: string) => { + return !!userId && user?.id === userId; + }; + + // Context value + const value = { + user, + loading, + error, + login, + logout, + isAdmin, + isAuthDisabled, + isCurrentUser, + }; + + return {children}; +}; + +// Custom hook to use auth context +export const useAuth = () => useContext(AuthContext); + +export default AuthContext; diff --git a/dashboard-frontend/src/contexts/ConfigContext.tsx b/dashboard-frontend/src/contexts/ConfigContext.tsx new file mode 100644 index 000000000..4e49b5ba1 --- /dev/null +++ b/dashboard-frontend/src/contexts/ConfigContext.tsx @@ -0,0 +1,35 @@ +import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react'; + +// Config context interface +interface ConfigContextType { + loading: boolean; +} + +// Create context with default values +const ConfigContext = createContext({ + loading: true, +}); + +// Config provider props +interface ConfigProviderProps { + children: ReactNode; +} + +// Config provider component +export const ConfigProvider: React.FC = ({ children }) => { + const [loading, setLoading] = useState(true); + + useEffect(() => { + document.title = 'Appium Device Farm'; + setLoading(false); + }, []); + + const value = { + loading, + }; + + return {children}; +}; + +// Custom hook to use config context +export const useConfig = () => useContext(ConfigContext); diff --git a/dashboard-frontend/src/index.css b/dashboard-frontend/src/index.css new file mode 100644 index 000000000..dd2b2e9f6 --- /dev/null +++ b/dashboard-frontend/src/index.css @@ -0,0 +1,114 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +.modal-small { + position: absolute; + height: 300px; + width: 600px; + margin: auto; + border-radius: 15px; + box-shadow: + rgba(0, 0, 0, 0.2) 0px 11px 15px -7px, + rgba(0, 0, 0, 0.14) 0px 24px 38px 3px, + rgba(0, 0, 0, 0.12) 0px 9px 46px 8px; + background: #fff; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.modal-medium { + position: absolute; + height: 400px; + width: 60%; + margin: auto; + border-radius: 15px; + box-shadow: + rgba(0, 0, 0, 0.2) 0px 11px 15px -7px, + rgba(0, 0, 0, 0.14) 0px 24px 38px 3px, + rgba(0, 0, 0, 0.12) 0px 9px 46px 8px; + background: #fff; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.Overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + transition: opacity 5000ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; +} + +.rti--container { + @apply bg-gray-800 gap-0 w-[100%]; +} + +/* Enhanced lens-like cursor bubble */ +.cursor-bubble { + width: 18px; + height: 18px; + background: rgba(255, 255, 255, 0.1); + border: 1.5px solid rgba(255, 255, 255, 0.5); + border-radius: 50%; + position: fixed; + pointer-events: none; + top: -9px; + /* Half the height */ + left: -9px; + /* Half the width */ + transform-origin: center; + will-change: transform; + z-index: 1002; + box-shadow: + 0 0 0 1px rgba(0, 0, 0, 0.2), + inset 0 1px 2px rgba(255, 255, 255, 0.2), + 0 2px 4px rgba(0, 0, 0, 0.3); + backdrop-filter: blur(1px) brightness(1.1); +} + +/* Lens reflection effect */ +.cursor-bubble::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + border-radius: 50%; + background: + linear-gradient(135deg, + rgba(255, 255, 255, 0.4) 0%, + transparent 50%, + rgba(255, 255, 255, 0.1) 100%); + transform: rotate(-45deg); + pointer-events: none; +} + +/* Lens rim highlight */ +.cursor-bubble::after { + content: ''; + position: absolute; + top: -1px; + left: -1px; + right: -1px; + bottom: -1px; + border-radius: 50%; + background: + linear-gradient(45deg, + rgba(255, 255, 255, 0.5), + transparent 40%, + transparent 60%, + rgba(255, 255, 255, 0.3)); + pointer-events: none; + z-index: -1; +} diff --git a/dashboard-frontend/src/index.d.ts b/dashboard-frontend/src/index.d.ts new file mode 100644 index 000000000..5f8cc1dd3 --- /dev/null +++ b/dashboard-frontend/src/index.d.ts @@ -0,0 +1,4 @@ +declare module '*.svg'; +declare module '*.png'; +declare module '*.gif'; +declare module '*.jpeg'; diff --git a/dashboard-frontend/src/interfaces/IAppProfilingLogs.ts b/dashboard-frontend/src/interfaces/IAppProfilingLogs.ts new file mode 100644 index 000000000..4ad81ea4d --- /dev/null +++ b/dashboard-frontend/src/interfaces/IAppProfilingLogs.ts @@ -0,0 +1,15 @@ +export interface IAppProfilingLogs { + device_info: { + total_cpu: number; + total_memory: string; + api_level: number; + app_package: string; + }; + profiling_logs: { + timestamp: string; + cpu: string; + memory: string; + total_cpu_used: string; + total_memory_used: string; + }[]; +} diff --git a/dashboard-frontend/src/interfaces/IBuild.ts b/dashboard-frontend/src/interfaces/IBuild.ts new file mode 100644 index 000000000..7a7db6a7c --- /dev/null +++ b/dashboard-frontend/src/interfaces/IBuild.ts @@ -0,0 +1,6 @@ +export interface IBuild { + id: string; + name: string; + createdAt: string; + updatedAt: string; +} diff --git a/dashboard-frontend/src/interfaces/IDevice.ts b/dashboard-frontend/src/interfaces/IDevice.ts new file mode 100644 index 000000000..1066352f7 --- /dev/null +++ b/dashboard-frontend/src/interfaces/IDevice.ts @@ -0,0 +1,34 @@ +export interface IDevice { + name: string; + host: string; + udid: string; + sdk: string; + systemPort: number; + deviceType: 'simulator' | 'emulator' | 'real'; + offline: boolean; + userBlocked?: boolean; + busy: boolean; + platform: 'ios' | 'tvos' | 'android'; + state?: 'Booted' | 'Shutdown' | 'Creating'; + realDevice: boolean; + dashboard_link?: string; + total_session_count?: number; + totalUtilizationTimeMilliSec?: any; + session_id?: number; + liveStreaming: boolean; + width: string; + height: string; + mjpegServerPort?: number; + cloud?: string; + tags: string[]; + sessionResponse?: Record; + utilization?: number; + version?: string; + location?: string; + nodeId: string; + activeUser?: { + id: string; + firstname: string; + lastname: string; + }; +} diff --git a/dashboard-frontend/src/interfaces/IDeviceFilter.ts b/dashboard-frontend/src/interfaces/IDeviceFilter.ts new file mode 100644 index 000000000..dec01597d --- /dev/null +++ b/dashboard-frontend/src/interfaces/IDeviceFilter.ts @@ -0,0 +1,18 @@ +export interface IDeviceFilter { + platform: { + android: boolean; + ios: boolean; + }; + + state: { + ready: boolean; + offline: boolean; + busy: boolean; + }; + + name: string; + version?: string; + deviceType?: 'simulator' | 'emulator' | 'real'; + versions?: string[]; + tags?: string[]; +} diff --git a/dashboard-frontend/src/interfaces/IDeviceLogs.ts b/dashboard-frontend/src/interfaces/IDeviceLogs.ts new file mode 100644 index 000000000..52091fbd4 --- /dev/null +++ b/dashboard-frontend/src/interfaces/IDeviceLogs.ts @@ -0,0 +1,5 @@ +export interface IDeviceLogs { + timestamp: string; + level: string; + message: string; +} diff --git a/dashboard-frontend/src/interfaces/ISession.ts b/dashboard-frontend/src/interfaces/ISession.ts new file mode 100644 index 000000000..ecb91a38b --- /dev/null +++ b/dashboard-frontend/src/interfaces/ISession.ts @@ -0,0 +1,23 @@ +export interface ISession { + id: string; + buildId: string; + name: string | null; + status: string; + desiredCapabilities: string; + sessionCapabilities: string; + nodeId: string; + hasLiveVideo: boolean; + videoRecording: string | null; + startTime: string; + deviceLogs: string; + endTime: string | null; + failureReason: string | null; + deviceUdid: string; + devicePlatform: string; + deviceVersion: string; + deviceName: string; + createdAt: string; + updatedAt: string; + live?: string; + appProfiling?: string; +} diff --git a/dashboard-frontend/src/interfaces/ISessionLogs.ts b/dashboard-frontend/src/interfaces/ISessionLogs.ts new file mode 100644 index 000000000..26b4e23d8 --- /dev/null +++ b/dashboard-frontend/src/interfaces/ISessionLogs.ts @@ -0,0 +1,15 @@ +export interface ISessionLogs { + id: string; + session_id: string; + commandName: string; + url: string; + method: string; + title: string; + subtitle: string; + body: string; + response: string; + screenshot: string | null; + isSuccess: boolean; + createdAt: string; + updatedAt: string; +} diff --git a/dashboard-frontend/src/main.tsx b/dashboard-frontend/src/main.tsx new file mode 100644 index 000000000..e5eb7ef2e --- /dev/null +++ b/dashboard-frontend/src/main.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; +import { BrowserRouter, HashRouter } from 'react-router-dom'; +import './index.css'; + +ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( + + + + + , +); diff --git a/dashboard-frontend/src/pages/Auth/AdminDashboard.tsx b/dashboard-frontend/src/pages/Auth/AdminDashboard.tsx new file mode 100644 index 000000000..709ec9b1c --- /dev/null +++ b/dashboard-frontend/src/pages/Auth/AdminDashboard.tsx @@ -0,0 +1,601 @@ +import React, { useState, useEffect } from 'react'; +import { Card, Tabs, Button, Alert } from 'flowbite-react'; +import { useAuth } from '../../contexts/AuthContext'; +import { Navigate } from 'react-router-dom'; +import axios from 'axios'; +import { TrashIcon, UserPlusIcon, UserMinusIcon } from '@heroicons/react/24/outline'; + +// API base URL +const API_URL = '/device-farm/admin'; + +// Team interface +interface Team { + id: string; + name: string; + description: string | null; + createdAt: string; + updatedAt: string; + teamMembers?: TeamMember[]; +} + +// User interface +interface User { + id: string; + username: string; + role: string; + createdAt: string; + updatedAt: string; +} + +// Device interface +interface Device { + udid: string; + name: string; + platform: string; + version: string; + busy: boolean; +} + +// Device allocation interface +interface DeviceAllocation { + id: string; + deviceUdid: string; + teamId: string; + createdAt: string; + updatedAt: string; + team: Team; +} + +interface TeamMember { + id: string; + userId: string; + teamId: string; + user: User; +} + +const AdminDashboard: React.FC = () => { + const { user } = useAuth(); + const [teams, setTeams] = useState([]); + const [users, setUsers] = useState([]); + const [devices, setDevices] = useState([]); + const [allocations, setAllocations] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + // New team form state + const [newTeamName, setNewTeamName] = useState(''); + const [newTeamDescription, setNewTeamDescription] = useState(''); + + // New user form state + const [newUsername, setNewUsername] = useState(''); + const [newPassword, setNewPassword] = useState(''); + const [newRole, setNewRole] = useState('user'); + + // Allocation form state + const [selectedTeam, setSelectedTeam] = useState(''); + const [selectedDevice, setSelectedDevice] = useState(''); + + // Team member management state + const [selectedTeamForMembers, setSelectedTeamForMembers] = useState(''); + const [selectedUserForTeam, setSelectedUserForTeam] = useState(''); + const [successMessage, setSuccessMessage] = useState(''); + + // Fetch data on component mount + useEffect(() => { + const fetchData = async () => { + setLoading(true); + setError(null); + + try { + // Fetch teams + const teamsResponse = await axios.get(`${API_URL}/teams`); + setTeams(teamsResponse.data); + + // Fetch users + const usersResponse = await axios.get(`${API_URL}/auth/users`); + setUsers(usersResponse.data); + + // Fetch devices + const devicesResponse = await axios.get('/device-farm/api/device'); + setDevices(devicesResponse.data); + + // Fetch allocations + const allocationsResponse = await axios.get(`${API_URL}/device-allocations`); + setAllocations(allocationsResponse.data); + } catch (err) { + setError('Error fetching data'); + console.error('Error fetching data:', err); + } finally { + setLoading(false); + } + }; + + fetchData(); + }, []); + + // Redirect if not admin + if (user?.role !== 'admin') { + return ; + } + + // Create new team + const handleCreateTeam = async (e: React.FormEvent) => { + e.preventDefault(); + + try { + const response = await axios.post(`${API_URL}/teams`, { + name: newTeamName, + description: newTeamDescription || null, + }); + + setTeams([...teams, response.data]); + setNewTeamName(''); + setNewTeamDescription(''); + } catch (err) { + console.error('Error creating team:', err); + setError('Error creating team'); + } + }; + + // Create new user + const handleCreateUser = async (e: React.FormEvent) => { + e.preventDefault(); + + try { + const response = await axios.post(`${API_URL}/auth/register`, { + username: newUsername, + password: newPassword, + role: newRole, + }); + + setUsers([...users, response.data]); + setNewUsername(''); + setNewPassword(''); + setNewRole('user'); + } catch (err) { + console.error('Error creating user:', err); + setError('Error creating user'); + } + }; + + // Allocate device to team + const handleAllocateDevice = async (e: React.FormEvent) => { + e.preventDefault(); + + try { + const response = await axios.post(`${API_URL}/device-allocations`, { + deviceUdid: selectedDevice, + teamId: selectedTeam, + }); + + setAllocations([...allocations, response.data]); + setSelectedDevice(''); + setSelectedTeam(''); + } catch (err) { + console.error('Error allocating device:', err); + setError('Error allocating device'); + } + }; + + // Deallocate device from team + const handleDeallocateDevice = async (allocationId: string) => { + try { + await axios.delete(`${API_URL}/device-allocations/${allocationId}`); + setAllocations(allocations.filter((allocation) => allocation.id !== allocationId)); + } catch (err) { + console.error('Error deallocating device:', err); + setError('Error deallocating device'); + } + }; + + // Delete team + const handleDeleteTeam = async (teamId: string) => { + if (!window.confirm('Are you sure you want to delete this team?')) { + return; + } + + try { + await axios.delete(`${API_URL}/teams/${teamId}`); + setTeams(teams.filter((team) => team.id !== teamId)); + setSuccessMessage('Team deleted successfully'); + } catch (err) { + console.error('Error deleting team:', err); + setError('Error deleting team'); + } + }; + + // Add user to team + const handleAddUserToTeam = async (e: React.FormEvent) => { + e.preventDefault(); + setError(null); + + if (!selectedTeamForMembers || !selectedUserForTeam) { + setError('Please select both team and user'); + return; + } + + try { + console.log('Adding user to team:', { + teamId: selectedTeamForMembers, + userId: selectedUserForTeam, + selectedUser: users.find((u) => u.id === selectedUserForTeam), + selectedTeam: teams.find((t) => t.id === selectedTeamForMembers), + }); + + const response = await axios.post(`${API_URL}/teams/${selectedTeamForMembers}/members`, { + userId: selectedUserForTeam, + }); + + console.log('Response from server:', response.data); + + // Update the teams state to include the new team member + setTeams( + teams.map((team) => + team.id === selectedTeamForMembers + ? { + ...team, + teamMembers: [...(team.teamMembers || []), response.data], + } + : team, + ), + ); + + setSelectedUserForTeam(''); + setSelectedTeamForMembers(''); + setSuccessMessage('User added to team successfully'); + } catch (err: any) { + console.error('Error details:', { + error: err, + response: err.response?.data, + status: err.response?.status, + }); + setError(err.response?.data?.message || 'Error adding user to team'); + } + }; + + // Remove user from team + const handleRemoveUserFromTeam = async (teamId: string, userId: string) => { + try { + await axios.delete(`${API_URL}/teams/${teamId}/members/${userId}`); + + // Update the teams state to remove the team member + setTeams( + teams.map((team) => + team.id === teamId + ? { + ...team, + teamMembers: (team.teamMembers || []).filter((member) => member.userId !== userId), + } + : team, + ), + ); + + setSuccessMessage('User removed from team successfully'); + } catch (err) { + console.error('Error removing user from team:', err); + setError('Error removing user from team'); + } + }; + + if (loading) { + return
Loading...
; + } + + return ( +
+

Admin Dashboard

+ + {error && ( + + {error} + + )} + + {successMessage && ( + setSuccessMessage('')}> + {successMessage} + + )} + + + + +

Teams

+ +
+

Create New Team

+
+
+ + setNewTeamName(e.target.value)} + className="w-full p-2 border rounded" + required + /> +
+
+ +