From c7c47f6cd999d952077985538ac605bad834ca86 Mon Sep 17 00:00:00 2001 From: Altynbek Orumbayev Date: Mon, 24 Jul 2023 00:41:09 +0200 Subject: [PATCH 1/7] refactor: wip integrating 1.1 --- .gitignore | 2 + package-lock.json | 13440 +++++++++++++++++++++++++++ package.json | 2 + src/clients/SubtopiaAdminClient.ts | 1 - src/clients/SubtopiaRegistry.ts | 374 + src/constants/index.ts | 21 +- src/contracts/SMA.ts | 719 ++ src/contracts/SMI.ts | 2354 +++++ src/contracts/SML.ts | 1017 ++ src/contracts/SMR.ts | 1312 +++ src/index.ts | 6 +- src/interfaces/index.ts | 6 +- src/utils/index.ts | 127 +- tests/subtopia.test.ts | 132 +- yarn.lock | 3123 +++---- 15 files changed, 20995 insertions(+), 1641 deletions(-) create mode 100644 package-lock.json create mode 100644 src/clients/SubtopiaRegistry.ts create mode 100644 src/contracts/SMA.ts create mode 100644 src/contracts/SMI.ts create mode 100644 src/contracts/SML.ts create mode 100644 src/contracts/SMR.ts diff --git a/.gitignore b/.gitignore index e414511..5194e65 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,5 @@ lerna-debug.log* # misc coverage docs + +.env diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..fefac8f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,13440 @@ +{ + "name": "subtopia-js", + "version": "2.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "subtopia-js", + "version": "2.0.1", + "license": "SEE LICENSE IN LICENSE.md", + "dependencies": { + "@algorandfoundation/algokit-utils": "^2.3.1", + "algosdk": "2.3.0", + "beaker-ts": "^0.1.2" + }, + "devDependencies": { + "@feki.de/semantic-release-yarn": "1.0.1", + "@semantic-release/changelog": "6.0.3", + "@semantic-release/git": "10.0.1", + "@types/node": "^18.13.0", + "@types/react": "^18.0.26", + "@types/react-dom": "^18.0.9", + "@typescript-eslint/eslint-plugin": "^5.46.0", + "@typescript-eslint/parser": "^5.46.0", + "@vitejs/plugin-react": "^4.0.0", + "@vitest/coverage-c8": "^0.31.0", + "commitizen": "4.3.0", + "cz-conventional-changelog": "3.3.0", + "dotenv": "^16.3.1", + "dts-bundle-generator": "^8.0.0", + "eslint": "^8.29.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-prettier": "^4.2.1", + "prettier": "^2.8.1", + "semantic-release": "21.0.3", + "stylelint": "^14.16.0", + "stylelint-config-recommended": "^9.0.0", + "stylelint-config-sass-guidelines": "^9.0.1", + "ts-node": "^10.9.1", + "tslib": "^2.4.1", + "typescript": "^4.9.4", + "vite": "^4.0.0", + "vitest": "^0.31.0" + } + }, + "node_modules/@algorandfoundation/algokit-utils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@algorandfoundation/algokit-utils/-/algokit-utils-2.3.1.tgz", + "integrity": "sha512-SI5W6YLWdflCxtNHYVyPDnAA5f7D1RxFnfJ5Aw2RgBtm9LFyZEkYAz9q4zTaQWgFvRDTqkTDh0swdJex3XWgDA==", + "dependencies": { + "algosdk": "^2.3.0", + "algosdk2-2": "npm:algosdk@2.2.0", + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=16.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.22.0", + "@babel/helper-compilation-targets": "^7.22.1", + "@babel/helper-module-transforms": "^7.22.1", + "@babel/helpers": "^7.22.0", + "@babel/parser": "^7.22.0", + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.3", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.0", + "@babel/helper-validator-option": "^7.21.0", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/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, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-simple-access": "^7.21.5", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.21.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.21.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.21.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.21.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.21.9", + "@babel/traverse": "^7.22.1", + "@babel/types": "^7.22.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.4", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.19.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.21.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.21.4", + "@babel/parser": "^7.21.9", + "@babel/types": "^7.21.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.22.3", + "@babel/helper-environment-visitor": "^7.22.1", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.22.4", + "@babel/types": "^7.22.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.22.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.21.5", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz", + "integrity": "sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@commitlint/types": "^17.4.4", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/config-validator/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@commitlint/config-validator/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@commitlint/execute-rule": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz", + "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/load": { + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz", + "integrity": "sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@commitlint/config-validator": "^17.4.4", + "@commitlint/execute-rule": "^17.4.0", + "@commitlint/resolve-extends": "^17.4.4", + "@commitlint/types": "^17.4.4", + "@types/node": "*", + "chalk": "^4.1.0", + "cosmiconfig": "^8.0.0", + "cosmiconfig-typescript-loader": "^4.0.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0", + "resolve-from": "^5.0.0", + "ts-node": "^10.8.1", + "typescript": "^4.6.4 || ^5.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/load/node_modules/@types/node": { + "version": "20.2.5", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@commitlint/load/node_modules/cosmiconfig-typescript-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz", + "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=3" + } + }, + "node_modules/@commitlint/load/node_modules/typescript": { + "version": "5.1.3", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz", + "integrity": "sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@commitlint/config-validator": "^17.4.4", + "@commitlint/types": "^17.4.4", + "import-fresh": "^3.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0", + "resolve-global": "^1.0.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@commitlint/types": { + "version": "17.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz", + "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=v14" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "dev": true, + "license": "CC0-1.0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "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, + "license": "MIT", + "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.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "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/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.42.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@feki.de/semantic-release-yarn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@feki.de/semantic-release-yarn/-/semantic-release-yarn-1.0.1.tgz", + "integrity": "sha512-7y6PSJfJAnKu35exuPO32Iiy9e+Nab577bk4y+kO8Led3Zl/UcjiZxaYZenXZjMZg6Ms9vhNEXvUWUA3D9f5Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "execa": "^5.0.0", + "fs-extra": "^10.0.0", + "lodash": "^4.17.15", + "nerf-dart": "^1.0.0", + "normalize-url": "^6.0.0", + "rc": "^1.2.8", + "read-pkg": "^5.0.0", + "registry-auth-token": "^4.0.0", + "semver": "^7.1.2", + "tempy": "^1.0.0" + }, + "engines": { + "node": ">=16 || ^14.17" + }, + "peerDependencies": { + "semantic-release": ">=19.0.0" + } + }, + "node_modules/@feki.de/semantic-release-yarn/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@feki.de/semantic-release-yarn/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@feki.de/semantic-release-yarn/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@feki.de/semantic-release-yarn/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@feki.de/semantic-release-yarn/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@octokit/auth-token": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^9.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/core": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/endpoint": { + "version": "7.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/graphql": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", + "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "17.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "6.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/tsconfig": "^1.0.2", + "@octokit/types": "^9.2.3" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=4" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "4.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^9.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^9.0.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^4.0.0" + } + }, + "node_modules/@octokit/request": { + "version": "6.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/tsconfig": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/types": { + "version": "9.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^17.2.0" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@semantic-release/changelog": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz", + "integrity": "sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "fs-extra": "^11.0.0", + "lodash": "^4.17.4" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0" + } + }, + "node_modules/@semantic-release/commit-analyzer": { + "version": "10.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-changelog-angular": "^5.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.2.3", + "debug": "^4.0.0", + "import-from": "^4.0.0", + "lodash-es": "^4.17.21", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/error": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@semantic-release/git": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", + "integrity": "sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^3.0.0", + "debug": "^4.0.0", + "dir-glob": "^3.0.0", + "execa": "^5.0.0", + "lodash": "^4.17.4", + "micromatch": "^4.0.0", + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "semantic-release": ">=18.0.0" + } + }, + "node_modules/@semantic-release/git/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@semantic-release/git/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@semantic-release/git/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@semantic-release/git/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@semantic-release/github": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/core": "^4.2.1", + "@octokit/plugin-paginate-rest": "^6.1.2", + "@octokit/plugin-retry": "^4.1.3", + "@octokit/plugin-throttling": "^6.0.0", + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^4.0.1", + "debug": "^4.3.4", + "dir-glob": "^3.0.1", + "globby": "^13.1.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "issue-parser": "^6.0.0", + "lodash-es": "^4.17.21", + "mime": "^3.0.0", + "p-filter": "^3.0.0", + "url-join": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/github/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/globby": { + "version": "13.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/https-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz", + "integrity": "sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/github/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm": { + "version": "10.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@semantic-release/error": "^3.0.0", + "aggregate-error": "^4.0.1", + "execa": "^7.0.0", + "fs-extra": "^11.0.0", + "lodash-es": "^4.17.21", + "nerf-dart": "^1.0.0", + "normalize-url": "^8.0.0", + "npm": "^9.5.0", + "rc": "^1.2.8", + "read-pkg": "^8.0.0", + "registry-auth-token": "^5.0.0", + "semver": "^7.1.2", + "tempy": "^3.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/npm/node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@semantic-release/npm/node_modules/normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/parse-json": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz", + "integrity": "sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/parse-json/node_modules/type-fest": { + "version": "3.11.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/read-pkg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz", + "integrity": "sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^5.0.0", + "parse-json": "^7.0.0", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/read-pkg/node_modules/type-fest": { + "version": "3.11.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@semantic-release/npm/node_modules/tempy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.0.0.tgz", + "integrity": "sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^3.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/npm/node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/release-notes-generator": { + "version": "11.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-changelog-angular": "^5.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-filter": "^2.0.0", + "conventional-commits-parser": "^3.2.3", + "debug": "^4.0.0", + "get-stream": "^7.0.0", + "import-from": "^4.0.0", + "into-stream": "^7.0.0", + "lodash-es": "^4.17.21", + "read-pkg-up": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "semantic-release": ">=20.1.0" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.0.tgz", + "integrity": "sha512-ql6FW5b8tgMYvI4UaoxG3EQN3VyZ6VeQpxNBGg5BZ4xD4u+HJeprzhMMA4OCBEGQgSR+m87pstWMpiVW64W8Fw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/release-notes-generator/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/read-pkg": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", + "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^2.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@semantic-release/release-notes-generator/node_modules/read-pkg-up": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", + "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0", + "read-pkg": "^7.1.0", + "type-fest": "^2.5.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "18.16.16", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.8", + "@typescript-eslint/type-utils": "5.59.8", + "@typescript-eslint/utils": "5.59.8", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.59.8", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.59.8", + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/typescript-estree": "5.59.8", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.59.8", + "@typescript-eslint/utils": "5.59.8", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.8", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/visitor-keys": "5.59.8", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.8", + "@typescript-eslint/types": "5.59.8", + "@typescript-eslint/typescript-estree": "5.59.8", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.59.8", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.21.4", + "@babel/plugin-transform-react-jsx-self": "^7.21.0", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0" + } + }, + "node_modules/@vitest/coverage-c8": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-c8/-/coverage-c8-0.31.4.tgz", + "integrity": "sha512-VPx368m4DTcpA/P0v3YdVxl4QOSh1DbUcXURLRvDShrIB5KxOgfzw4Bn2R8AhAe/GyiWW/FIsJ/OJdYXCCiC1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "c8": "^7.13.0", + "magic-string": "^0.30.0", + "picocolors": "^1.0.0", + "std-env": "^3.3.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": ">=0.30.0 <1" + } + }, + "node_modules/@vitest/expect": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.31.4.tgz", + "integrity": "sha512-tibyx8o7GUyGHZGyPgzwiaPaLDQ9MMuCOrc03BYT0nryUuhLbL7NV2r/q98iv5STlwMgaKuFJkgBW/8iPKwlSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "0.31.4", + "@vitest/utils": "0.31.4", + "chai": "^4.3.7" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.31.4.tgz", + "integrity": "sha512-Wgm6UER+gwq6zkyrm5/wbpXGF+g+UBB78asJlFkIOwyse0pz8lZoiC6SW5i4gPnls/zUcPLWS7Zog0LVepXnpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "0.31.4", + "concordance": "^5.0.4", + "p-limit": "^4.0.0", + "pathe": "^1.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.31.4.tgz", + "integrity": "sha512-LemvNumL3NdWSmfVAMpXILGyaXPkZbG5tyl6+RQSdcHnTj6hvA49UAI8jzez9oQyE/FWLKRSNqTGzsHuk89LRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "pretty-format": "^27.5.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.31.4.tgz", + "integrity": "sha512-3ei5ZH1s3aqbEyftPAzSuunGICRuhE+IXOmpURFdkm5ybUADk+viyQfejNk6q8M5QGX8/EVKw+QWMEP3DTJDag==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^2.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.31.4.tgz", + "integrity": "sha512-DobZbHacWznoGUfYU8XDPY78UubJxXfMNY1+SUdOp1NsI34eopSA6aZMeaGu10waSOeYwE8lxrd/pLfT0RMxjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "concordance": "^5.0.4", + "loupe": "^2.3.6", + "pretty-format": "^27.5.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "license": "MIT", + "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/algo-msgpack-with-bigint": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz", + "integrity": "sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/algosdk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-2.3.0.tgz", + "integrity": "sha512-voxoY2eue2CkzwkTh6UNN5JUeVOBL9qoNX3N/+OYwS2/Xd17ACSs6tLV/6dZumEgPa40ZL8TkO4zQF/ysDpy8w==", + "license": "MIT", + "dependencies": { + "algo-msgpack-with-bigint": "^2.1.1", + "buffer": "^6.0.3", + "cross-fetch": "^3.1.5", + "hi-base32": "^0.5.1", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "json-bigint": "^1.0.0", + "tweetnacl": "^1.0.3", + "vlq": "^2.0.4" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/algosdk2-2": { + "name": "algosdk", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-2.2.0.tgz", + "integrity": "sha512-FG3u/60DzjMK9Cffy9itst7WcfsTgZKfsD1r8pT33PfsA7r8NoXiUSL7cf0fNWFus6S3E14BpE2CY64VJ8KV1A==", + "dependencies": { + "algo-msgpack-with-bigint": "^2.1.1", + "buffer": "^6.0.3", + "cross-fetch": "^3.1.5", + "hi-base32": "^0.5.1", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "json-bigint": "^1.0.0", + "tweetnacl": "^1.0.3", + "vlq": "^2.0.4" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansicolors": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", + "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "Python-2.0" + }, + "node_modules/argv-formatter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", + "integrity": "sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/beaker-ts": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/beaker-ts/-/beaker-ts-0.1.2.tgz", + "integrity": "sha512-PWjLRdZTsVeClgqwa5HD61UnvRTlJx2mx5Y53Ln4821LN5oJ/nrbhhDEfqOysOmA2+bVQT/B43c8XGjtbMKuOQ==", + "license": "MIT", + "dependencies": { + "commander": "^9.4.0", + "typescript": "^4.7.4" + }, + "bin": { + "beaker": "dist/esm/beaker.js" + }, + "peerDependencies": { + "algosdk": "^2.2.0" + } + }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/bignumber.js": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bl/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/blueimp-md5": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", + "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.7", + "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" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001489", + "electron-to-chromium": "^1.4.411", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/c8": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.14.0.tgz", + "integrity": "sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/c8/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/c8/node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/c8/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001492", + "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" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/cardinal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", + "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "node_modules/chai": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "license": "MIT", + "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/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "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, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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, + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/commitizen": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz", + "integrity": "sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cachedir": "2.3.0", + "cz-conventional-changelog": "3.3.0", + "dedent": "0.7.0", + "detect-indent": "6.1.0", + "find-node-modules": "^2.1.2", + "find-root": "1.1.0", + "fs-extra": "9.1.0", + "glob": "7.2.3", + "inquirer": "8.2.5", + "is-utf8": "^0.2.1", + "lodash": "4.17.21", + "minimist": "1.2.7", + "strip-bom": "4.0.0", + "strip-json-comments": "3.1.1" + }, + "bin": { + "commitizen": "bin/commitizen", + "cz": "bin/git-cz", + "git-cz": "bin/git-cz" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/commitizen/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/commitizen/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/commitizen/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, + "license": "ISC", + "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/commitizen/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/commitizen/node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "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, + "license": "MIT" + }, + "node_modules/concordance": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", + "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "date-time": "^3.1.0", + "esutils": "^2.0.3", + "fast-diff": "^1.2.0", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.15", + "md5-hex": "^3.0.1", + "semver": "^7.3.2", + "well-known-symbols": "^2.0.0" + }, + "engines": { + "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/conventional-changelog-writer/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/conventional-changelog-writer/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/conventional-changelog-writer/node_modules/through2": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/conventional-commit-types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz", + "integrity": "sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==", + "dev": true, + "license": "ISC" + }, + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/conventional-commits-parser/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/conventional-commits-parser/node_modules/split2": { + "version": "3.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/conventional-commits-parser/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/conventional-commits-parser/node_modules/through2": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "3" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "8.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-fetch": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.11" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-functions-list": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", + "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.22" + } + }, + "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==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cz-conventional-changelog": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", + "integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "commitizen": "^4.0.3", + "conventional-commit-types": "^3.0.0", + "lodash.map": "^4.5.1", + "longest": "^2.0.1", + "word-wrap": "^1.0.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@commitlint/load": ">6.1.1" + } + }, + "node_modules/cz-conventional-changelog/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-conventional-changelog/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-conventional-changelog/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/cz-conventional-changelog/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/cz-conventional-changelog/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cz-conventional-changelog/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/date-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", + "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "time-zone": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dateformat": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "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, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/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, + "license": "MIT" + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "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, + "license": "MIT" + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dev": true, + "license": "MIT", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dts-bundle-generator": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/dts-bundle-generator/-/dts-bundle-generator-8.0.1.tgz", + "integrity": "sha512-9JVw78/OXdKfq+RUrmpLm6WAUJp+aOUGEHimVqIlOEH2VugRt1I8CVIoQZlirWZko+/SVZkNgpWCyZubUuzzPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "typescript": ">=5.0.2", + "yargs": "^17.6.0" + }, + "bin": { + "dts-bundle-generator": "dist/bin/dts-bundle-generator.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/dts-bundle-generator/node_modules/typescript": { + "version": "5.1.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.419", + "dev": true, + "license": "ISC" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/env-ci": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^7.0.0", + "java-properties": "^1.0.2" + }, + "engines": { + "node": "^16.14 || >=18" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.42.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.42.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "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.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "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", + "import-fresh": "^3.0.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.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "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-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "license": "BSD-2-Clause", + "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.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "9.5.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.8.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/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "license": "BSD-3-Clause", + "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, + "license": "BSD-2-Clause", + "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, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "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, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz", + "integrity": "sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "ISC", + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", + "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-node-modules": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz", + "integrity": "sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "findup-sync": "^4.0.0", + "merge": "^2.1.1" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-versions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz", + "integrity": "sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver-regex": "^4.0.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/findup-sync": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", + "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^4.0.2", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "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, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/git-log-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", + "integrity": "sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argv-formatter": "~1.0.0", + "spawn-error-forwarder": "~1.0.0", + "split2": "~1.0.0", + "stream-combiner2": "~1.1.1", + "through2": "~2.0.0", + "traverse": "~0.6.6" + } + }, + "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==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ini": "^1.3.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/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, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true, + "license": "MIT" + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hi-base32": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", + "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==", + "license": "MIT" + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hook-std": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz", + "integrity": "sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", + "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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, + "license": "ISC", + "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==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/into-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz", + "integrity": "sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/issue-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", + "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.capitalize": "^4.2.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.uniqby": "^4.7.0" + }, + "engines": { + "node": ">=10.13" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/java-properties": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", + "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==", + "license": "MIT" + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "license": "MIT" + }, + "node_modules/js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==", + "license": "MIT" + }, + "node_modules/js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, + "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, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/known-css-properties": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", + "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "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, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.capitalize": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", + "integrity": "sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/longest": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz", + "integrity": "sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/marked-terminal": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz", + "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^6.2.0", + "cardinal": "^2.1.1", + "chalk": "^5.2.0", + "cli-table3": "^0.6.3", + "node-emoji": "^1.11.0", + "supports-hyperlinks": "^2.3.0" + }, + "engines": { + "node": ">=14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/marked-terminal/node_modules/ansi-escapes": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", + "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/marked-terminal/node_modules/chalk": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/marked-terminal/node_modules/type-fest": { + "version": "3.11.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/md5-hex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", + "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", + "dev": true, + "license": "MIT", + "dependencies": { + "blueimp-md5": "^2.10.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mlly": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.8.2", + "pathe": "^1.1.0", + "pkg-types": "^1.0.3", + "ufo": "^1.1.2" + } + }, + "node_modules/modify-values": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nerf-dart": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", + "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-fetch": { + "version": "2.6.11", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm": { + "version": "9.6.7", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/run-script", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "cli-table3", + "columnify", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmhook", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "npmlog", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "read-package-json", + "read-package-json-fast", + "semver", + "ssri", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which", + "write-file-atomic" + ], + "dev": true, + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "smoke-tests", + "mock-registry", + "workspaces/*" + ], + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^6.2.9", + "@npmcli/config": "^6.1.7", + "@npmcli/map-workspaces": "^3.0.4", + "@npmcli/package-json": "^3.1.0", + "@npmcli/run-script": "^6.0.2", + "abbrev": "^2.0.0", + "archy": "~1.0.0", + "cacache": "^17.1.2", + "chalk": "^4.1.2", + "ci-info": "^3.8.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.3", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.2", + "glob": "^10.2.4", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^6.1.1", + "ini": "^4.1.0", + "init-package-json": "^5.0.0", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^3.0.0", + "libnpmaccess": "^7.0.2", + "libnpmdiff": "^5.0.17", + "libnpmexec": "^5.0.17", + "libnpmfund": "^4.0.17", + "libnpmhook": "^9.0.3", + "libnpmorg": "^5.0.4", + "libnpmpack": "^5.0.17", + "libnpmpublish": "^7.2.0", + "libnpmsearch": "^6.0.2", + "libnpmteam": "^5.0.3", + "libnpmversion": "^4.0.2", + "make-fetch-happen": "^11.1.1", + "minimatch": "^9.0.0", + "minipass": "^5.0.0", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^9.3.1", + "nopt": "^7.1.0", + "npm-audit-report": "^4.0.0", + "npm-install-checks": "^6.1.1", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-profile": "^7.0.1", + "npm-registry-fetch": "^14.0.5", + "npm-user-validate": "^2.0.0", + "npmlog": "^7.0.1", + "p-map": "^4.0.0", + "pacote": "^15.1.3", + "parse-conflict-json": "^3.0.1", + "proc-log": "^3.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^2.1.0", + "read-package-json": "^6.0.3", + "read-package-json-fast": "^3.0.2", + "semver": "^7.5.1", + "ssri": "^10.0.4", + "tar": "^6.1.14", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^5.0.0", + "which": "^3.0.1", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/npm/node_modules/@gar/promisify": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "ISC", + "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/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/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==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/@isaacs/cliui/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "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/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "6.2.9", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", + "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^5.0.0", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^3.0.0", + "@npmcli/query": "^3.0.0", + "@npmcli/run-script": "^6.0.0", + "bin-links": "^4.0.1", + "cacache": "^17.0.4", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^6.1.1", + "json-parse-even-better-errors": "^3.0.0", + "json-stringify-nice": "^1.1.4", + "minimatch": "^9.0.0", + "nopt": "^7.0.0", + "npm-install-checks": "^6.0.0", + "npm-package-arg": "^10.1.0", + "npm-pick-manifest": "^8.0.1", + "npm-registry-fetch": "^14.0.3", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "parse-conflict-json": "^3.0.0", + "proc-log": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.2", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.1", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "6.1.7", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^3.0.2", + "ini": "^4.1.0", + "nopt": "^7.0.0", + "proc-log": "^3.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.5", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/disparity-colors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz", + "integrity": "sha512-5R/z157/f20Fi0Ou4ZttL51V0xz0EdPEOauFtPCEYOLInDBRCj1/TxOJ5aGTrtShxEshN2d+hXb9ZKSi5RLBcg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "ansi-styles": "^4.3.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "4.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz", + "integrity": "sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz", + "integrity": "sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^17.0.0", + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^15.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/move-file": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", + "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.0.0.tgz", + "integrity": "sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", + "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/npm/node_modules/agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/npm/node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/are-we-there-yet": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz", + "integrity": "sha512-nSXlV+u3vtVjRgihdTzbfWYzxPWGo424zPgQbHD0ZqIla3jqYAewDcvee0Ua2hjS5IfTAmjGlx1Jf0PKwjZDEw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^4.1.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.1.tgz", + "integrity": "sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/npm/node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "17.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/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, + "inBundle": true, + "license": "MIT", + "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/npm/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-3.1.1.tgz", + "integrity": "sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw==", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "^4.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-columns/-/cli-columns-4.0.0.tgz", + "integrity": "sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/npm/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz", + "integrity": "sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/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, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/npm/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, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/npm/node_modules/columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/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, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/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, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/debug/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, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/npm/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/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, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/gauge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz", + "integrity": "sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^4.0.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "10.2.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.0", + "minipass": "^5.0.0 || ^6.0.0", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/npm/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, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/infer-owner": { + "version": "1.0.4", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/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, + "inBundle": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/ini": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-5.0.0.tgz", + "integrity": "sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^10.0.0", + "promzard": "^1.0.0", + "read": "^2.0.0", + "read-package-json": "^6.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-4.0.2.tgz", + "integrity": "sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA==", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^3.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/is-core-module": { + "version": "2.12.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/jackspeak": { + "version": "2.2.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", + "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-7.0.2.tgz", + "integrity": "sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmdiff": { + "version": "5.0.17", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.2.9", + "@npmcli/disparity-colors": "^3.0.0", + "@npmcli/installed-package-contents": "^2.0.2", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^9.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8", + "tar": "^6.1.13" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "5.0.17", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.2.9", + "@npmcli/run-script": "^6.0.0", + "chalk": "^4.1.0", + "ci-info": "^3.7.1", + "npm-package-arg": "^10.1.0", + "npmlog": "^7.0.1", + "pacote": "^15.0.8", + "proc-log": "^3.0.0", + "read": "^2.0.0", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "walk-up-path": "^3.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "4.0.17", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.2.9" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmhook": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/libnpmhook/-/libnpmhook-9.0.3.tgz", + "integrity": "sha512-wMZe58sI7KLhg0+nUWZW5KdMfjNNcOIIbkoP19BDHYoUF9El7eeUWkGNxUGzpHkPKiGoQ1z/v6CYin4deebeuw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/libnpmorg/-/libnpmorg-5.0.4.tgz", + "integrity": "sha512-YqYXLMAN0Y1eJH4w3hUFN9648xfSdvJANMsdeZTOWJOW4Pqp8qapJFzQdqCfUkg+tEuQmnaFQQKXvkMZC51+Mw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "5.0.17", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^6.2.9", + "@npmcli/run-script": "^6.0.0", + "npm-package-arg": "^10.1.0", + "pacote": "^15.0.8" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "7.2.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "ci-info": "^3.6.1", + "normalize-package-data": "^5.0.0", + "npm-package-arg": "^10.1.0", + "npm-registry-fetch": "^14.0.3", + "proc-log": "^3.0.0", + "semver": "^7.3.7", + "sigstore": "^1.4.0", + "ssri": "^10.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmsearch": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-6.0.2.tgz", + "integrity": "sha512-p+5BF19AvnVg8mcIQhy6yWhI6jHQRVMYaIaKeITEfYAffWsqbottA/WZdMtHL76hViC6SFM1WdclM1w5eAIa1g==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/libnpmteam/-/libnpmteam-5.0.3.tgz", + "integrity": "sha512-7XOGhi45s+ml6TyrhJUTyrErcoDMKGKfEtiTEco4ofU7BGGAUOalVztKMVLLJgJOOXdIAIlzCHqkTXEuSiyCiA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^14.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/libnpmversion/-/libnpmversion-4.0.2.tgz", + "integrity": "sha512-n1X70mFHv8Piy4yos+MFWUARSkTbyV5cdsHScaIkuwYvRAF/s2VtYScDzWB4Oe8uNEuGNdjiRR1E/Dh1tMvv6g==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.0.1", + "@npmcli/run-script": "^6.0.0", + "json-parse-even-better-errors": "^3.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/minimatch": { + "version": "9.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "9.3.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/fs": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/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, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache": { + "version": "16.1.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/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, + "inBundle": true, + "license": "ISC", + "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/npm/node_modules/node-gyp/node_modules/make-fetch-happen": { + "version": "10.2.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/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, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minipass-fetch": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/node-gyp/node_modules/ssri": { + "version": "9.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/unique-filename": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/unique-slug": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "7.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-audit-report": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-profile": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-7.0.1.tgz", + "integrity": "sha512-VReArOY/fCx5dWL66cbJ2OMogTQAVVQA//8jjmjkarboki3V7UJ0XbGFW+khRwiAJFQjuH0Bqr/yF7Y5RZdkMQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npm-user-validate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-2.0.0.tgz", + "integrity": "sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q==", + "dev": true, + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/npmlog": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz", + "integrity": "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^4.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^5.0.0", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/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, + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/pacote": { + "version": "15.1.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", + "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/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, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "1.9.1", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-call-limit": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz", + "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/promzard": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.0.tgz", + "integrity": "sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "dev": true, + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read/-/read-2.1.0.tgz", + "integrity": "sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-package-json": { + "version": "6.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/readable-stream": { + "version": "4.4.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/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, + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/rimraf/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, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/rimraf/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, + "inBundle": true, + "license": "ISC", + "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/npm/node_modules/rimraf/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, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.5.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/semver/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==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/sigstore": { + "version": "1.5.2", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.1.0", + "make-fetch-happen": "^11.0.1", + "tuf-js": "^1.1.3" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true, + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true, + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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, + "inBundle": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "6.1.14", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz", + "integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", + "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "1.1.6", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", + "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/npm/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "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/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "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/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/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==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/wrap-ansi/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==", + "dev": true, + "inBundle": true, + "license": "MIT", + "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/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/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, + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "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, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-each-series": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz", + "integrity": "sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", + "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-map": "^5.1.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-filter/node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-filter/node_modules/clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-filter/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-filter/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-filter/node_modules/p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "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, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/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, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/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, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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-json/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", + "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "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" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-scss": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz", + "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + } + ], + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.19" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sorting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz", + "integrity": "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "postcss": "^8.3.9" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redeyed": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", + "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esprima": "~4.0.0" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.11.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-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-dir/node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-dir/node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-dir/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "global-dirs": "^0.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "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, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/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, + "license": "ISC", + "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/rimraf/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/rollup": { + "version": "3.23.0", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/semantic-release": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.3.tgz", + "integrity": "sha512-DS/0P1DrL8cKpkhN7JCzhkbOge9sURSRqUlmEAjeXTzK0lOSWhp+oJJcji0bLFEIyu3DuYEeQrWCdJNwRHrFdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@semantic-release/commit-analyzer": "^10.0.0", + "@semantic-release/error": "^3.0.0", + "@semantic-release/github": "^9.0.0", + "@semantic-release/npm": "^10.0.2", + "@semantic-release/release-notes-generator": "^11.0.0", + "aggregate-error": "^4.0.1", + "cosmiconfig": "^8.0.0", + "debug": "^4.0.0", + "env-ci": "^9.0.0", + "execa": "^7.0.0", + "figures": "^5.0.0", + "find-versions": "^5.1.0", + "get-stream": "^6.0.0", + "git-log-parser": "^1.2.0", + "hook-std": "^3.0.0", + "hosted-git-info": "^6.0.0", + "lodash-es": "^4.17.21", + "marked": "^4.1.0", + "marked-terminal": "^5.1.1", + "micromatch": "^4.0.2", + "p-each-series": "^3.0.0", + "p-reduce": "^3.0.0", + "read-pkg-up": "^9.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.3.2", + "semver-diff": "^4.0.0", + "signale": "^1.2.1", + "yargs": "^17.5.1" + }, + "bin": { + "semantic-release": "bin/semantic-release.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/semantic-release/node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semantic-release/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/p-reduce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz", + "integrity": "sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/semantic-release/node_modules/read-pkg": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", + "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^2.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semantic-release/node_modules/read-pkg-up": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", + "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0", + "read-pkg": "^7.1.0", + "type-fest": "^2.5.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver": { + "version": "7.5.1", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver-regex": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz", + "integrity": "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/signale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", + "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.3.2", + "figures": "^2.0.0", + "pkg-conf": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/signale/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/signale/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/signale/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/signale/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/signale/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/signale/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/signale/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-error-forwarder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", + "integrity": "sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/split": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", + "integrity": "sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==", + "dev": true, + "license": "ISC", + "dependencies": { + "through2": "~2.0.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz", + "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.1.tgz", + "integrity": "sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.8.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true, + "license": "ISC" + }, + "node_modules/stylelint": { + "version": "14.16.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", + "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^7.1.0", + "css-functions-list": "^3.1.0", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^6.0.1", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.2.0", + "ignore": "^5.2.1", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.26.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.19", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^2.3.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^4.0.2" + }, + "bin": { + "stylelint": "bin/stylelint.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz", + "integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "stylelint": "^14.10.0" + } + }, + "node_modules/stylelint-config-sass-guidelines": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-9.0.1.tgz", + "integrity": "sha512-N06PsVsrgKijQ3YT5hqKA7x3NUkgELTRI1cbWMqcYiCGG6MjzvNk6Cb5YYA1PrvrksBV76BvY9P9bAswojVMqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-scss": "^4.0.2", + "stylelint-order": "^5.0.0", + "stylelint-scss": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^14.0.1" + } + }, + "node_modules/stylelint-order": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz", + "integrity": "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^8.3.11", + "postcss-sorting": "^7.0.1" + }, + "peerDependencies": { + "stylelint": "^14.0.0" + } + }, + "node_modules/stylelint-scss": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz", + "integrity": "sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "stylelint": "^14.5.1 || ^15.0.0" + } + }, + "node_modules/stylelint/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true, + "license": "MIT" + }, + "node_modules/stylelint/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "license": "MIT", + "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/stylelint/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stylelint/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stylelint/node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stylelint/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", + "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/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, + "license": "ISC", + "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/test-exclude/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "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, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/time-zone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", + "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tinybench": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz", + "integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.5.0.tgz", + "integrity": "sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", + "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.5.3", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "license": "Unlicense" + }, + "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, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ufo": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.2.tgz", + "integrity": "sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true, + "license": "ISC" + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "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" + } + ], + "license": "MIT", + "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, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.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==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.31.4.tgz", + "integrity": "sha512-uzL377GjJtTbuc5KQxVbDu2xfU/x0wVjUtXQR2ihS21q/NK6ROr4oG0rsSkBBddZUVCwzfx22in76/0ZZHXgkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.2.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.31.4.tgz", + "integrity": "sha512-GoV0VQPmWrUFOZSg3RpQAPN+LPmHg2/gxlMNJlyxJihkz6qReHDV6b0pPDcqFLNEPya4tWJ1pgwUNP9MLmUfvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.31.4", + "@vitest/runner": "0.31.4", + "@vitest/snapshot": "0.31.4", + "@vitest/spy": "0.31.4", + "@vitest/utils": "0.31.4", + "acorn": "^8.8.2", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.7", + "concordance": "^5.0.4", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "std-env": "^3.3.2", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.5.0", + "vite": "^3.0.0 || ^4.0.0", + "vite-node": "0.31.4", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/@types/node": { + "version": "20.2.5", + "dev": true, + "license": "MIT" + }, + "node_modules/vlq": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", + "integrity": "sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==", + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/well-known-symbols": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", + "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=6" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/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==", + "dev": true, + "license": "MIT", + "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/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, + "license": "ISC" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json index b19bcd2..d436251 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "release": "semantic-release" }, "dependencies": { + "@algorandfoundation/algokit-utils": "^2.3.1", "algosdk": "2.3.0", "beaker-ts": "^0.1.2" }, @@ -42,6 +43,7 @@ "@vitest/coverage-c8": "^0.31.0", "commitizen": "4.3.0", "cz-conventional-changelog": "3.3.0", + "dotenv": "^16.3.1", "dts-bundle-generator": "^8.0.0", "eslint": "^8.29.0", "eslint-config-prettier": "^8.5.0", diff --git a/src/clients/SubtopiaAdminClient.ts b/src/clients/SubtopiaAdminClient.ts index a72ee46..3c7aefe 100644 --- a/src/clients/SubtopiaAdminClient.ts +++ b/src/clients/SubtopiaAdminClient.ts @@ -75,7 +75,6 @@ export class SubtopiaAdminClient { creator, client, smrID = SUBTOPIA_REGISTRY_APP_ID, - version = SUBTOPIA_CONTRACTS_VERSION, name, price, subType = SubscriptionType.UNLIMITED, diff --git a/src/clients/SubtopiaRegistry.ts b/src/clients/SubtopiaRegistry.ts new file mode 100644 index 0000000..0125081 --- /dev/null +++ b/src/clients/SubtopiaRegistry.ts @@ -0,0 +1,374 @@ +// ============================================================================= +// Subtopia JS SDK +// Copyright (C) 2023 Altynbek Orumbayev +// ============================================================================= + +import algosdk, { + ABIStringType, + ABIType, + AtomicTransactionComposer, + TransactionSigner, + algosToMicroalgos, + decodeAddress, + encodeAddress, + encodeUint64, + makeAssetTransferTxnWithSuggestedParamsFromObject, + makePaymentTxnWithSuggestedParamsFromObject, +} from "algosdk"; +import AlgodClient from "algosdk/dist/types/client/v2/algod/algod"; +import { + loadApplicationState, + getLocker, + normalizePrice, + optInAsset, + getParamsWithFeeCount, + rekeyLocker, + expirationTypeToMonths, + calculateSmiCreationMbr, + convertCentsToAlgos, + calculateSmlCreationMbr, + calculateRegistryLockerBoxCreateMbr, + getTxnFeeCount, +} from "../utils"; +import { Discount, SMI, Subscription } from "../contracts/smi_client"; +import { SmrClient } from "../contracts/SMR"; +import { getAssetByID } from "../utils"; +import { + SUBTOPIA_REGISTRY_APP_ID, + DEFAULT_AWAIT_ROUNDS, + SMI_APPROVAL_KEY, + SMI_CLEAR_KEY, + MIN_APP_OPTIN_MBR, + MIN_APP_BALANCE_MBR, + MIN_ASA_OPTIN_MBR, + SMI_CREATION_PLATFORM_FEE_CENTS, + SMI_VERSION, + SMR_VERSION, + SML_APPROVAL_KEY, + SML_CLEAR_KEY, +} from "../constants"; +import { + SubscriptionType, + SubscriptionExpirationType, + PriceNormalizationType, + DiscountType, +} from "../enums"; +import { + SMIState, + SubscriptionRecord, + DiscountRecord, + SMISubscribeParams, + ChainMethodParams, + SMIUnsubscribeParams, + SMIClaimSubscriptionParams, + SMIClaimRevenueParams, + SMITransferSubscriptionParams, + SMIMarkForDeletionParams, + SMIDeleteSubscriptionParams, + SMICreateDiscountParams, + SMIDeleteDiscountParams, + SMRAddInfrastructureParams, +} from "../interfaces"; + +import { + getAppClient, + microAlgos, + transactionFees, +} from "@algorandfoundation/algokit-utils"; +import { ApplicationClient } from "@algorandfoundation/algokit-utils/types/app-client"; +import { TransactionSignerAccount } from "@algorandfoundation/algokit-utils/types/account"; +import { SmaClient } from "../contracts/SMA"; +import { + AppCallTransactionResultOfType, + AppReference, +} from "@algorandfoundation/algokit-utils/types/app"; + +const STP_IMAGE_URL = + "ipfs://bafybeicddz7kbuxajj6bob5bjqtweq6wchkdkiq4vvhwrwrne7iz4f25xi"; +const STP_UNIT_NAME = "STP"; +const encoder = new TextEncoder(); + +export class SubtopiaRegistry { + algodClient: algosdk.Algodv2; + registryClient: SmrClient; + smaClient: SmaClient; + creator: TransactionSignerAccount; + version: string; + appId: number; + appAddress; + + private constructor( + algodClient: AlgodClient, + creator: TransactionSignerAccount, + registryClient: SmrClient, + appReference: AppReference, + smaClient: SmaClient, + version: string + ) { + this.algodClient = algodClient; + this.creator = creator; + this.registryClient = registryClient; + this.appAddress = appReference.appAddress; + this.appId = Number(appReference.appId); + this.smaClient = smaClient; + this.version = version; + } + + public static async init( + algodClient: AlgodClient, + creator: TransactionSignerAccount, + smrId: number = SUBTOPIA_REGISTRY_APP_ID + ): Promise { + const registryClient = new SmrClient( + { + resolveBy: "id", + sender: creator, + id: smrId, + }, + algodClient + ); + + const state = (await registryClient.getGlobalState()).sma_id; + + if (!state) { + throw new Error("SMR is not initialized"); + } + + const smaClient = new SmaClient( + { + resolveBy: "id", + sender: creator, + id: state.asNumber(), + }, + algodClient + ); + + const versionAtc = await registryClient.compose().getVersion({}).atc(); + const response = await versionAtc.simulate(algodClient); + const version = response.methodResults[0].returnValue as string; + const appReference = + (await registryClient.appClient.getAppReference()) as AppReference; + + return new SubtopiaRegistry( + algodClient, + creator, + registryClient, + appReference, + smaClient, + version + ); + } + + public async getAddress(): Promise { + const reference = await this.registryClient.appClient.getAppReference(); + return reference.appAddress; + } + + public async getInfrastructureCreationFee(coinID = 0): Promise { + return ( + algosToMicroalgos(MIN_APP_OPTIN_MBR) + + algosToMicroalgos(MIN_APP_BALANCE_MBR) + + (await calculateSmiCreationMbr(this.algodClient)) + + (coinID > 0 ? algosToMicroalgos(MIN_ASA_OPTIN_MBR) : 0) + ); + } + + public async getInfrastructureCreationPlatformFee(): Promise { + const currentPrice = (await this.smaClient.getGlobalState()).price; + if (!currentPrice) { + throw new Error("SMA is not initialized"); + } + + return convertCentsToAlgos( + SMI_CREATION_PLATFORM_FEE_CENTS, + currentPrice.asNumber() + ); + } + + public async getLockerCreationFee(creatorAddress: string): Promise { + return ( + algosToMicroalgos(MIN_APP_OPTIN_MBR) + + (await calculateSmlCreationMbr(this.algodClient)) + + calculateRegistryLockerBoxCreateMbr(creatorAddress) + ); + } + + public async createLocker({ + creator, + }: { + creator: TransactionSignerAccount; + }): Promise<{ + txId: string; + lockerId: number; + }> { + const feeAmount = await this.getLockerCreationFee(creator.addr); + + const response = await this.registryClient + .compose() + .createSml( + { + manager: creator.addr, + fee_txn: makePaymentTxnWithSuggestedParamsFromObject({ + from: creator.addr, + to: this.appAddress, + amount: feeAmount, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 0), + }), + }, + { + sendParams: { + fee: transactionFees(4), + }, + boxes: [ + { + appIndex: this.appId, + name: decodeAddress(creator.addr).publicKey, + }, + { + appIndex: this.appId, + name: encoder.encode(SML_APPROVAL_KEY), + }, + { + appIndex: this.appId, + name: encoder.encode(SML_CLEAR_KEY), + }, + ], + } + ) + .execute(); + + return { + txId: response.txIds.pop() as string, + lockerId: Number(response.returns[0]), + }; + } + + public async getLocker(creatorAddress: string): Promise { + const atc = await this.registryClient + .compose() + .getSml( + { + manager: creatorAddress, + }, + { + boxes: [ + { + appIndex: this.appId, + name: decodeAddress(creatorAddress).publicKey, + }, + ], + } + ) + .atc(); + + const response = await atc.simulate(this.algodClient); + const lockerId = Number(response.methodResults[0].returnValue); + return lockerId > 0 ? lockerId : undefined; + } + + public async createInfrastructure({ + name, + price, + lockerId, + subType = SubscriptionType.UNLIMITED, + maxSubs = 0, + coinID = 0, + unitName = STP_UNIT_NAME, + imageUrl = STP_IMAGE_URL, + }: { + name: string; + price: number; + lockerId: number; + subType?: SubscriptionType; + maxSubs?: number; + coinID?: number; + unitName?: string; + imageUrl?: string; + }): Promise<{ + txId: string; + infrastructureId: number; + }> { + const asset = await getAssetByID(this.algodClient, coinID); + + const smaID = (await this.registryClient.getGlobalState()).sma_id; + if (!smaID) { + throw new Error("SMR is not initialized"); + } + + const adminAddress = encodeAddress( + (await this.smaClient.getGlobalState()).admin?.asByteArray() as Uint8Array + ); + const feeAmount = await this.getInfrastructureCreationFee(coinID); + const platformFeeAmount = await this.getInfrastructureCreationPlatformFee(); + + const response = await this.registryClient + .compose() + .createSmi( + { + name: name, + manager: this.creator.addr, + sub_type: Number(subType), + price: normalizePrice( + price, + asset.decimals, + PriceNormalizationType.RAW + ), + max_subs: maxSubs, + coin: coinID, + unit_name: unitName, + image_url: imageUrl, + fee_txn: makePaymentTxnWithSuggestedParamsFromObject({ + from: this.creator.addr, + to: this.appAddress, + amount: feeAmount, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 0), + }), + platform_fee_txn: makePaymentTxnWithSuggestedParamsFromObject({ + from: this.creator.addr, + to: adminAddress, + amount: platformFeeAmount, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 0), + }), + sma: smaID.asNumber(), + locker: lockerId, + }, + { + sendParams: { + fee: transactionFees(8), + }, + boxes: [ + { + appIndex: this.appId, + name: decodeAddress(this.creator.addr).publicKey, + }, + { + appIndex: this.appId, + name: encoder.encode(SMI_APPROVAL_KEY), + }, + { + appIndex: this.appId, + name: encoder.encode(SMI_APPROVAL_KEY), + }, + { + appIndex: this.appId, + name: encoder.encode(SMI_APPROVAL_KEY), + }, + { + appIndex: this.appId, + name: encoder.encode(SMI_CLEAR_KEY), + }, + ], + } + ) + .execute() + .catch((e) => { + console.log(e); + throw e; + }); + + return { + txId: response.txIds.pop() as string, + infrastructureId: Number(response.returns[0]), + }; + } +} diff --git a/src/constants/index.ts b/src/constants/index.ts index 09e5a93..62df7bb 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -7,7 +7,6 @@ import { AssetMetadata } from "../interfaces"; export const DEFAULT_AWAIT_ROUNDS = 10; export const SUBTOPIA_CONTRACTS_VERSION = "0.3.0"; -export const SUBTOPIA_REGISTRY_APP_ID = 188962978; export const ALGO_ASSET = { index: 0, @@ -16,3 +15,23 @@ export const ALGO_ASSET = { decimals: 6, unitName: "ALGO", } as AssetMetadata; + +export const SMI_STATE_MANAGER_KEY = "manager"; +export const SMI_APPROVAL_KEY = "smi_approval"; +export const SMI_CLEAR_KEY = "smi_clear"; +export const SML_APPROVAL_KEY = "sml_approval"; +export const SML_CLEAR_KEY = "sml_clear"; + +export const MIN_APP_BALANCE_MBR = 0.1; // ALGO +export const MIN_APP_OPTIN_MBR = 0.1; // ALGO +export const MIN_ASA_OPTIN_MBR = 0.1; // ALGO + +// Platform fees +export const SUBSCRIPTION_PLATFORM_FEE_CENTS = 10; +export const SMI_CREATION_PLATFORM_FEE_CENTS = 500; + +// Algorand minimum transaction fee +export const SMR_VERSION = "1.0"; +export const SMI_VERSION = "1.0"; +export const SML_VERSION = "1.0"; +export const SMA_VERSION = "1.0"; diff --git a/src/contracts/SMA.ts b/src/contracts/SMA.ts new file mode 100644 index 0000000..e452ba2 --- /dev/null +++ b/src/contracts/SMA.ts @@ -0,0 +1,719 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^2 + */ +import * as algokit from '@algorandfoundation/algokit-utils' +import { + AppCallTransactionResult, + AppCallTransactionResultOfType, + CoreAppCallArgs, + RawAppCallArgs, + AppState, + TealTemplateParams, + ABIAppCallArg, +} from '@algorandfoundation/algokit-utils/types/app' +import { + AppClientCallCoreParams, + AppClientCompilationParams, + AppClientDeployCoreParams, + AppDetails, + ApplicationClient, +} from '@algorandfoundation/algokit-utils/types/app-client' +import { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' +import { SendTransactionResult, TransactionToSign, SendTransactionFrom } from '@algorandfoundation/algokit-utils/types/transaction' +import { Algodv2, OnApplicationComplete, Transaction, TransactionWithSigner, AtomicTransactionComposer } from 'algosdk' +export const APP_SPEC: AppSpec = { + "hints": { + "update_price(uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "update_admin(address)void": { + "call_config": { + "no_op": "CALL" + } + }, + "get_version()string": { + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMQpieXRlY2Jsb2NrIDB4NjE2NDZkNjk2ZSAweCAweDY0NjU2MzY5NmQ2MTZjNzMgMHg3MDcyNjk2MzY1IDB4NzU3MDY0NjE3NDY1NjQ1ZjYxNzQKdHhuIE51bUFwcEFyZ3MKaW50Y18wIC8vIDAKPT0KYm56IG1haW5fbDgKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhhNTc4MTgxOCAvLyAidXBkYXRlX3ByaWNlKHVpbnQ2NCl2b2lkIgo9PQpibnogbWFpbl9sNwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDRhMTY1ZWU3IC8vICJ1cGRhdGVfYWRtaW4oYWRkcmVzcyl2b2lkIgo9PQpibnogbWFpbl9sNgp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDJmYmE1YTFiIC8vICJnZXRfdmVyc2lvbigpc3RyaW5nIgo9PQpibnogbWFpbl9sNQplcnIKbWFpbl9sNToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBnZXR2ZXJzaW9uY2FzdGVyXzcKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDY6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgdXBkYXRlYWRtaW5jYXN0ZXJfNgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sNzoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiB1cGRhdGVwcmljZWNhc3Rlcl81CmludGNfMSAvLyAxCnJldHVybgptYWluX2w4Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CmJueiBtYWluX2wxMgp0eG4gT25Db21wbGV0aW9uCnB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgo9PQpibnogbWFpbl9sMTEKZXJyCm1haW5fbDExOgp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQphc3NlcnQKY2FsbHN1YiB1cGRhdGVfMQppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTI6CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCj09CmFzc2VydApjYWxsc3ViIGNyZWF0ZV8wCmludGNfMSAvLyAxCnJldHVybgoKLy8gY3JlYXRlCmNyZWF0ZV8wOgpwcm90byAwIDAKYnl0ZWNfMCAvLyAiYWRtaW4iCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwphcHBfZ2xvYmFsX3B1dAppbnRjXzAgLy8gMApieXRlY18yIC8vICJkZWNpbWFscyIKYXBwX2dsb2JhbF9nZXRfZXgKc3RvcmUgMQpzdG9yZSAwCmxvYWQgMQohCmFzc2VydApieXRlY18yIC8vICJkZWNpbWFscyIKcHVzaGludCAyIC8vIDIKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMyAvLyAicHJpY2UiCnB1c2hpbnQgMzAgLy8gMzAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNCAvLyAidXBkYXRlZF9hdCIKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIHVwZGF0ZQp1cGRhdGVfMToKcHJvdG8gMCAwCnR4biBTZW5kZXIKYnl0ZWNfMCAvLyAiYWRtaW4iCmFwcF9nbG9iYWxfZ2V0Cj09CmFzc2VydApyZXRzdWIKCi8vIHVwZGF0ZV9wcmljZQp1cGRhdGVwcmljZV8yOgpwcm90byAxIDAKdHhuIFNlbmRlcgpieXRlY18wIC8vICJhZG1pbiIKYXBwX2dsb2JhbF9nZXQKPT0KLy8gT25seSBtYW5hZ2VyIGNhbiB1cGRhdGUgcHJpY2UKYXNzZXJ0CmZyYW1lX2RpZyAtMQppbnRjXzAgLy8gMAo+Ci8vIFByaWNlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAKYXNzZXJ0CmJ5dGVjXzMgLy8gInByaWNlIgpmcmFtZV9kaWcgLTEKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNCAvLyAidXBkYXRlZF9hdCIKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIHVwZGF0ZV9hZG1pbgp1cGRhdGVhZG1pbl8zOgpwcm90byAxIDAKdHhuIFNlbmRlcgpieXRlY18wIC8vICJhZG1pbiIKYXBwX2dsb2JhbF9nZXQKPT0KLy8gT25seSBhZG1pbiBjYW4gc2V0IG5ldyBhZG1pbgphc3NlcnQKYnl0ZWNfMCAvLyAiYWRtaW4iCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIGdldF92ZXJzaW9uCmdldHZlcnNpb25fNDoKcHJvdG8gMCAxCmJ5dGVjXzEgLy8gIiIKZHVwCnB1c2hieXRlcyAweDMxMmUzMCAvLyAiMS4wIgpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDEKY29uY2F0CmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpleHRyYWN0IDIgMApmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDAKY29uY2F0CmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIHVwZGF0ZV9wcmljZV9jYXN0ZXIKdXBkYXRlcHJpY2VjYXN0ZXJfNToKcHJvdG8gMCAwCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKY2FsbHN1YiB1cGRhdGVwcmljZV8yCnJldHN1YgoKLy8gdXBkYXRlX2FkbWluX2Nhc3Rlcgp1cGRhdGVhZG1pbmNhc3Rlcl82Ogpwcm90byAwIDAKYnl0ZWNfMSAvLyAiIgp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMApjYWxsc3ViIHVwZGF0ZWFkbWluXzMKcmV0c3ViCgovLyBnZXRfdmVyc2lvbl9jYXN0ZXIKZ2V0dmVyc2lvbmNhc3Rlcl83Ogpwcm90byAwIDAKYnl0ZWNfMSAvLyAiIgpjYWxsc3ViIGdldHZlcnNpb25fNApmcmFtZV9idXJ5IDAKcHVzaGJ5dGVzIDB4MTUxZjdjNzUgLy8gMHgxNTFmN2M3NQpmcmFtZV9kaWcgMApjb25jYXQKbG9nCnJldHN1Yg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu" + }, + "state": { + "global": { + "num_byte_slices": 1, + "num_uints": 3 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": { + "admin": { + "type": "bytes", + "key": "admin", + "descr": "Address address" + }, + "decimals": { + "type": "uint64", + "key": "decimals", + "descr": "Number of decimals in USD" + }, + "price": { + "type": "uint64", + "key": "price", + "descr": "Price of 1 Algo in USD" + }, + "updated_at": { + "type": "uint64", + "key": "updated_at", + "descr": "Last time the price was updated" + } + }, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "SMA", + "methods": [ + { + "name": "update_price", + "args": [ + { + "type": "uint64", + "name": "price" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "update_admin", + "args": [ + { + "type": "address", + "name": "admin" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "get_version", + "args": [], + "returns": { + "type": "string" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "no_op": "CREATE", + "update_application": "CALL" + } +} + +/** + * Defines an onCompletionAction of 'no_op' + */ +export type OnCompleteNoOp = { onCompleteAction?: 'no_op' | OnApplicationComplete.NoOpOC } +/** + * Defines an onCompletionAction of 'opt_in' + */ +export type OnCompleteOptIn = { onCompleteAction: 'opt_in' | OnApplicationComplete.OptInOC } +/** + * Defines an onCompletionAction of 'close_out' + */ +export type OnCompleteCloseOut = { onCompleteAction: 'close_out' | OnApplicationComplete.CloseOutOC } +/** + * Defines an onCompletionAction of 'delete_application' + */ +export type OnCompleteDelApp = { onCompleteAction: 'delete_application' | OnApplicationComplete.DeleteApplicationOC } +/** + * Defines an onCompletionAction of 'update_application' + */ +export type OnCompleteUpdApp = { onCompleteAction: 'update_application' | OnApplicationComplete.UpdateApplicationOC } +/** + * A state record containing a single unsigned integer + */ +export type IntegerState = { + /** + * Gets the state value as a BigInt + */ + asBigInt(): bigint + /** + * Gets the state value as a number. + */ + asNumber(): number +} +/** + * A state record containing binary data + */ +export type BinaryState = { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array + /** + * Gets the state value as a string + */ + asString(): string +} + +/** + * Defines the types of available calls and state of the Sma smart contract. + */ +export type Sma = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'update_price(uint64)void' | 'update_price', { + argsObj: { + price: bigint | number + } + argsTuple: [price: bigint | number] + returns: void + }> + & Record<'update_admin(address)void' | 'update_admin', { + argsObj: { + admin: string + } + argsTuple: [admin: string] + returns: void + }> + & Record<'get_version()string' | 'get_version', { + argsObj: { + } + argsTuple: [] + returns: string + }> + /** + * Defines the shape of the global and local state of the application. + */ + state: { + global: { + /** + * Address address + */ + 'admin'?: BinaryState + /** + * Number of decimals in USD + */ + 'decimals'?: IntegerState + /** + * Price of 1 Algo in USD + */ + 'price'?: IntegerState + /** + * Last time the price was updated + */ + 'updated_at'?: IntegerState + } + } +} +/** + * Defines the possible abi call signatures + */ +export type SmaSig = keyof Sma['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a bare call is made + */ +export type TypedCallParams = { + method: TSignature + methodArgs: TSignature extends undefined ? undefined : Array +} & AppClientCallCoreParams & CoreAppCallArgs +/** + * Defines the arguments required for a bare call + */ +export type BareCallArgs = Omit +/** + * Maps a method signature from the Sma smart contract to the method's arguments in either tuple of struct form + */ +export type MethodArgs = Sma['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the Sma smart contract to the method's return type + */ +export type MethodReturn = Sma['methods'][TSignature]['returns'] + +/** + * A factory for available 'create' calls + */ +export type SmaCreateCalls = (typeof SmaCallFactory)['create'] +/** + * Defines supported create methods for this smart contract + */ +export type SmaCreateCallParams = + | (TypedCallParams & (OnCompleteNoOp)) +/** + * A factory for available 'update' calls + */ +export type SmaUpdateCalls = (typeof SmaCallFactory)['update'] +/** + * Defines supported update methods for this smart contract + */ +export type SmaUpdateCallParams = + | TypedCallParams +/** + * Defines arguments required for the deploy method. + */ +export type SmaDeployArgs = { + deployTimeParams?: TealTemplateParams + /** + * A delegate which takes a create call factory and returns the create call params for this smart contract + */ + createCall?: (callFactory: SmaCreateCalls) => SmaCreateCallParams + /** + * A delegate which takes a update call factory and returns the update call params for this smart contract + */ + updateCall?: (callFactory: SmaUpdateCalls) => SmaUpdateCallParams +} + + +/** + * Exposes methods for constructing all available smart contract calls + */ +export abstract class SmaCallFactory { + /** + * Gets available create call factories + */ + static get create() { + return { + /** + * Constructs a create call for the SMA smart contract using a bare call + * + * @param params Any parameters for the call + * @returns A TypedCallParams object for the call + */ + bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams & (OnCompleteNoOp) = {}) { + return { + method: undefined, + methodArgs: undefined, + ...params, + } + }, + } + } + + /** + * Gets available update call factories + */ + static get update() { + return { + /** + * Constructs an update call for the SMA smart contract using a bare call + * + * @param params Any parameters for the call + * @returns A TypedCallParams object for the call + */ + bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams = {}) { + return { + method: undefined, + methodArgs: undefined, + ...params, + } + }, + } + } + + /** + * Constructs a no op call for the update_price(uint64)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static updatePrice(args: MethodArgs<'update_price(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'update_price(uint64)void' as const, + methodArgs: Array.isArray(args) ? args : [args.price], + ...params, + } + } + /** + * Constructs a no op call for the update_admin(address)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static updateAdmin(args: MethodArgs<'update_admin(address)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'update_admin(address)void' as const, + methodArgs: Array.isArray(args) ? args : [args.admin], + ...params, + } + } + /** + * Constructs a no op call for the get_version()string ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'get_version()string' as const, + methodArgs: Array.isArray(args) ? args : [], + ...params, + } + } +} + +/** + * A client to make calls to the SMA smart contract + */ +export class SmaClient { + /** + * The underlying `ApplicationClient` for when you want to have more flexibility + */ + public readonly appClient: ApplicationClient + + private readonly sender: SendTransactionFrom | undefined + + /** + * Creates a new instance of `SmaClient` + * + * @param appDetails appDetails The details to identify the app to deploy + * @param algod An algod client instance + */ + constructor(appDetails: AppDetails, private algod: Algodv2) { + this.sender = appDetails.sender + this.appClient = algokit.getAppClient({ + ...appDetails, + app: APP_SPEC + }, algod) + } + + /** + * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type + * + * @param result The AppCallTransactionResult to be mapped + * @param returnValueFormatter An optional delegate to format the return value if required + * @returns The smart contract response with an updated return value + */ + protected mapReturnValue(result: AppCallTransactionResult, returnValueFormatter?: (value: any) => TReturn): AppCallTransactionResultOfType { + if(result.return?.decodeError) { + throw result.return.decodeError + } + const returnValue = result.return?.returnValue !== undefined && returnValueFormatter !== undefined + ? returnValueFormatter(result.return.returnValue) + : result.return?.returnValue as TReturn | undefined + return { ...result, return: returnValue } + } + + /** + * Calls the ABI method with the matching signature using an onCompletion code of NO_OP + * + * @param typedCallParams An object containing the method signature, args, and any other relevant parameters + * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type + * @returns The result of the smart contract call + */ + public async call(typedCallParams: TypedCallParams, returnValueFormatter?: (value: any) => MethodReturn) { + return this.mapReturnValue>(await this.appClient.call(typedCallParams), returnValueFormatter) + } + + /** + * Idempotently deploys the SMA smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public deploy(params: SmaDeployArgs & AppClientDeployCoreParams = {}): ReturnType { + const createArgs = params.createCall?.(SmaCallFactory.create) + const updateArgs = params.updateCall?.(SmaCallFactory.update) + return this.appClient.deploy({ + ...params, + updateArgs, + createArgs, + createOnCompleteAction: createArgs?.onCompleteAction, + }) + } + + /** + * Gets available create methods + */ + public get create() { + const $this = this + return { + /** + * Creates a new instance of the SMA smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The create result + */ + bare(args: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs & (OnCompleteNoOp) = {}): Promise> { + return $this.appClient.create(args) as unknown as Promise> + }, + } + } + + /** + * Gets available update methods + */ + public get update() { + const $this = this + return { + /** + * Updates an existing instance of the SMA smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The update result + */ + bare(args: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs = {}): Promise> { + return $this.appClient.update(args) as unknown as Promise> + }, + } + } + + /** + * Makes a clear_state call to an existing instance of the SMA smart contract. + * + * @param args The arguments for the bare call + * @returns The clear_state result + */ + public clearState(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.appClient.clearState(args) + } + + /** + * Calls the update_price(uint64)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public updatePrice(args: MethodArgs<'update_price(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmaCallFactory.updatePrice(args, params)) + } + + /** + * Calls the update_admin(address)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public updateAdmin(args: MethodArgs<'update_admin(address)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmaCallFactory.updateAdmin(args, params)) + } + + /** + * Calls the get_version()string ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmaCallFactory.getVersion(args, params)) + } + + /** + * Extracts a binary state value out of an AppState dictionary + * + * @param state The state dictionary containing the state value + * @param key The key of the state value + * @returns A BinaryState instance containing the state value, or undefined if the key was not found + */ + private static getBinaryState(state: AppState, key: string): BinaryState | undefined { + const value = state[key] + if (!value) return undefined + if (!('valueRaw' in value)) + throw new Error(`Failed to parse state value for ${key}; received an int when expected a byte array`) + return { + asString(): string { + return value.value + }, + asByteArray(): Uint8Array { + return value.valueRaw + } + } + } + + /** + * Extracts a integer state value out of an AppState dictionary + * + * @param state The state dictionary containing the state value + * @param key The key of the state value + * @returns An IntegerState instance containing the state value, or undefined if the key was not found + */ + private static getIntegerState(state: AppState, key: string): IntegerState | undefined { + const value = state[key] + if (!value) return undefined + if ('valueRaw' in value) + throw new Error(`Failed to parse state value for ${key}; received a byte array when expected a number`) + return { + asBigInt() { + return typeof value.value === 'bigint' ? value.value : BigInt(value.value) + }, + asNumber(): number { + return typeof value.value === 'bigint' ? Number(value.value) : value.value + }, + } + } + + /** + * Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value + */ + public async getGlobalState(): Promise { + const state = await this.appClient.getGlobalState() + return { + get admin() { + return SmaClient.getBinaryState(state, 'admin') + }, + get decimals() { + return SmaClient.getIntegerState(state, 'decimals') + }, + get price() { + return SmaClient.getIntegerState(state, 'price') + }, + get updated_at() { + return SmaClient.getIntegerState(state, 'updated_at') + }, + } + } + + public compose(): SmaComposer { + const client = this + const atc = new AtomicTransactionComposer() + let promiseChain:Promise = Promise.resolve() + const resultMappers: Array any)> = [] + return { + updatePrice(args: MethodArgs<'update_price(uint64)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.updatePrice(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + updateAdmin(args: MethodArgs<'update_admin(address)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.updateAdmin(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.getVersion(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + get update() { + const $this = this + return { + bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.update.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return $this + }, + } + }, + clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.clearState({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom) { + promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit.getTransactionWithSigner(txn, defaultSender ?? client.sender))) + return this + }, + async atc() { + await promiseChain + return atc + }, + async execute() { + await promiseChain + const result = await algokit.sendAtomicTransactionComposer({ atc, sendParams: {} }, client.algod) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue) + } + } + } as unknown as SmaComposer + } +} +export type SmaComposer = { + /** + * Calls the update_price(uint64)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + updatePrice(args: MethodArgs<'update_price(uint64)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmaComposer<[...TReturns, MethodReturn<'update_price(uint64)void'>]> + + /** + * Calls the update_admin(address)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + updateAdmin(args: MethodArgs<'update_admin(address)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmaComposer<[...TReturns, MethodReturn<'update_admin(address)void'>]> + + /** + * Calls the get_version()string ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmaComposer<[...TReturns, MethodReturn<'get_version()string'>]> + + /** + * Gets available update methods + */ + readonly update: { + /** + * Updates an existing instance of the SMA smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs): SmaComposer<[...TReturns, undefined]> + } + + /** + * Makes a clear_state call to an existing instance of the SMA smart contract. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmaComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn One of: A TransactionWithSigner object (returned as is), a TransactionToSign object (signer is obtained from the signer property), a Transaction object (signer is extracted from the defaultSender parameter), an async SendTransactionResult returned by one of algokit utils helpers (signer is obtained from the defaultSender parameter) + * @param defaultSender The default sender to be used to obtain a signer where the object provided to the transaction parameter does not include a signer. + */ + addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom): SmaComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + atc(): Promise + /** + * Executes the transaction group and returns an array of results + */ + execute(): Promise> +} +export type SmaComposerResults = { + returns: TReturns + groupId: string + txIds: string[] + transactions: Transaction[] +} diff --git a/src/contracts/SMI.ts b/src/contracts/SMI.ts new file mode 100644 index 0000000..d320f9b --- /dev/null +++ b/src/contracts/SMI.ts @@ -0,0 +1,2354 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^2 + */ +import * as algokit from '@algorandfoundation/algokit-utils' +import { + AppCallTransactionResult, + AppCallTransactionResultOfType, + CoreAppCallArgs, + RawAppCallArgs, + AppState, + TealTemplateParams, + ABIAppCallArg, +} from '@algorandfoundation/algokit-utils/types/app' +import { + AppClientCallCoreParams, + AppClientCompilationParams, + AppClientDeployCoreParams, + AppDetails, + ApplicationClient, +} from '@algorandfoundation/algokit-utils/types/app-client' +import { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' +import { SendTransactionResult, TransactionToSign, SendTransactionFrom } from '@algorandfoundation/algokit-utils/types/transaction' +import { Algodv2, OnApplicationComplete, Transaction, TransactionWithSigner, AtomicTransactionComposer } from 'algosdk' +export const APP_SPEC: AppSpec = { + "hints": { + "create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void": { + "call_config": { + "no_op": "CREATE" + } + }, + "get_version()string": { + "call_config": { + "no_op": "CALL" + } + }, + "update_manager(address)void": { + "call_config": { + "no_op": "CALL" + } + }, + "update_sma_id(uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)": { + "structs": { + "output": { + "name": "Discount", + "elements": [ + [ + "expiration_type", + "uint64" + ], + [ + "discount_type", + "uint64" + ], + [ + "discount_value", + "uint64" + ], + [ + "expires_at", + "uint64" + ], + [ + "created_at", + "uint64" + ], + [ + "total_claims", + "uint64" + ] + ] + } + }, + "call_config": { + "no_op": "CALL" + } + }, + "is_discount_expired(uint64)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "create_discount(uint64,uint64,uint64,uint64,pay)void": { + "call_config": { + "no_op": "CALL" + } + }, + "delete_discount(uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "compute_price(uint64,bool)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "compute_platform_fee(uint64,application)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "create_subscription(address,uint64,pay,pay,txn,application,application)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "get_subscription(address)(uint64,uint64,uint64,uint64,uint64)": { + "structs": { + "output": { + "name": "Subscription", + "elements": [ + [ + "sub_type", + "uint64" + ], + [ + "sub_id", + "uint64" + ], + [ + "created_at", + "uint64" + ], + [ + "expires_at", + "uint64" + ], + [ + "expiration_type", + "uint64" + ] + ] + } + }, + "call_config": { + "no_op": "CALL" + } + }, + "is_subscriber(address)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "claim_subscription(asset)void": { + "call_config": { + "no_op": "CALL" + } + }, + "transfer_subscription(address,asset)void": { + "call_config": { + "no_op": "CALL" + } + }, + "delete_subscription(asset)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "enable()void": { + "call_config": { + "no_op": "CALL" + } + }, + "disable()void": { + "call_config": { + "no_op": "CALL" + } + }, + "delete()void": { + "call_config": { + "delete_application": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSAzIDIgMTAwMDAwIDEwMDAwIDI0OTAwIDMxMzAwCmJ5dGVjYmxvY2sgMHggMHg2ZDYxNmU2MTY3NjU3MiAweDc0NmY3NDYxNmM1ZjczNzU2MjczIDB4MTUxZjdjNzUgMHg3MzZkNjE1ZjY5NjQgMHg2YzY5NjY2NTYzNzk2MzZjNjUgMHg3MDcyNjk2MzY1IDB4NzM3NTYyNWY3NDc5NzA2NSAweDZkNjE3ODVmNzM3NTYyNzMgMHg2OTZkNjE2NzY1NWY3NTcyNmMgMHg2ZTYxNmQ2NSAweDc1NmU2OTc0NWY2ZTYxNmQ2NSAweDYzNmY2OTZlNWY2OTY0IDB4NjM3MjY1NjE3NDY1NjQ1ZjYxNzQKdHhuIE51bUFwcEFyZ3MKaW50Y18wIC8vIDAKPT0KYm56IG1haW5fbDQwCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4YTY1OTJhZjggLy8gImNyZWF0ZShzdHJpbmcsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHN0cmluZyxzdHJpbmcpdm9pZCIKPT0KYm56IG1haW5fbDM5CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MmZiYTVhMWIgLy8gImdldF92ZXJzaW9uKClzdHJpbmciCj09CmJueiBtYWluX2wzOAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGM4NmZkYjAxIC8vICJ1cGRhdGVfbWFuYWdlcihhZGRyZXNzKXZvaWQiCj09CmJueiBtYWluX2wzNwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDM2NmJmZGNiIC8vICJ1cGRhdGVfc21hX2lkKHVpbnQ2NCl2b2lkIgo9PQpibnogbWFpbl9sMzYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgwOTFlMTMyZiAvLyAiZ2V0X2Rpc2NvdW50KHVpbnQ2NCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgo9PQpibnogbWFpbl9sMzUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhjMzc2MDljMCAvLyAiaXNfZGlzY291bnRfZXhwaXJlZCh1aW50NjQpdWludDY0Igo9PQpibnogbWFpbl9sMzQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg3NGViYWEwYiAvLyAiY3JlYXRlX2Rpc2NvdW50KHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxwYXkpdm9pZCIKPT0KYm56IG1haW5fbDMzCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4YTljMGVjYzAgLy8gImRlbGV0ZV9kaXNjb3VudCh1aW50NjQpdm9pZCIKPT0KYm56IG1haW5fbDMyCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4ZTZhNmJhMzQgLy8gImNvbXB1dGVfcHJpY2UodWludDY0LGJvb2wpdWludDY0Igo9PQpibnogbWFpbl9sMzEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg2NTQ5NWM4YyAvLyAiY29tcHV0ZV9wbGF0Zm9ybV9mZWUodWludDY0LGFwcGxpY2F0aW9uKXVpbnQ2NCIKPT0KYm56IG1haW5fbDMwCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4YzliMWZhMzMgLy8gImNyZWF0ZV9zdWJzY3JpcHRpb24oYWRkcmVzcyx1aW50NjQscGF5LHBheSx0eG4sYXBwbGljYXRpb24sYXBwbGljYXRpb24pdWludDY0Igo9PQpibnogbWFpbl9sMjkKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhjMTY4NmZlZCAvLyAiZ2V0X3N1YnNjcmlwdGlvbihhZGRyZXNzKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKPT0KYm56IG1haW5fbDI4CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MWVjNWU5OGEgLy8gImlzX3N1YnNjcmliZXIoYWRkcmVzcyl1aW50NjQiCj09CmJueiBtYWluX2wyNwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDk4ZjQzMmMwIC8vICJjbGFpbV9zdWJzY3JpcHRpb24oYXNzZXQpdm9pZCIKPT0KYm56IG1haW5fbDI2CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4M2IzOTVhNzQgLy8gInRyYW5zZmVyX3N1YnNjcmlwdGlvbihhZGRyZXNzLGFzc2V0KXZvaWQiCj09CmJueiBtYWluX2wyNQp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDViMWMwOTFkIC8vICJkZWxldGVfc3Vic2NyaXB0aW9uKGFzc2V0KXVpbnQ2NCIKPT0KYm56IG1haW5fbDI0CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4NTg1N2Q1NDggLy8gImVuYWJsZSgpdm9pZCIKPT0KYm56IG1haW5fbDIzCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4ZjQwMmM5YTMgLy8gImRpc2FibGUoKXZvaWQiCj09CmJueiBtYWluX2wyMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vICJkZWxldGUoKXZvaWQiCj09CmJueiBtYWluX2wyMQplcnIKbWFpbl9sMjE6CnR4biBPbkNvbXBsZXRpb24KcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGRlbGV0ZWNhc3Rlcl81MgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjI6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgZGlzYWJsZWNhc3Rlcl81MQppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjM6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgZW5hYmxlY2FzdGVyXzUwCmludGNfMSAvLyAxCnJldHVybgptYWluX2wyNDoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBkZWxldGVzdWJzY3JpcHRpb25jYXN0ZXJfNDkKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDI1Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHRyYW5zZmVyc3Vic2NyaXB0aW9uY2FzdGVyXzQ4CmludGNfMSAvLyAxCnJldHVybgptYWluX2wyNjoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBjbGFpbXN1YnNjcmlwdGlvbmNhc3Rlcl80NwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjc6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgaXNzdWJzY3JpYmVyY2FzdGVyXzQ2CmludGNfMSAvLyAxCnJldHVybgptYWluX2wyODoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBnZXRzdWJzY3JpcHRpb25jYXN0ZXJfNDUKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDI5Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGNyZWF0ZXN1YnNjcmlwdGlvbmNhc3Rlcl80NAppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMzA6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgY29tcHV0ZXBsYXRmb3JtZmVlY2FzdGVyXzQzCmludGNfMSAvLyAxCnJldHVybgptYWluX2wzMToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBjb21wdXRlcHJpY2VjYXN0ZXJfNDIKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDMyOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGRlbGV0ZWRpc2NvdW50Y2FzdGVyXzQxCmludGNfMSAvLyAxCnJldHVybgptYWluX2wzMzoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBjcmVhdGVkaXNjb3VudGNhc3Rlcl80MAppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMzQ6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgaXNkaXNjb3VudGV4cGlyZWRjYXN0ZXJfMzkKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDM1Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGdldGRpc2NvdW50Y2FzdGVyXzM4CmludGNfMSAvLyAxCnJldHVybgptYWluX2wzNjoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiB1cGRhdGVzbWFpZGNhc3Rlcl8zNwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMzc6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgdXBkYXRlbWFuYWdlcmNhc3Rlcl8zNgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMzg6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgZ2V0dmVyc2lvbmNhc3Rlcl8zNQppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMzk6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKPT0KJiYKYXNzZXJ0CmNhbGxzdWIgY3JlYXRlY2FzdGVyXzM0CmludGNfMSAvLyAxCnJldHVybgptYWluX2w0MDoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzEgLy8gT3B0SW4KPT0KYm56IG1haW5fbDQ2CnR4biBPbkNvbXBsZXRpb24KaW50Y18zIC8vIENsb3NlT3V0Cj09CmJueiBtYWluX2w0NQp0eG4gT25Db21wbGV0aW9uCnB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgo9PQpibnogbWFpbl9sNDQKZXJyCm1haW5fbDQ0Ogp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQphc3NlcnQKY2FsbHN1YiB1cGRhdGVfMTMKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDQ1Ogp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQphc3NlcnQKY2FsbHN1YiBjbG9zZW91dF8xNQppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sNDY6CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CmFzc2VydApjYWxsc3ViIG9wdGluXzE0CmludGNfMSAvLyAxCnJldHVybgoKLy8gaW50X3RvX2FzY2lpCmludHRvYXNjaWlfMDoKcHJvdG8gMSAxCnB1c2hieXRlcyAweDMwMzEzMjMzMzQzNTM2MzczODM5IC8vICIwMTIzNDU2Nzg5IgpmcmFtZV9kaWcgLTEKaW50Y18xIC8vIDEKZXh0cmFjdDMKcmV0c3ViCgovLyBpdG9hCml0b2FfMToKcHJvdG8gMSAxCmZyYW1lX2RpZyAtMQppbnRjXzAgLy8gMAo9PQpibnogaXRvYV8xX2w1CmZyYW1lX2RpZyAtMQpwdXNoaW50IDEwIC8vIDEwCi8KaW50Y18wIC8vIDAKPgpibnogaXRvYV8xX2w0CmJ5dGVjXzAgLy8gIiIKaXRvYV8xX2wzOgpmcmFtZV9kaWcgLTEKcHVzaGludCAxMCAvLyAxMAolCmNhbGxzdWIgaW50dG9hc2NpaV8wCmNvbmNhdApiIGl0b2FfMV9sNgppdG9hXzFfbDQ6CmZyYW1lX2RpZyAtMQpwdXNoaW50IDEwIC8vIDEwCi8KY2FsbHN1YiBpdG9hXzEKYiBpdG9hXzFfbDMKaXRvYV8xX2w1OgpwdXNoYnl0ZXMgMHgzMCAvLyAiMCIKaXRvYV8xX2w2OgpyZXRzdWIKCi8vIGlubmVyX3VzZF9pbl9taWNyb2FsZ28KaW5uZXJ1c2Rpbm1pY3JvYWxnb18yOgpwcm90byAyIDEKZnJhbWVfZGlnIC0yCnB1c2hieXRlcyAweDc1NzA2NDYxNzQ2NTY0NWY2MTc0IC8vICJ1cGRhdGVkX2F0IgphcHBfZ2xvYmFsX2dldF9leApzdG9yZSAyNQpzdG9yZSAyNApmcmFtZV9kaWcgLTIKcHVzaGJ5dGVzIDB4NjQ2NTYzNjk2ZDYxNmM3MyAvLyAiZGVjaW1hbHMiCmFwcF9nbG9iYWxfZ2V0X2V4CnN0b3JlIDI3CnN0b3JlIDI2CmZyYW1lX2RpZyAtMgpieXRlYyA2IC8vICJwcmljZSIKYXBwX2dsb2JhbF9nZXRfZXgKc3RvcmUgMjkKc3RvcmUgMjgKbG9hZCAyNApzdG9yZSAyMApsb2FkIDI2CnN0b3JlIDIxCmxvYWQgMjgKc3RvcmUgMjIKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcApsb2FkIDIwCi0KcHVzaGludCA4NjQwMCAvLyA4NjQwMAo+CmJueiBpbm5lcnVzZGlubWljcm9hbGdvXzJfbDMKaW5uZXJ1c2Rpbm1pY3JvYWxnb18yX2wxOgpmcmFtZV9kaWcgLTEKaW50YyA1IC8vIDEwMDAwCioKcHVzaGludCAxMCAvLyAxMApsb2FkIDIxCmV4cAoqCmxvYWQgMjIKLwppbnRjIDUgLy8gMTAwMDAKLwppbnRjIDUgLy8gMTAwMDAKKgpzdG9yZSAyMwpsb2FkIDIzCmludGMgNCAvLyAxMDAwMDAKPApieiBpbm5lcnVzZGlubWljcm9hbGdvXzJfbDQKaW50YyA0IC8vIDEwMDAwMApyZXRzdWIKaW5uZXJ1c2Rpbm1pY3JvYWxnb18yX2wzOgppbnRjXzMgLy8gMgpzdG9yZSAyMQpwdXNoaW50IDMwIC8vIDMwCnN0b3JlIDIyCmIgaW5uZXJ1c2Rpbm1pY3JvYWxnb18yX2wxCmlubmVydXNkaW5taWNyb2FsZ29fMl9sNDoKbG9hZCAyMwpyZXRzdWIKCi8vIGlubmVyX2NyZWF0ZV9uZnQKaW5uZXJjcmVhdGVuZnRfMzoKcHJvdG8gMyAxCml0eG5fYmVnaW4KaW50Y18yIC8vIGFjZmcKaXR4bl9maWVsZCBUeXBlRW51bQppbnRjXzEgLy8gMQppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCmludGNfMSAvLyAxCml0eG5fZmllbGQgQ29uZmlnQXNzZXREZWZhdWx0RnJvemVuCmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKZnJhbWVfZGlnIC0zCml0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCmdsb2JhbCBaZXJvQWRkcmVzcwppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdAppdHhuIENyZWF0ZWRBc3NldElECnJldHN1YgoKLy8gaW5uZXJfdHJhbnNmZXJfbmZ0CmlubmVydHJhbnNmZXJuZnRfNDoKcHJvdG8gMyAwCml0eG5fYmVnaW4KcHVzaGludCA0IC8vIGF4ZmVyCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC0zCml0eG5fZmllbGQgWGZlckFzc2V0CmludGNfMSAvLyAxCml0eG5fZmllbGQgQXNzZXRBbW91bnQKZnJhbWVfZGlnIC0yCml0eG5fZmllbGQgQXNzZXRTZW5kZXIKZnJhbWVfZGlnIC0xCml0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIGlubmVyX2RlbGV0ZV9uZnQKaW5uZXJkZWxldGVuZnRfNToKcHJvdG8gMSAwCml0eG5fYmVnaW4KaW50Y18yIC8vIGFjZmcKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTEKaXR4bl9maWVsZCBDb25maWdBc3NldAppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIGlubmVyX2RlbGV0ZV9zdWJzY3JpcHRpb24KaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fNjoKcHJvdG8gMiAwCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTEKYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCnN0b3JlIDU2CnN0b3JlIDU1CmxvYWQgNTYKbG9hZCA1NQppbnRjXzAgLy8gMAo+CiYmCmJueiBpbm5lcmRlbGV0ZXN1YnNjcmlwdGlvbl82X2wzCmlubmVyZGVsZXRlc3Vic2NyaXB0aW9uXzZfbDE6CmZyYW1lX2RpZyAtMQpjYWxsc3ViIGlubmVyZGVsZXRlbmZ0XzUKYnl0ZWNfMiAvLyAidG90YWxfc3VicyIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKIT0KYnogaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fNl9sNApieXRlY18yIC8vICJ0b3RhbF9zdWJzIgpieXRlY18yIC8vICJ0b3RhbF9zdWJzIgphcHBfZ2xvYmFsX2dldAppbnRjXzEgLy8gMQotCmFwcF9nbG9iYWxfcHV0CmIgaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fNl9sNAppbm5lcmRlbGV0ZXN1YnNjcmlwdGlvbl82X2wzOgpmcmFtZV9kaWcgLTEKZnJhbWVfZGlnIC0yCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmNhbGxzdWIgaW5uZXJ0cmFuc2Zlcm5mdF80CmIgaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fNl9sMQppbm5lcmRlbGV0ZXN1YnNjcmlwdGlvbl82X2w0OgpmcmFtZV9kaWcgLTIKYm94X2RlbApwb3AKcmV0c3ViCgovLyBpbm5lcl9jb21wdXRlX2V4cGlyYXRpb24KaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83Ogpwcm90byAyIDEKZnJhbWVfZGlnIC0yCmludGNfMCAvLyAwCj09CmJueiBpbm5lcmNvbXB1dGVleHBpcmF0aW9uXzdfbDEwCmZyYW1lX2RpZyAtMQppbnRjXzEgLy8gMQo9PQpibnogaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2w5CmZyYW1lX2RpZyAtMQppbnRjXzMgLy8gMgo9PQpibnogaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2w4CmZyYW1lX2RpZyAtMQppbnRjXzIgLy8gMwo9PQpibnogaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2w3CmZyYW1lX2RpZyAtMQpwdXNoaW50IDQgLy8gNAo9PQpibnogaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2w2CmVycgppbm5lcmNvbXB1dGVleHBpcmF0aW9uXzdfbDY6Cmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKcHVzaGludCAzMTUzNjAwMCAvLyAzMTUzNjAwMAorCmIgaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2wxMQppbm5lcmNvbXB1dGVleHBpcmF0aW9uXzdfbDc6Cmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKcHVzaGludCAxNTU1MjAwMCAvLyAxNTU1MjAwMAorCmIgaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2wxMQppbm5lcmNvbXB1dGVleHBpcmF0aW9uXzdfbDg6Cmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKcHVzaGludCA3Nzc2MDAwIC8vIDc3NzYwMDAKKwpiIGlubmVyY29tcHV0ZWV4cGlyYXRpb25fN19sMTEKaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2w5OgpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCnB1c2hpbnQgMjU5MjAwMCAvLyAyNTkyMDAwCisKYiBpbm5lcmNvbXB1dGVleHBpcmF0aW9uXzdfbDExCmlubmVyY29tcHV0ZWV4cGlyYXRpb25fN19sMTA6CmludGNfMCAvLyAwCmlubmVyY29tcHV0ZWV4cGlyYXRpb25fN19sMTE6CnJldHN1YgoKLy8gaW5jcmVtZW50X2Rpc2NvdW50X3RvdGFsX2NsYWltcwppbmNyZW1lbnRkaXNjb3VudHRvdGFsY2xhaW1zXzg6CnByb3RvIDEgMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCmR1cG4gNQpieXRlY18wIC8vICIiCmludGNfMCAvLyAwCmR1cApieXRlY18wIC8vICIiCmR1cApmcmFtZV9kaWcgLTEKaXRvYgpib3hfbGVuCnN0b3JlIDE3CnN0b3JlIDE2CmxvYWQgMTcKYnogaW5jcmVtZW50ZGlzY291bnR0b3RhbGNsYWltc184X2wyCmZyYW1lX2RpZyAtMQppdG9iCmJveF9nZXQKc3RvcmUgMTkKc3RvcmUgMTgKbG9hZCAxOQphc3NlcnQKbG9hZCAxOApmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKcHVzaGludCA4IC8vIDgKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAxCmluY3JlbWVudGRpc2NvdW50dG90YWxjbGFpbXNfOF9sMjoKZnJhbWVfZGlnIDAKcHVzaGludCAxNiAvLyAxNgpleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIDAKcHVzaGludCAyNCAvLyAyNApleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDMKZnJhbWVfZGlnIDAKcHVzaGludCAzMiAvLyAzMgpleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDQKZnJhbWVfZGlnIDAKcHVzaGludCA0MCAvLyA0MApleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDUKZnJhbWVfZGlnIDUKaW50Y18xIC8vIDEKKwpmcmFtZV9idXJ5IDYKZnJhbWVfZGlnIC0xCml0b2IKZnJhbWVfZGlnIDEKaXRvYgpjb25jYXQKZnJhbWVfZGlnIDIKaXRvYgpjb25jYXQKZnJhbWVfZGlnIDMKaXRvYgpjb25jYXQKZnJhbWVfZGlnIDQKaXRvYgpjb25jYXQKZnJhbWVfZGlnIDYKaXRvYgpjb25jYXQKZnJhbWVfYnVyeSA3CmZyYW1lX2RpZyAtMQppdG9iCmJveF9kZWwKcG9wCmZyYW1lX2RpZyAtMQppdG9iCmZyYW1lX2RpZyA3CmJveF9wdXQKcmV0c3ViCgovLyBpbm5lcl9jb21wdXRlX2Rpc2NvdW50X3ByaWNlCmlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOToKcHJvdG8gMiAxCmJ5dGVjXzAgLy8gIiIKaW50Y18wIC8vIDAKZHVwbiAyCmZyYW1lX2RpZyAtMgppdG9iCmJveF9sZW4Kc3RvcmUgMTMKc3RvcmUgMTIKbG9hZCAxMwpibnogaW5uZXJjb21wdXRlZGlzY291bnRwcmljZV85X2wyCmZyYW1lX2RpZyAtMQpiIGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOV9sOQppbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDI6CmZyYW1lX2RpZyAtMgppdG9iCmJveF9nZXQKc3RvcmUgMTUKc3RvcmUgMTQKbG9hZCAxNQphc3NlcnQKbG9hZCAxNApmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKcHVzaGludCA4IC8vIDgKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAwCnB1c2hpbnQgMTYgLy8gMTYKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAwCnB1c2hpbnQgMjQgLy8gMjQKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAzCmZyYW1lX2RpZyAzCmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKPApmcmFtZV9kaWcgMwppbnRjXzAgLy8gMAo+CiYmCmJueiBpbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDgKZnJhbWVfZGlnIDEKaW50Y18wIC8vIDAKPT0KYm56IGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOV9sNwpmcmFtZV9kaWcgMQppbnRjXzEgLy8gMQo9PQpibnogaW5uZXJjb21wdXRlZGlzY291bnRwcmljZV85X2w2CmZyYW1lX2RpZyAtMQpiIGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOV9sOQppbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDY6CmZyYW1lX2RpZyAtMgpjYWxsc3ViIGluY3JlbWVudGRpc2NvdW50dG90YWxjbGFpbXNfOApmcmFtZV9kaWcgLTEKZnJhbWVfZGlnIDIKLQpiIGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOV9sOQppbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDc6CmZyYW1lX2RpZyAtMgpjYWxsc3ViIGluY3JlbWVudGRpc2NvdW50dG90YWxjbGFpbXNfOApmcmFtZV9kaWcgLTEKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAyCioKcHVzaGludCAxMDAgLy8gMTAwCi8KLQpiIGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOV9sOQppbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDg6CmZyYW1lX2RpZyAtMQppbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDk6CmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIGlubmVyX2NvbXB1dGVfcHJpY2UKaW5uZXJjb21wdXRlcHJpY2VfMTA6CnByb3RvIDEgMQppbnRjXzAgLy8gMApieXRlYyA2IC8vICJwcmljZSIKYXBwX2dsb2JhbF9nZXQKZnJhbWVfZGlnIC0xCmludGNfMCAvLyAwCj09CmJueiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sMTAKZnJhbWVfZGlnIC0xCmludGNfMSAvLyAxCj09CmJueiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sOQpmcmFtZV9kaWcgLTEKaW50Y18zIC8vIDIKPT0KYm56IGlubmVyY29tcHV0ZXByaWNlXzEwX2w4CmZyYW1lX2RpZyAtMQppbnRjXzIgLy8gMwo9PQpibnogaW5uZXJjb21wdXRlcHJpY2VfMTBfbDcKZnJhbWVfZGlnIC0xCnB1c2hpbnQgNCAvLyA0Cj09CmJueiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sNgplcnIKaW5uZXJjb21wdXRlcHJpY2VfMTBfbDY6CnB1c2hpbnQgMTIgLy8gMTIKYiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sMTEKaW5uZXJjb21wdXRlcHJpY2VfMTBfbDc6CnB1c2hpbnQgNiAvLyA2CmIgaW5uZXJjb21wdXRlcHJpY2VfMTBfbDExCmlubmVyY29tcHV0ZXByaWNlXzEwX2w4OgppbnRjXzIgLy8gMwpiIGlubmVyY29tcHV0ZXByaWNlXzEwX2wxMQppbm5lcmNvbXB1dGVwcmljZV8xMF9sOToKaW50Y18xIC8vIDEKYiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sMTEKaW5uZXJjb21wdXRlcHJpY2VfMTBfbDEwOgppbnRjXzEgLy8gMQppbm5lcmNvbXB1dGVwcmljZV8xMF9sMTE6CioKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgMApjYWxsc3ViIGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOQpmcmFtZV9idXJ5IDAKcmV0c3ViCgovLyBpbm5lcl92ZXJpZnlfZXhwaXJhdGlvbl90eXBlCmlubmVydmVyaWZ5ZXhwaXJhdGlvbnR5cGVfMTE6CnByb3RvIDEgMApieXRlYyA3IC8vICJzdWJfdHlwZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPT0KZnJhbWVfZGlnIC0xCmludGNfMSAvLyAxCj09Cnx8CmZyYW1lX2RpZyAtMQppbnRjXzMgLy8gMgo9PQp8fApmcmFtZV9kaWcgLTEKaW50Y18yIC8vIDMKPT0KfHwKZnJhbWVfZGlnIC0xCnB1c2hpbnQgNCAvLyA0Cj09Cnx8Ci8vIEV4cGlyYXRpb24gdHlwZSBpcyBpbnZhbGlkCmFzc2VydApyZXRzdWIKCi8vIGNyZWF0ZQpjcmVhdGVfMTI6CnByb3RvIDkgMApieXRlYyAxMiAvLyAiY29pbl9pZCIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTMgLy8gImNyZWF0ZWRfYXQiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDkgLy8gImltYWdlX3VybCIKcHVzaGJ5dGVzIDB4Njk3MDY2NzMzYTJmMmY2MjYxNjY3OTYyNjU2OTYzNjQ2NDdhMzc2YjYyNzU3ODYxNmE2YTM2NjI2ZjYyMzU2MjZhNzE3NDc3NjU3MTM2Nzc2MzY4NmI2NDZiNjk3MTM0NzY3NjY4Nzc3Mjc3NzI2ZTY1Mzc2OTdhMzQ2NjMyMzU3ODY5IC8vICJpcGZzOi8vYmFmeWJlaWNkZHo3a2J1eGFqajZib2I1YmpxdHdlcTZ3Y2hrZGtpcTR2dmh3cndybmU3aXo0ZjI1eGkiCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDUgLy8gImxpZmVjeWNsZSIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMSAvLyAibWFuYWdlciIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDggLy8gIm1heF9zdWJzIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyAxMCAvLyAibmFtZSIKcHVzaGJ5dGVzIDB4NjQ2NTY2NjE3NTZjNzQgLy8gImRlZmF1bHQiCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDYgLy8gInByaWNlIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyA0IC8vICJzbWFfaWQiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDcgLy8gInN1Yl90eXBlIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlY18yIC8vICJ0b3RhbF9zdWJzIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyAxMSAvLyAidW5pdF9uYW1lIgpwdXNoYnl0ZXMgMHg1MzU0NTAgLy8gIlNUUCIKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTAgLy8gIm5hbWUiCmZyYW1lX2RpZyAtOQpleHRyYWN0IDIgMAphcHBfZ2xvYmFsX3B1dApieXRlY18xIC8vICJtYW5hZ2VyIgpmcmFtZV9kaWcgLTgKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNyAvLyAic3ViX3R5cGUiCmZyYW1lX2RpZyAtNwphcHBfZ2xvYmFsX3B1dApieXRlYyA2IC8vICJwcmljZSIKZnJhbWVfZGlnIC02CmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDggLy8gIm1heF9zdWJzIgpmcmFtZV9kaWcgLTUKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTIgLy8gImNvaW5faWQiCmZyYW1lX2RpZyAtNAphcHBfZ2xvYmFsX3B1dApieXRlYyA0IC8vICJzbWFfaWQiCmZyYW1lX2RpZyAtMwphcHBfZ2xvYmFsX3B1dApieXRlYyAxMSAvLyAidW5pdF9uYW1lIgpmcmFtZV9kaWcgLTIKZXh0cmFjdCAyIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgOSAvLyAiaW1hZ2VfdXJsIgpmcmFtZV9kaWcgLTEKZXh0cmFjdCAyIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTMgLy8gImNyZWF0ZWRfYXQiCmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKYXBwX2dsb2JhbF9wdXQKcmV0c3ViCgovLyB1cGRhdGUKdXBkYXRlXzEzOgpwcm90byAwIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KYXNzZXJ0CnJldHN1YgoKLy8gb3B0aW4Kb3B0aW5fMTQ6CnByb3RvIDAgMApnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRApieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldF9leApzdG9yZSAwCmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0Cj09Ci8vIE9ubHkgc2FtZSBtYW5hZ2VyIGNhbiBvcHQtaW4KYXNzZXJ0CnJldHN1YgoKLy8gY2xvc2VvdXQKY2xvc2VvdXRfMTU6CnByb3RvIDAgMApnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRApieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldF9leApzdG9yZSAxCmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0Cj09Ci8vIE9ubHkgc2FtZSBtYW5hZ2VyIGNhbiBvcHQtb3V0CmFzc2VydApyZXRzdWIKCi8vIGdldF92ZXJzaW9uCmdldHZlcnNpb25fMTY6CnByb3RvIDAgMQpieXRlY18wIC8vICIiCmR1cApwdXNoYnl0ZXMgMHgzMTJlMzAgLy8gIjEuMCIKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmxlbgppdG9iCmV4dHJhY3QgNiAwCmZyYW1lX2RpZyAxCmNvbmNhdApmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKZXh0cmFjdCAyIDAKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmxlbgppdG9iCmV4dHJhY3QgNiAwCmZyYW1lX2RpZyAwCmNvbmNhdApmcmFtZV9idXJ5IDAKcmV0c3ViCgovLyB1cGRhdGVfbWFuYWdlcgp1cGRhdGVtYW5hZ2VyXzE3Ogpwcm90byAxIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydApieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTEKIT0KLy8gTmV3IG1hbmFnZXIgY2Fubm90IGJlIHRoZSBzYW1lIGFzIHRoZSBvbGQgbWFuYWdlcgphc3NlcnQKYnl0ZWNfMSAvLyAibWFuYWdlciIKZnJhbWVfZGlnIC0xCmFwcF9nbG9iYWxfcHV0CnJldHN1YgoKLy8gdXBkYXRlX3NtYV9pZAp1cGRhdGVzbWFpZF8xODoKcHJvdG8gMSAwCnR4biBTZW5kZXIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCj09Ci8vIHVuYXV0aG9yaXplZAphc3NlcnQKYnl0ZWMgNCAvLyAic21hX2lkIgpmcmFtZV9kaWcgLTEKYXBwX2dsb2JhbF9wdXQKcmV0c3ViCgovLyBnZXRfZGlzY291bnQKZ2V0ZGlzY291bnRfMTk6CnByb3RvIDEgMQpieXRlY18wIC8vICIiCmZyYW1lX2RpZyAtMQppdG9iCmJveF9nZXQKc3RvcmUgMwpzdG9yZSAyCmxvYWQgMwphc3NlcnQKbG9hZCAyCmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIGlzX2Rpc2NvdW50X2V4cGlyZWQKaXNkaXNjb3VudGV4cGlyZWRfMjA6CnByb3RvIDEgMQppbnRjXzAgLy8gMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCmZyYW1lX2RpZyAtMQppdG9iCmJveF9sZW4Kc3RvcmUgNQpzdG9yZSA0CmxvYWQgNQpibnogaXNkaXNjb3VudGV4cGlyZWRfMjBfbDIKaW50Y18xIC8vIDEKZnJhbWVfYnVyeSAwCmIgaXNkaXNjb3VudGV4cGlyZWRfMjBfbDcKaXNkaXNjb3VudGV4cGlyZWRfMjBfbDI6CmZyYW1lX2RpZyAtMQppdG9iCmJveF9nZXQKc3RvcmUgNwpzdG9yZSA2CmxvYWQgNwphc3NlcnQKbG9hZCA2CmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpwdXNoaW50IDI0IC8vIDI0CmV4dHJhY3RfdWludDY0CmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgMgppbnRjXzAgLy8gMAo9PQpibnogaXNkaXNjb3VudGV4cGlyZWRfMjBfbDYKZnJhbWVfZGlnIDIKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAo+CmJueiBpc2Rpc2NvdW50ZXhwaXJlZF8yMF9sNQppbnRjXzEgLy8gMQpmcmFtZV9idXJ5IDAKYiBpc2Rpc2NvdW50ZXhwaXJlZF8yMF9sNwppc2Rpc2NvdW50ZXhwaXJlZF8yMF9sNToKaW50Y18wIC8vIDAKZnJhbWVfYnVyeSAwCmIgaXNkaXNjb3VudGV4cGlyZWRfMjBfbDcKaXNkaXNjb3VudGV4cGlyZWRfMjBfbDY6CmludGNfMCAvLyAwCmZyYW1lX2J1cnkgMAppc2Rpc2NvdW50ZXhwaXJlZF8yMF9sNzoKcmV0c3ViCgovLyBjcmVhdGVfZGlzY291bnQKY3JlYXRlZGlzY291bnRfMjE6CnByb3RvIDUgMAppbnRjXzAgLy8gMApkdXBuIDIKYnl0ZWNfMCAvLyAiIgppbnRjXzAgLy8gMApkdXAKYnl0ZWNfMCAvLyAiIgpkdXAKdHhuIFNlbmRlcgpieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldAo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmZyYW1lX2RpZyAtMQpndHhucyBTZW5kZXIKYnl0ZWNfMSAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKPT0KLy8gRmVlIHR4biBzZW50IGJ5IHRoZSBtYW5hZ2VyIG11c3QgYmUgb2YgdGhlIHJpZ2h0IGFtb3VudAphc3NlcnQKZnJhbWVfZGlnIC0xCmd0eG5zIEFtb3VudAppbnRjIDYgLy8gMjQ5MDAKPT0KLy8gRmVlIHR4biBzZW50IGJ5IHRoZSBtYW5hZ2VyIG11c3QgYmUgb2YgdGhlIHJpZ2h0IGFtb3VudAphc3NlcnQKZnJhbWVfZGlnIC00CmludGNfMCAvLyAwCj09CmZyYW1lX2RpZyAtNAppbnRjXzEgLy8gMQo9PQp8fAovLyBEaXNjb3VudCB0eXBlIG11c3QgYmUgZWl0aGVyIHBlcmNlbnRhZ2Ugb3IgYW1vdW50CmFzc2VydApmcmFtZV9kaWcgLTUKaXRvYgpib3hfbGVuCnN0b3JlIDkKc3RvcmUgOApsb2FkIDkKaW50Y18xIC8vIDEKIT0KLy8gRGlzY291bnQgYWxyZWFkeSBleGlzdHMsIGRlbGV0ZSBvbmUgZmlyc3QKYXNzZXJ0Cmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAtMgppbnRjXzAgLy8gMAo+CmJueiBjcmVhdGVkaXNjb3VudF8yMV9sMgppbnRjXzAgLy8gMApiIGNyZWF0ZWRpc2NvdW50XzIxX2wzCmNyZWF0ZWRpc2NvdW50XzIxX2wyOgpmcmFtZV9kaWcgMApmcmFtZV9kaWcgLTIKKwpjcmVhdGVkaXNjb3VudF8yMV9sMzoKZnJhbWVfYnVyeSAxCmludGNfMCAvLyAwCmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgLTUKaXRvYgpmcmFtZV9kaWcgLTQKaXRvYgpjb25jYXQKZnJhbWVfZGlnIC0zCml0b2IKY29uY2F0CmZyYW1lX2RpZyAxCml0b2IKY29uY2F0CmZyYW1lX2RpZyAwCml0b2IKY29uY2F0CmZyYW1lX2RpZyAyCml0b2IKY29uY2F0CmZyYW1lX2J1cnkgMwpmcmFtZV9kaWcgLTUKaXRvYgpib3hfZGVsCnBvcApmcmFtZV9kaWcgLTUKaXRvYgpmcmFtZV9kaWcgMwpib3hfcHV0CnJldHN1YgoKLy8gZGVsZXRlX2Rpc2NvdW50CmRlbGV0ZWRpc2NvdW50XzIyOgpwcm90byAxIDAKdHhuIFNlbmRlcgpieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldAo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmZyYW1lX2RpZyAtMQppdG9iCmJveF9sZW4Kc3RvcmUgMTEKc3RvcmUgMTAKbG9hZCAxMQppbnRjXzEgLy8gMQo9PQovLyBEaXNjb3VudCBkb2VzIG5vdCBleGlzdAphc3NlcnQKaXR4bl9iZWdpbgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwppdHhuX2ZpZWxkIFNlbmRlcgppbnRjXzEgLy8gcGF5Cml0eG5fZmllbGQgVHlwZUVudW0KdHhuIFNlbmRlcgppdHhuX2ZpZWxkIFJlY2VpdmVyCmludGMgNiAvLyAyNDkwMAppdHhuX2ZpZWxkIEFtb3VudAppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdApmcmFtZV9kaWcgLTEKaXRvYgpib3hfZGVsCnBvcApyZXRzdWIKCi8vIGNvbXB1dGVfcHJpY2UKY29tcHV0ZXByaWNlXzIzOgpwcm90byAyIDEKaW50Y18wIC8vIDAKZnJhbWVfZGlnIC0xCmludGNfMSAvLyAxCj09CmJueiBjb21wdXRlcHJpY2VfMjNfbDIKYnl0ZWMgNiAvLyAicHJpY2UiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2J1cnkgMApiIGNvbXB1dGVwcmljZV8yM19sMwpjb21wdXRlcHJpY2VfMjNfbDI6CmZyYW1lX2RpZyAtMgpjYWxsc3ViIGlubmVyY29tcHV0ZXByaWNlXzEwCmZyYW1lX2J1cnkgMApjb21wdXRlcHJpY2VfMjNfbDM6CnJldHN1YgoKLy8gY29tcHV0ZV9wbGF0Zm9ybV9mZWUKY29tcHV0ZXBsYXRmb3JtZmVlXzI0Ogpwcm90byAyIDEKaW50Y18wIC8vIDAKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyA0IC8vICJzbWFfaWQiCmFwcF9nbG9iYWxfZ2V0Cj09CmFzc2VydApieXRlYyA0IC8vICJzbWFfaWQiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2RpZyAtMgpjYWxsc3ViIGlubmVydXNkaW5taWNyb2FsZ29fMgpmcmFtZV9idXJ5IDAKcmV0c3ViCgovLyBjcmVhdGVfc3Vic2NyaXB0aW9uCmNyZWF0ZXN1YnNjcmlwdGlvbl8yNToKcHJvdG8gNyAxCmludGNfMCAvLyAwCmR1cG4gNQpieXRlY18wIC8vICIiCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIiIKaW50Y18wIC8vIDAKZHVwCmJ5dGVjXzAgLy8gIiIKZHVwCmJ5dGVjIDUgLy8gImxpZmVjeWNsZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPT0KLy8gU3Vic2NyaXB0aW9uIGluZnJhc3RydWN0dXJlIGlzIGRpc2FibGVkCmFzc2VydApmcmFtZV9kaWcgLTYKY2FsbHN1YiBpbm5lcnZlcmlmeWV4cGlyYXRpb250eXBlXzExCmJ5dGVjIDcgLy8gInN1Yl90eXBlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTYKY2FsbHN1YiBpbm5lcmNvbXB1dGVleHBpcmF0aW9uXzcKZnJhbWVfYnVyeSAxCmJ5dGVjIDcgLy8gInN1Yl90eXBlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9idXJ5IDIKaW50Y18wIC8vIDAKZnJhbWVfYnVyeSAzCmludGNfMCAvLyAwCmZyYW1lX2J1cnkgNApmcmFtZV9kaWcgLTYKY2FsbHN1YiBpbm5lcmNvbXB1dGVwcmljZV8xMApmcmFtZV9idXJ5IDUKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyA0IC8vICJzbWFfaWQiCmFwcF9nbG9iYWxfZ2V0Cj09Ci8vIFNNQSBJRCBtdXN0IG1hdGNoCmFzc2VydApmcmFtZV9kaWcgLTUKZ3R4bnMgU2VuZGVyCmZyYW1lX2RpZyAtNApndHhucyBTZW5kZXIKPT0KLy8gU3Vic2NyaWJlciBhY2NvdW50IG11c3QgbWF0Y2ggZmVlIGFuZCBwYXkgdHhuIHNlbmRlcgphc3NlcnQKYnl0ZWMgNCAvLyAic21hX2lkIgphcHBfZ2xvYmFsX2dldApwdXNoYnl0ZXMgMHg2MTY0NmQ2OTZlIC8vICJhZG1pbiIKYXBwX2dsb2JhbF9nZXRfZXgKc3RvcmUgMzEKc3RvcmUgMzAKZnJhbWVfZGlnIC00Cmd0eG5zIEFtb3VudApieXRlYyA0IC8vICJzbWFfaWQiCmFwcF9nbG9iYWxfZ2V0CnB1c2hpbnQgMTAgLy8gMTAKY2FsbHN1YiBpbm5lcnVzZGlubWljcm9hbGdvXzIKPT0KLy8gUGxhdGZvcm0gZmVlIHBhcmFtcyBtaXNtYXRjaAphc3NlcnQKZnJhbWVfZGlnIC00Cmd0eG5zIFJlY2VpdmVyCmxvYWQgMzAKPT0KLy8gUGxhdGZvcm0gZmVlIHBhcmFtcyBtaXNtYXRjaAphc3NlcnQKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldF9leApzdG9yZSAzMgpieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldAo9PQovLyBMb2NrZXIgZG9lcyBub3QgYmVsb25nIHRvIG1hbmFnZXIgb2YgdGhpcyBTTUkKYXNzZXJ0CmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwpzdG9yZSAzNApzdG9yZSAzMwpmcmFtZV9kaWcgLTMKZ3R4bnMgVHlwZUVudW0KaW50Y18xIC8vIHBheQo9PQpmcmFtZV9kaWcgLTMKZ3R4bnMgQW1vdW50CmZyYW1lX2RpZyA1Cj09CiYmCmZyYW1lX2RpZyAtMwpndHhucyBSZWNlaXZlcgpsb2FkIDMzCj09CiYmCmZyYW1lX2RpZyAtMwpndHhucyBUeXBlRW51bQpwdXNoaW50IDQgLy8gYXhmZXIKPT0KZnJhbWVfZGlnIC0zCmd0eG5zIEFzc2V0QW1vdW50CmZyYW1lX2RpZyA1Cj09CiYmCmZyYW1lX2RpZyAtMwpndHhucyBBc3NldFJlY2VpdmVyCmxvYWQgMzMKPT0KJiYKfHwKLy8gU3Vic2NyaXB0aW9uIHBheW1lbnQgbXVzdCBiZSBzZW5kIHRvIGxvY2tlciB3aXRoIHJpZ2h0IHBheQphc3NlcnQKYnl0ZWMgOCAvLyAibWF4X3N1YnMiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj4KYm56IGNyZWF0ZXN1YnNjcmlwdGlvbl8yNV9sNgpjcmVhdGVzdWJzY3JpcHRpb25fMjVfbDE6CmZyYW1lX2RpZyAtNwpib3hfbGVuCnN0b3JlIDM2CnN0b3JlIDM1CmxvYWQgMzYKYm56IGNyZWF0ZXN1YnNjcmlwdGlvbl8yNV9sMwpmcmFtZV9kaWcgLTUKZ3R4bnMgQW1vdW50CmludGMgNyAvLyAzMTMwMAppbnRjIDQgLy8gMTAwMDAwCisKPT0KLy8gRmVlIHR4biBtdXN0IGJlIG9mIHRoZSByaWdodCBhbW91bnQKYXNzZXJ0CmJ5dGVjXzIgLy8gInRvdGFsX3N1YnMiCmJ5dGVjXzIgLy8gInRvdGFsX3N1YnMiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCisKYXBwX2dsb2JhbF9wdXQKcHVzaGJ5dGVzIDB4MjMgLy8gIiMiCmJ5dGVjXzIgLy8gInRvdGFsX3N1YnMiCmFwcF9nbG9iYWxfZ2V0CmNhbGxzdWIgaXRvYV8xCmNvbmNhdApwdXNoYnl0ZXMgMHgyMDJkMjAgLy8gIiAtICIKY29uY2F0CmJ5dGVjIDEwIC8vICJuYW1lIgphcHBfZ2xvYmFsX2dldApjb25jYXQKYnl0ZWMgMTEgLy8gInVuaXRfbmFtZSIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgOSAvLyAiaW1hZ2VfdXJsIgphcHBfZ2xvYmFsX2dldApjYWxsc3ViIGlubmVyY3JlYXRlbmZ0XzMKZnJhbWVfYnVyeSAzCmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKZnJhbWVfYnVyeSA0CmIgY3JlYXRlc3Vic2NyaXB0aW9uXzI1X2w3CmNyZWF0ZXN1YnNjcmlwdGlvbl8yNV9sMzoKZnJhbWVfZGlnIC01Cmd0eG5zIEFtb3VudAppbnRjXzAgLy8gMAo9PQovLyBGZWUgdHhuIG11c3QgYmUgb2YgdGhlIHJpZ2h0IGFtb3VudAphc3NlcnQKZnJhbWVfZGlnIC03CmJveF9nZXQKc3RvcmUgMzgKc3RvcmUgMzcKbG9hZCAzOAphc3NlcnQKbG9hZCAzNwpmcmFtZV9idXJ5IDYKZnJhbWVfZGlnIDYKcHVzaGludCAyNCAvLyAyNApleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDcKZnJhbWVfZGlnIDcKaW50Y18wIC8vIDAKIT0KYm56IGNyZWF0ZXN1YnNjcmlwdGlvbl8yNV9sNQppbnRjXzAgLy8gMApyZXR1cm4KY3JlYXRlc3Vic2NyaXB0aW9uXzI1X2w1OgpmcmFtZV9kaWcgNwpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCjwKLy8gU3Vic2NyaXB0aW9uIHN0aWxsIGFjdGl2ZQphc3NlcnQKZnJhbWVfZGlnIDYKcHVzaGludCA4IC8vIDgKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAzCmZyYW1lX2RpZyA2CnB1c2hpbnQgMTYgLy8gMTYKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSA0CmIgY3JlYXRlc3Vic2NyaXB0aW9uXzI1X2w3CmNyZWF0ZXN1YnNjcmlwdGlvbl8yNV9sNjoKYnl0ZWNfMiAvLyAidG90YWxfc3VicyIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDEKKwpieXRlYyA4IC8vICJtYXhfc3VicyIKYXBwX2dsb2JhbF9nZXQKPD0KLy8gTWF4IGl0ZW1zIHJlYWNoZWQKYXNzZXJ0CmIgY3JlYXRlc3Vic2NyaXB0aW9uXzI1X2wxCmNyZWF0ZXN1YnNjcmlwdGlvbl8yNV9sNzoKZnJhbWVfZGlnIDIKaXRvYgpmcmFtZV9kaWcgMwppdG9iCmNvbmNhdApmcmFtZV9kaWcgNAppdG9iCmNvbmNhdApmcmFtZV9kaWcgMQppdG9iCmNvbmNhdApmcmFtZV9kaWcgLTYKaXRvYgpjb25jYXQKZnJhbWVfYnVyeSA4CmZyYW1lX2RpZyAtNwpib3hfZGVsCnBvcApmcmFtZV9kaWcgLTcKZnJhbWVfZGlnIDgKYm94X3B1dApmcmFtZV9kaWcgMwpmcmFtZV9idXJ5IDAKcmV0c3ViCgovLyBnZXRfc3Vic2NyaXB0aW9uCmdldHN1YnNjcmlwdGlvbl8yNjoKcHJvdG8gMSAxCmJ5dGVjXzAgLy8gIiIKZnJhbWVfZGlnIC0xCmJveF9nZXQKc3RvcmUgNDAKc3RvcmUgMzkKbG9hZCA0MAphc3NlcnQKbG9hZCAzOQpmcmFtZV9idXJ5IDAKcmV0c3ViCgovLyBpc19zdWJzY3JpYmVyCmlzc3Vic2NyaWJlcl8yNzoKcHJvdG8gMSAxCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIiIKaW50Y18wIC8vIDAKZHVwCmZyYW1lX2RpZyAtMQpib3hfbGVuCnN0b3JlIDQyCnN0b3JlIDQxCmxvYWQgNDIKYm56IGlzc3Vic2NyaWJlcl8yN19sMgppbnRjXzAgLy8gMApmcmFtZV9idXJ5IDAKYiBpc3N1YnNjcmliZXJfMjdfbDYKaXNzdWJzY3JpYmVyXzI3X2wyOgpmcmFtZV9kaWcgLTEKYm94X2dldApzdG9yZSA0NApzdG9yZSA0Mwpsb2FkIDQ0CmFzc2VydApsb2FkIDQzCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpwdXNoaW50IDI0IC8vIDI0CmV4dHJhY3RfdWludDY0CmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgMQppbnRjXzAgLy8gMApleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDMKZnJhbWVfZGlnIDMKaW50Y18wIC8vIDAKPT0KYm56IGlzc3Vic2NyaWJlcl8yN19sNQpmcmFtZV9kaWcgMwppbnRjXzEgLy8gMQo9PQpieiBpc3N1YnNjcmliZXJfMjdfbDYKZnJhbWVfZGlnIDIKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAo+CmZyYW1lX2J1cnkgMApiIGlzc3Vic2NyaWJlcl8yN19sNgppc3N1YnNjcmliZXJfMjdfbDU6CmludGNfMSAvLyAxCmZyYW1lX2J1cnkgMAppc3N1YnNjcmliZXJfMjdfbDY6CnJldHN1YgoKLy8gY2xhaW1fc3Vic2NyaXB0aW9uCmNsYWltc3Vic2NyaXB0aW9uXzI4Ogpwcm90byAxIDAKaW50Y18wIC8vIDAKZnJhbWVfZGlnIC0xCnR4bmFzIEFzc2V0cwpmcmFtZV9idXJ5IDAKdHhuIFNlbmRlcgpmcmFtZV9kaWcgMAphc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKc3RvcmUgNDYKc3RvcmUgNDUKbG9hZCA0NgovLyBTdWJzY3JpYmVyIG5vdCBvcHRlZC1pbiBmb3IgU3Vic2NyaXB0aW9uIE5GVAphc3NlcnQKZnJhbWVfZGlnIDAKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKdHhuIFNlbmRlcgpjYWxsc3ViIGlubmVydHJhbnNmZXJuZnRfNApyZXRzdWIKCi8vIHRyYW5zZmVyX3N1YnNjcmlwdGlvbgp0cmFuc2ZlcnN1YnNjcmlwdGlvbl8yOToKcHJvdG8gMiAwCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIiIKdHhuIFNlbmRlcgpib3hfbGVuCnN0b3JlIDQ4CnN0b3JlIDQ3CmxvYWQgNDgKLy8gQ3VycmVudCBhZGRyZXNzIG5vdCBzdWJzY3JpYmVkCmFzc2VydApmcmFtZV9kaWcgLTEKdHhuYXMgQXNzZXRzCmZyYW1lX2J1cnkgMAp0eG4gU2VuZGVyCmZyYW1lX2RpZyAwCmFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQpzdG9yZSA1MApzdG9yZSA0OQpsb2FkIDUwCmxvYWQgNDkKaW50Y18wIC8vIDAKPgomJgpieiB0cmFuc2ZlcnN1YnNjcmlwdGlvbl8yOV9sMgpmcmFtZV9kaWcgMAp0eG4gU2VuZGVyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmNhbGxzdWIgaW5uZXJ0cmFuc2Zlcm5mdF80CnRyYW5zZmVyc3Vic2NyaXB0aW9uXzI5X2wyOgp0eG4gU2VuZGVyCmJveF9nZXQKc3RvcmUgNTIKc3RvcmUgNTEKbG9hZCA1Mgphc3NlcnQKbG9hZCA1MQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIC0yCmJveF9kZWwKcG9wCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgMQpib3hfcHV0CnR4biBTZW5kZXIKYm94X2RlbApwb3AKcmV0c3ViCgovLyBkZWxldGVfc3Vic2NyaXB0aW9uCmRlbGV0ZXN1YnNjcmlwdGlvbl8zMDoKcHJvdG8gMSAxCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIiIKaW50Y18wIC8vIDAKdHhuIFNlbmRlcgpib3hfbGVuCnN0b3JlIDU0CnN0b3JlIDUzCmxvYWQgNTQKLy8gTm90IHN1YnNjcmliZWQKYXNzZXJ0CnR4biBTZW5kZXIKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmxlbgpwdXNoaW50IDMyIC8vIDMyCj09CmFzc2VydApmcmFtZV9kaWcgLTEKdHhuYXMgQXNzZXRzCmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgMQpmcmFtZV9kaWcgMgpjYWxsc3ViIGlubmVyZGVsZXRlc3Vic2NyaXB0aW9uXzYKaXR4bl9iZWdpbgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwppdHhuX2ZpZWxkIFNlbmRlcgppbnRjXzEgLy8gcGF5Cml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIDEKaXR4bl9maWVsZCBSZWNlaXZlcgppbnRjIDcgLy8gMzEzMDAKaW50YyA0IC8vIDEwMDAwMAorCml0eG5fZmllbGQgQW1vdW50CmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CmZyYW1lX2RpZyAtMQp0eG5hcyBBc3NldHMKZnJhbWVfYnVyeSAwCnJldHN1YgoKLy8gZW5hYmxlCmVuYWJsZV8zMToKcHJvdG8gMCAwCnR4biBTZW5kZXIKYnl0ZWNfMSAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydApieXRlYyA1IC8vICJsaWZlY3ljbGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09Ci8vIFN1YnNjcmlwdGlvbiBpbmZyYXN0cnVjdHVyZSBpcyBhbHJlYWR5IGVuYWJsZWQKYXNzZXJ0CmJ5dGVjIDUgLy8gImxpZmVjeWNsZSIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKcmV0c3ViCgovLyBkaXNhYmxlCmRpc2FibGVfMzI6CnByb3RvIDAgMAp0eG4gU2VuZGVyCmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0Cj09Ci8vIHVuYXV0aG9yaXplZAphc3NlcnQKYnl0ZWMgNSAvLyAibGlmZWN5Y2xlIgphcHBfZ2xvYmFsX2dldAppbnRjXzAgLy8gMAo9PQovLyBTdWJzY3JpcHRpb24gaW5mcmFzdHJ1Y3R1cmUgaXMgYWxyZWFkeSBkaXNhYmxlZAphc3NlcnQKYnl0ZWMgNSAvLyAibGlmZWN5Y2xlIgppbnRjXzEgLy8gMQphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIGRlbGV0ZQpkZWxldGVfMzM6CnByb3RvIDAgMAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmJ5dGVjIDUgLy8gImxpZmVjeWNsZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDEKPT0KLy8gQXBwIHN0aWxsIGhhcyBhY3RpdmUgc3Vic2NyaWJlcnMgb3IgYWN0aXZlIGxpZmVjeWNsZSBzdGF0ZQphc3NlcnQKYnl0ZWNfMiAvLyAidG90YWxfc3VicyIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPT0KLy8gQXBwIHN0aWxsIGhhcyBhY3RpdmUgc3Vic2NyaWJlcnMgb3IgYWN0aXZlIGxpZmVjeWNsZSBzdGF0ZQphc3NlcnQKcmV0c3ViCgovLyBjcmVhdGVfY2FzdGVyCmNyZWF0ZWNhc3Rlcl8zNDoKcHJvdG8gMCAwCmJ5dGVjXzAgLy8gIiIKZHVwCmludGNfMCAvLyAwCmR1cG4gNApieXRlY18wIC8vICIiCmR1cAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmJ0b2kKZnJhbWVfYnVyeSAyCnR4bmEgQXBwbGljYXRpb25BcmdzIDQKYnRvaQpmcmFtZV9idXJ5IDMKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQpidG9pCmZyYW1lX2J1cnkgNAp0eG5hIEFwcGxpY2F0aW9uQXJncyA2CmJ0b2kKZnJhbWVfYnVyeSA1CnR4bmEgQXBwbGljYXRpb25BcmdzIDcKYnRvaQpmcmFtZV9idXJ5IDYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOApmcmFtZV9idXJ5IDcKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOQpmcmFtZV9idXJ5IDgKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIDEKZnJhbWVfZGlnIDIKZnJhbWVfZGlnIDMKZnJhbWVfZGlnIDQKZnJhbWVfZGlnIDUKZnJhbWVfZGlnIDYKZnJhbWVfZGlnIDcKZnJhbWVfZGlnIDgKY2FsbHN1YiBjcmVhdGVfMTIKcmV0c3ViCgovLyBnZXRfdmVyc2lvbl9jYXN0ZXIKZ2V0dmVyc2lvbmNhc3Rlcl8zNToKcHJvdG8gMCAwCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBnZXR2ZXJzaW9uXzE2CmZyYW1lX2J1cnkgMApieXRlY18zIC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKY29uY2F0CmxvZwpyZXRzdWIKCi8vIHVwZGF0ZV9tYW5hZ2VyX2Nhc3Rlcgp1cGRhdGVtYW5hZ2VyY2FzdGVyXzM2Ogpwcm90byAwIDAKYnl0ZWNfMCAvLyAiIgp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMApjYWxsc3ViIHVwZGF0ZW1hbmFnZXJfMTcKcmV0c3ViCgovLyB1cGRhdGVfc21hX2lkX2Nhc3Rlcgp1cGRhdGVzbWFpZGNhc3Rlcl8zNzoKcHJvdG8gMCAwCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKY2FsbHN1YiB1cGRhdGVzbWFpZF8xOApyZXRzdWIKCi8vIGdldF9kaXNjb3VudF9jYXN0ZXIKZ2V0ZGlzY291bnRjYXN0ZXJfMzg6CnByb3RvIDAgMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKY2FsbHN1YiBnZXRkaXNjb3VudF8xOQpmcmFtZV9idXJ5IDAKYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCmNvbmNhdApsb2cKcmV0c3ViCgovLyBpc19kaXNjb3VudF9leHBpcmVkX2Nhc3Rlcgppc2Rpc2NvdW50ZXhwaXJlZGNhc3Rlcl8zOToKcHJvdG8gMCAwCmludGNfMCAvLyAwCmR1cAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmJ0b2kKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmNhbGxzdWIgaXNkaXNjb3VudGV4cGlyZWRfMjAKZnJhbWVfYnVyeSAwCmJ5dGVjXzMgLy8gMHgxNTFmN2M3NQpmcmFtZV9kaWcgMAppdG9iCmNvbmNhdApsb2cKcmV0c3ViCgovLyBjcmVhdGVfZGlzY291bnRfY2FzdGVyCmNyZWF0ZWRpc2NvdW50Y2FzdGVyXzQwOgpwcm90byAwIDAKaW50Y18wIC8vIDAKZHVwbiA0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmJ0b2kKZnJhbWVfYnVyeSAyCnR4bmEgQXBwbGljYXRpb25BcmdzIDQKYnRvaQpmcmFtZV9idXJ5IDMKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpmcmFtZV9idXJ5IDQKZnJhbWVfZGlnIDQKZ3R4bnMgVHlwZUVudW0KaW50Y18xIC8vIHBheQo9PQphc3NlcnQKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIDEKZnJhbWVfZGlnIDIKZnJhbWVfZGlnIDMKZnJhbWVfZGlnIDQKY2FsbHN1YiBjcmVhdGVkaXNjb3VudF8yMQpyZXRzdWIKCi8vIGRlbGV0ZV9kaXNjb3VudF9jYXN0ZXIKZGVsZXRlZGlzY291bnRjYXN0ZXJfNDE6CnByb3RvIDAgMAppbnRjXzAgLy8gMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmJ0b2kKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmNhbGxzdWIgZGVsZXRlZGlzY291bnRfMjIKcmV0c3ViCgovLyBjb21wdXRlX3ByaWNlX2Nhc3Rlcgpjb21wdXRlcHJpY2VjYXN0ZXJfNDI6CnByb3RvIDAgMAppbnRjXzAgLy8gMApkdXBuIDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpidG9pCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmludGNfMCAvLyAwCnB1c2hpbnQgOCAvLyA4CioKZ2V0Yml0CmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgMQpmcmFtZV9kaWcgMgpjYWxsc3ViIGNvbXB1dGVwcmljZV8yMwpmcmFtZV9idXJ5IDAKYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCml0b2IKY29uY2F0CmxvZwpyZXRzdWIKCi8vIGNvbXB1dGVfcGxhdGZvcm1fZmVlX2Nhc3Rlcgpjb21wdXRlcGxhdGZvcm1mZWVjYXN0ZXJfNDM6CnByb3RvIDAgMAppbnRjXzAgLy8gMApkdXBuIDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpidG9pCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmludGNfMCAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmNhbGxzdWIgY29tcHV0ZXBsYXRmb3JtZmVlXzI0CmZyYW1lX2J1cnkgMApieXRlY18zIC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKaXRvYgpjb25jYXQKbG9nCnJldHN1YgoKLy8gY3JlYXRlX3N1YnNjcmlwdGlvbl9jYXN0ZXIKY3JlYXRlc3Vic2NyaXB0aW9uY2FzdGVyXzQ0Ogpwcm90byAwIDAKaW50Y18wIC8vIDAKYnl0ZWNfMCAvLyAiIgppbnRjXzAgLy8gMApkdXBuIDUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpmcmFtZV9idXJ5IDEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmZyYW1lX2J1cnkgMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmludGNfMCAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSA2CnR4bmEgQXBwbGljYXRpb25BcmdzIDQKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDcKdHhuIEdyb3VwSW5kZXgKaW50Y18yIC8vIDMKLQpmcmFtZV9idXJ5IDMKZnJhbWVfZGlnIDMKZ3R4bnMgVHlwZUVudW0KaW50Y18xIC8vIHBheQo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18zIC8vIDIKLQpmcmFtZV9idXJ5IDQKZnJhbWVfZGlnIDQKZ3R4bnMgVHlwZUVudW0KaW50Y18xIC8vIHBheQo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpmcmFtZV9idXJ5IDUKZnJhbWVfZGlnIDEKZnJhbWVfZGlnIDIKZnJhbWVfZGlnIDMKZnJhbWVfZGlnIDQKZnJhbWVfZGlnIDUKZnJhbWVfZGlnIDYKZnJhbWVfZGlnIDcKY2FsbHN1YiBjcmVhdGVzdWJzY3JpcHRpb25fMjUKZnJhbWVfYnVyeSAwCmJ5dGVjXzMgLy8gMHgxNTFmN2M3NQpmcmFtZV9kaWcgMAppdG9iCmNvbmNhdApsb2cKcmV0c3ViCgovLyBnZXRfc3Vic2NyaXB0aW9uX2Nhc3RlcgpnZXRzdWJzY3JpcHRpb25jYXN0ZXJfNDU6CnByb3RvIDAgMApieXRlY18wIC8vICIiCmR1cAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpjYWxsc3ViIGdldHN1YnNjcmlwdGlvbl8yNgpmcmFtZV9idXJ5IDAKYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCmNvbmNhdApsb2cKcmV0c3ViCgovLyBpc19zdWJzY3JpYmVyX2Nhc3Rlcgppc3N1YnNjcmliZXJjYXN0ZXJfNDY6CnByb3RvIDAgMAppbnRjXzAgLy8gMApieXRlY18wIC8vICIiCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmNhbGxzdWIgaXNzdWJzY3JpYmVyXzI3CmZyYW1lX2J1cnkgMApieXRlY18zIC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKaXRvYgpjb25jYXQKbG9nCnJldHN1YgoKLy8gY2xhaW1fc3Vic2NyaXB0aW9uX2Nhc3RlcgpjbGFpbXN1YnNjcmlwdGlvbmNhc3Rlcl80NzoKcHJvdG8gMCAwCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKY2FsbHN1YiBjbGFpbXN1YnNjcmlwdGlvbl8yOApyZXRzdWIKCi8vIHRyYW5zZmVyX3N1YnNjcmlwdGlvbl9jYXN0ZXIKdHJhbnNmZXJzdWJzY3JpcHRpb25jYXN0ZXJfNDg6CnByb3RvIDAgMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIDEKY2FsbHN1YiB0cmFuc2ZlcnN1YnNjcmlwdGlvbl8yOQpyZXRzdWIKCi8vIGRlbGV0ZV9zdWJzY3JpcHRpb25fY2FzdGVyCmRlbGV0ZXN1YnNjcmlwdGlvbmNhc3Rlcl80OToKcHJvdG8gMCAwCmludGNfMCAvLyAwCmR1cAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmludGNfMCAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmNhbGxzdWIgZGVsZXRlc3Vic2NyaXB0aW9uXzMwCmZyYW1lX2J1cnkgMApieXRlY18zIC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKaXRvYgpjb25jYXQKbG9nCnJldHN1YgoKLy8gZW5hYmxlX2Nhc3RlcgplbmFibGVjYXN0ZXJfNTA6CnByb3RvIDAgMApjYWxsc3ViIGVuYWJsZV8zMQpyZXRzdWIKCi8vIGRpc2FibGVfY2FzdGVyCmRpc2FibGVjYXN0ZXJfNTE6CnByb3RvIDAgMApjYWxsc3ViIGRpc2FibGVfMzIKcmV0c3ViCgovLyBkZWxldGVfY2FzdGVyCmRlbGV0ZWNhc3Rlcl81MjoKcHJvdG8gMCAwCmNhbGxzdWIgZGVsZXRlXzMzCnJldHN1Yg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu" + }, + "state": { + "global": { + "num_byte_slices": 4, + "num_uints": 8 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": { + "coin_id": { + "type": "uint64", + "key": "coin_id", + "descr": "ASA ID of the subscription, default is ALGO" + }, + "created_at": { + "type": "uint64", + "key": "created_at", + "descr": "Timestamp of the subscription service creation" + }, + "image_url": { + "type": "bytes", + "key": "image_url", + "descr": "Image URL of the subscription NFT" + }, + "lifecycle": { + "type": "uint64", + "key": "lifecycle", + "descr": "Lifecycle state of the subscription service" + }, + "manager": { + "type": "bytes", + "key": "manager", + "descr": "Address of the manager of the subscription" + }, + "max_subs": { + "type": "uint64", + "key": "max_subs", + "descr": "Max subscriptions to be sold" + }, + "name": { + "type": "bytes", + "key": "name", + "descr": "Name of the service providing subscription" + }, + "price": { + "type": "uint64", + "key": "price", + "descr": "Price of the subscription" + }, + "sma_id": { + "type": "uint64", + "key": "sma_id", + "descr": "ID of Subtopia Admin Oracle contract" + }, + "sub_type": { + "type": "uint64", + "key": "sub_type", + "descr": "Type of the subscription" + }, + "total_subs": { + "type": "uint64", + "key": "total_subs", + "descr": "Total subscriptions sold" + }, + "unit_name": { + "type": "bytes", + "key": "unit_name", + "descr": "Unit name of the subscription NFT" + } + }, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "SMI", + "methods": [ + { + "name": "create", + "args": [ + { + "type": "string", + "name": "name", + "desc": "The name of the subscription service." + }, + { + "type": "address", + "name": "manager", + "desc": "The address of the manager of the subscription service." + }, + { + "type": "uint64", + "name": "sub_type", + "desc": "The type of the subscription service." + }, + { + "type": "uint64", + "name": "price", + "desc": "The price of the subscription service." + }, + { + "type": "uint64", + "name": "max_subs", + "desc": "The maximum number of subscriptions to be sold." + }, + { + "type": "uint64", + "name": "coin_id", + "desc": "The ASA ID of the subscription service." + }, + { + "type": "uint64", + "name": "sma_id", + "desc": "The ID of the Subtopia Price Oracle contract." + }, + { + "type": "string", + "name": "unit_name" + }, + { + "type": "string", + "name": "image_url" + } + ], + "returns": { + "type": "void" + }, + "desc": "Creates a new instance of the subscription service with the provided parameters." + }, + { + "name": "get_version", + "args": [], + "returns": { + "type": "string" + } + }, + { + "name": "update_manager", + "args": [ + { + "type": "address", + "name": "new_manager_account", + "desc": "The new manager account address." + } + ], + "returns": { + "type": "void" + }, + "desc": "Updates the manager account of the subscription service." + }, + { + "name": "update_sma_id", + "args": [ + { + "type": "uint64", + "name": "new_sma_id", + "desc": "The new ID of the Subtopia Price Oracle contract." + } + ], + "returns": { + "type": "void" + }, + "desc": "Updates the ID of the Subtopia Price Oracle contract." + }, + { + "name": "get_discount", + "args": [ + { + "type": "uint64", + "name": "expiration_type", + "desc": "The expiration type of the discount." + } + ], + "returns": { + "type": "(uint64,uint64,uint64,uint64,uint64,uint64)", + "desc": "An expression that returns the discount." + }, + "desc": "Returns the discount for the specified expiration type." + }, + { + "name": "is_discount_expired", + "args": [ + { + "type": "uint64", + "name": "expiration_type", + "desc": "The expiration type of the discount." + } + ], + "returns": { + "type": "uint64", + "desc": "An expression that checks if the discount is expired." + }, + "desc": "Checks if the discount for the specified expiration type is expired." + }, + { + "name": "create_discount", + "args": [ + { + "type": "uint64", + "name": "expiration_type" + }, + { + "type": "uint64", + "name": "discount_type" + }, + { + "type": "uint64", + "name": "discount_value" + }, + { + "type": "uint64", + "name": "expires_in" + }, + { + "type": "pay", + "name": "fee_txn" + } + ], + "returns": { + "type": "void" + }, + "desc": "Creates a new discount for the subscription service." + }, + { + "name": "delete_discount", + "args": [ + { + "type": "uint64", + "name": "expiration_type" + } + ], + "returns": { + "type": "void" + }, + "desc": "Deletes a discount for the subscription service." + }, + { + "name": "compute_price", + "args": [ + { + "type": "uint64", + "name": "expiration_type", + "desc": "The expiration type of the subscription." + }, + { + "type": "bool", + "name": "with_discount" + } + ], + "returns": { + "type": "uint64", + "desc": "An expression that computes the price of the subscription." + }, + "desc": "Computes the price of the subscription for the given expiration type." + }, + { + "name": "compute_platform_fee", + "args": [ + { + "type": "uint64", + "name": "whole_usd" + }, + { + "type": "application", + "name": "sma_id" + } + ], + "returns": { + "type": "uint64" + } + }, + { + "name": "create_subscription", + "args": [ + { + "type": "address", + "name": "subscriber", + "desc": "The subscriber address." + }, + { + "type": "uint64", + "name": "expiration_type", + "desc": "The expiration type of the subscription." + }, + { + "type": "pay", + "name": "fee_txn", + "desc": "The fee transaction." + }, + { + "type": "pay", + "name": "platform_fee_txn" + }, + { + "type": "txn", + "name": "pay_txn", + "desc": "The payment transaction." + }, + { + "type": "application", + "name": "locker", + "desc": "The locker application." + }, + { + "type": "application", + "name": "sma_id" + } + ], + "returns": { + "type": "uint64", + "desc": "An expression that subscribes the user and creates a new subscription." + }, + "desc": "Subscribes a user to the subscription service and creates a new\nsubscription." + }, + { + "name": "get_subscription", + "args": [ + { + "type": "address", + "name": "subscriber", + "desc": "The subscriber address." + } + ], + "returns": { + "type": "(uint64,uint64,uint64,uint64,uint64)", + "desc": "An expression that retrieves the subscription details." + }, + "desc": "Retrieves the subscription details of a given subscriber." + }, + { + "name": "is_subscriber", + "args": [ + { + "type": "address", + "name": "subscriber", + "desc": "The subscriber address." + } + ], + "returns": { + "type": "uint64", + "desc": "An expression that checks if the address is a subscriber." + }, + "desc": "Checks if a given address is a subscriber of the subscription service." + }, + { + "name": "claim_subscription", + "args": [ + { + "type": "asset", + "name": "subscription" + } + ], + "returns": { + "type": "void" + }, + "desc": "Allows a subscriber to claim their subscription." + }, + { + "name": "transfer_subscription", + "args": [ + { + "type": "address", + "name": "new_address", + "desc": "The new address to transfer the subscription to." + }, + { + "type": "asset", + "name": "subscription" + } + ], + "returns": { + "type": "void" + }, + "desc": "Transfers a subscription from the sender's address to a new address." + }, + { + "name": "delete_subscription", + "args": [ + { + "type": "asset", + "name": "sub_id", + "desc": "The subscription ASA ID." + } + ], + "returns": { + "type": "uint64", + "desc": "An expression that unsubscribes the user and deletes the subscription." + }, + "desc": "Unsubscribes a user from the subscription service and deletes the\nsubscription." + }, + { + "name": "enable", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "disable", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "delete", + "args": [], + "returns": { + "type": "void" + }, + "desc": "Deletes the subscription service. Can only be called by the manager account\nwhen there are no active subscriptions or the lifecycle state is not active." + } + ], + "networks": {} + }, + "bare_call_config": { + "close_out": "CALL", + "opt_in": "CALL", + "update_application": "CALL" + } +} + +/** + * Defines an onCompletionAction of 'no_op' + */ +export type OnCompleteNoOp = { onCompleteAction?: 'no_op' | OnApplicationComplete.NoOpOC } +/** + * Defines an onCompletionAction of 'opt_in' + */ +export type OnCompleteOptIn = { onCompleteAction: 'opt_in' | OnApplicationComplete.OptInOC } +/** + * Defines an onCompletionAction of 'close_out' + */ +export type OnCompleteCloseOut = { onCompleteAction: 'close_out' | OnApplicationComplete.CloseOutOC } +/** + * Defines an onCompletionAction of 'delete_application' + */ +export type OnCompleteDelApp = { onCompleteAction: 'delete_application' | OnApplicationComplete.DeleteApplicationOC } +/** + * Defines an onCompletionAction of 'update_application' + */ +export type OnCompleteUpdApp = { onCompleteAction: 'update_application' | OnApplicationComplete.UpdateApplicationOC } +/** + * A state record containing a single unsigned integer + */ +export type IntegerState = { + /** + * Gets the state value as a BigInt + */ + asBigInt(): bigint + /** + * Gets the state value as a number. + */ + asNumber(): number +} +/** + * A state record containing binary data + */ +export type BinaryState = { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array + /** + * Gets the state value as a string + */ + asString(): string +} + +/** + * Defines the types of available calls and state of the Smi smart contract. + */ +export type Smi = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void' | 'create', { + argsObj: { + /** + * The name of the subscription service. + */ + name: string + /** + * The address of the manager of the subscription service. + */ + manager: string + /** + * The type of the subscription service. + */ + sub_type: bigint | number + /** + * The price of the subscription service. + */ + price: bigint | number + /** + * The maximum number of subscriptions to be sold. + */ + max_subs: bigint | number + /** + * The ASA ID of the subscription service. + */ + coin_id: bigint | number + /** + * The ID of the Subtopia Price Oracle contract. + */ + sma_id: bigint | number + unit_name: string + image_url: string + } + argsTuple: [name: string, manager: string, sub_type: bigint | number, price: bigint | number, max_subs: bigint | number, coin_id: bigint | number, sma_id: bigint | number, unit_name: string, image_url: string] + returns: void + }> + & Record<'get_version()string' | 'get_version', { + argsObj: { + } + argsTuple: [] + returns: string + }> + & Record<'update_manager(address)void' | 'update_manager', { + argsObj: { + /** + * The new manager account address. + */ + new_manager_account: string + } + argsTuple: [new_manager_account: string] + returns: void + }> + & Record<'update_sma_id(uint64)void' | 'update_sma_id', { + argsObj: { + /** + * The new ID of the Subtopia Price Oracle contract. + */ + new_sma_id: bigint | number + } + argsTuple: [new_sma_id: bigint | number] + returns: void + }> + & Record<'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)' | 'get_discount', { + argsObj: { + /** + * The expiration type of the discount. + */ + expiration_type: bigint | number + } + argsTuple: [expiration_type: bigint | number] + /** + * An expression that returns the discount. + */ + returns: Discount + }> + & Record<'is_discount_expired(uint64)uint64' | 'is_discount_expired', { + argsObj: { + /** + * The expiration type of the discount. + */ + expiration_type: bigint | number + } + argsTuple: [expiration_type: bigint | number] + /** + * An expression that checks if the discount is expired. + */ + returns: bigint + }> + & Record<'create_discount(uint64,uint64,uint64,uint64,pay)void' | 'create_discount', { + argsObj: { + expiration_type: bigint | number + discount_type: bigint | number + discount_value: bigint | number + expires_in: bigint | number + fee_txn: TransactionToSign | Transaction | Promise + } + argsTuple: [expiration_type: bigint | number, discount_type: bigint | number, discount_value: bigint | number, expires_in: bigint | number, fee_txn: TransactionToSign | Transaction | Promise] + returns: void + }> + & Record<'delete_discount(uint64)void' | 'delete_discount', { + argsObj: { + expiration_type: bigint | number + } + argsTuple: [expiration_type: bigint | number] + returns: void + }> + & Record<'compute_price(uint64,bool)uint64' | 'compute_price', { + argsObj: { + /** + * The expiration type of the subscription. + */ + expiration_type: bigint | number + with_discount: boolean + } + argsTuple: [expiration_type: bigint | number, with_discount: boolean] + /** + * An expression that computes the price of the subscription. + */ + returns: bigint + }> + & Record<'compute_platform_fee(uint64,application)uint64' | 'compute_platform_fee', { + argsObj: { + whole_usd: bigint | number + sma_id: number | bigint + } + argsTuple: [whole_usd: bigint | number, sma_id: number | bigint] + returns: bigint + }> + & Record<'create_subscription(address,uint64,pay,pay,txn,application,application)uint64' | 'create_subscription', { + argsObj: { + /** + * The subscriber address. + */ + subscriber: string + /** + * The expiration type of the subscription. + */ + expiration_type: bigint | number + /** + * The fee transaction. + */ + fee_txn: TransactionToSign | Transaction | Promise + platform_fee_txn: TransactionToSign | Transaction | Promise + /** + * The payment transaction. + */ + pay_txn: TransactionToSign | Transaction | Promise + /** + * The locker application. + */ + locker: number | bigint + sma_id: number | bigint + } + argsTuple: [subscriber: string, expiration_type: bigint | number, fee_txn: TransactionToSign | Transaction | Promise, platform_fee_txn: TransactionToSign | Transaction | Promise, pay_txn: TransactionToSign | Transaction | Promise, locker: number | bigint, sma_id: number | bigint] + /** + * An expression that subscribes the user and creates a new subscription. + */ + returns: bigint + }> + & Record<'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)' | 'get_subscription', { + argsObj: { + /** + * The subscriber address. + */ + subscriber: string + } + argsTuple: [subscriber: string] + /** + * An expression that retrieves the subscription details. + */ + returns: Subscription + }> + & Record<'is_subscriber(address)uint64' | 'is_subscriber', { + argsObj: { + /** + * The subscriber address. + */ + subscriber: string + } + argsTuple: [subscriber: string] + /** + * An expression that checks if the address is a subscriber. + */ + returns: bigint + }> + & Record<'claim_subscription(asset)void' | 'claim_subscription', { + argsObj: { + subscription: number | bigint + } + argsTuple: [subscription: number | bigint] + returns: void + }> + & Record<'transfer_subscription(address,asset)void' | 'transfer_subscription', { + argsObj: { + /** + * The new address to transfer the subscription to. + */ + new_address: string + subscription: number | bigint + } + argsTuple: [new_address: string, subscription: number | bigint] + returns: void + }> + & Record<'delete_subscription(asset)uint64' | 'delete_subscription', { + argsObj: { + /** + * The subscription ASA ID. + */ + sub_id: number | bigint + } + argsTuple: [sub_id: number | bigint] + /** + * An expression that unsubscribes the user and deletes the subscription. + */ + returns: bigint + }> + & Record<'enable()void' | 'enable', { + argsObj: { + } + argsTuple: [] + returns: void + }> + & Record<'disable()void' | 'disable', { + argsObj: { + } + argsTuple: [] + returns: void + }> + & Record<'delete()void' | 'delete', { + argsObj: { + } + argsTuple: [] + returns: void + }> + /** + * Defines the shape of the global and local state of the application. + */ + state: { + global: { + /** + * ASA ID of the subscription, default is ALGO + */ + 'coin_id'?: IntegerState + /** + * Timestamp of the subscription service creation + */ + 'created_at'?: IntegerState + /** + * Image URL of the subscription NFT + */ + 'image_url'?: BinaryState + /** + * Lifecycle state of the subscription service + */ + 'lifecycle'?: IntegerState + /** + * Address of the manager of the subscription + */ + 'manager'?: BinaryState + /** + * Max subscriptions to be sold + */ + 'max_subs'?: IntegerState + /** + * Name of the service providing subscription + */ + 'name'?: BinaryState + /** + * Price of the subscription + */ + 'price'?: IntegerState + /** + * ID of Subtopia Admin Oracle contract + */ + 'sma_id'?: IntegerState + /** + * Type of the subscription + */ + 'sub_type'?: IntegerState + /** + * Total subscriptions sold + */ + 'total_subs'?: IntegerState + /** + * Unit name of the subscription NFT + */ + 'unit_name'?: BinaryState + } + } +} +/** + * Defines the possible abi call signatures + */ +export type SmiSig = keyof Smi['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a bare call is made + */ +export type TypedCallParams = { + method: TSignature + methodArgs: TSignature extends undefined ? undefined : Array +} & AppClientCallCoreParams & CoreAppCallArgs +/** + * Defines the arguments required for a bare call + */ +export type BareCallArgs = Omit +/** + * Represents a Discount result as a struct + */ +export type Discount = { + expiration_type: bigint + discount_type: bigint + discount_value: bigint + expires_at: bigint + created_at: bigint + total_claims: bigint +} +/** + * Converts the tuple representation of a Discount to the struct representation + */ +export function Discount([expiration_type, discount_type, discount_value, expires_at, created_at, total_claims]: [bigint, bigint, bigint, bigint, bigint, bigint] ) { + return { + expiration_type, + discount_type, + discount_value, + expires_at, + created_at, + total_claims, + } +} +/** + * Represents a Subscription result as a struct + */ +export type Subscription = { + sub_type: bigint + sub_id: bigint + created_at: bigint + expires_at: bigint + expiration_type: bigint +} +/** + * Converts the tuple representation of a Subscription to the struct representation + */ +export function Subscription([sub_type, sub_id, created_at, expires_at, expiration_type]: [bigint, bigint, bigint, bigint, bigint] ) { + return { + sub_type, + sub_id, + created_at, + expires_at, + expiration_type, + } +} +/** + * Maps a method signature from the Smi smart contract to the method's arguments in either tuple of struct form + */ +export type MethodArgs = Smi['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the Smi smart contract to the method's return type + */ +export type MethodReturn = Smi['methods'][TSignature]['returns'] + +/** + * A factory for available 'create' calls + */ +export type SmiCreateCalls = (typeof SmiCallFactory)['create'] +/** + * Defines supported create methods for this smart contract + */ +export type SmiCreateCallParams = + | (TypedCallParams<'create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void'> & (OnCompleteNoOp)) +/** + * A factory for available 'update' calls + */ +export type SmiUpdateCalls = (typeof SmiCallFactory)['update'] +/** + * Defines supported update methods for this smart contract + */ +export type SmiUpdateCallParams = + | TypedCallParams +/** + * A factory for available 'delete' calls + */ +export type SmiDeleteCalls = (typeof SmiCallFactory)['delete'] +/** + * Defines supported delete methods for this smart contract + */ +export type SmiDeleteCallParams = + | TypedCallParams<'delete()void'> +/** + * Defines arguments required for the deploy method. + */ +export type SmiDeployArgs = { + deployTimeParams?: TealTemplateParams + /** + * A delegate which takes a create call factory and returns the create call params for this smart contract + */ + createCall?: (callFactory: SmiCreateCalls) => SmiCreateCallParams + /** + * A delegate which takes a update call factory and returns the update call params for this smart contract + */ + updateCall?: (callFactory: SmiUpdateCalls) => SmiUpdateCallParams + /** + * A delegate which takes a delete call factory and returns the delete call params for this smart contract + */ + deleteCall?: (callFactory: SmiDeleteCalls) => SmiDeleteCallParams +} + + +/** + * Exposes methods for constructing all available smart contract calls + */ +export abstract class SmiCallFactory { + /** + * Gets available create call factories + */ + static get create() { + return { + /** + * Constructs a create call for the SMI smart contract using the create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + create(args: MethodArgs<'create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void'>, params: AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams & (OnCompleteNoOp) = {}) { + return { + method: 'create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void' as const, + methodArgs: Array.isArray(args) ? args : [args.name, args.manager, args.sub_type, args.price, args.max_subs, args.coin_id, args.sma_id, args.unit_name, args.image_url], + ...params, + } + }, + } + } + + /** + * Gets available update call factories + */ + static get update() { + return { + /** + * Constructs an update call for the SMI smart contract using a bare call + * + * @param params Any parameters for the call + * @returns A TypedCallParams object for the call + */ + bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams = {}) { + return { + method: undefined, + methodArgs: undefined, + ...params, + } + }, + } + } + + /** + * Gets available delete call factories + */ + static get delete() { + return { + /** + * Constructs a delete call for the SMI smart contract using the delete()void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + delete(args: MethodArgs<'delete()void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return { + method: 'delete()void' as const, + methodArgs: Array.isArray(args) ? args : [], + ...params, + } + }, + } + } + + /** + * Gets available optIn call factories + */ + static get optIn() { + return { + /** + * Constructs an opt in call for the SMI smart contract using a bare call + * + * @param params Any parameters for the call + * @returns A TypedCallParams object for the call + */ + bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { + return { + method: undefined, + methodArgs: undefined, + ...params, + } + }, + } + } + + /** + * Gets available closeOut call factories + */ + static get closeOut() { + return { + /** + * Constructs a close out call for the SMI smart contract using a bare call + * + * @param params Any parameters for the call + * @returns A TypedCallParams object for the call + */ + bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { + return { + method: undefined, + methodArgs: undefined, + ...params, + } + }, + } + } + + /** + * Constructs a no op call for the get_version()string ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'get_version()string' as const, + methodArgs: Array.isArray(args) ? args : [], + ...params, + } + } + /** + * Constructs a no op call for the update_manager(address)void ABI method + * + * Updates the manager account of the subscription service. + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static updateManager(args: MethodArgs<'update_manager(address)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'update_manager(address)void' as const, + methodArgs: Array.isArray(args) ? args : [args.new_manager_account], + ...params, + } + } + /** + * Constructs a no op call for the update_sma_id(uint64)void ABI method + * + * Updates the ID of the Subtopia Price Oracle contract. + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static updateSmaId(args: MethodArgs<'update_sma_id(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'update_sma_id(uint64)void' as const, + methodArgs: Array.isArray(args) ? args : [args.new_sma_id], + ...params, + } + } + /** + * Constructs a no op call for the get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64) ABI method + * + * Returns the discount for the specified expiration type. + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static getDiscount(args: MethodArgs<'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)' as const, + methodArgs: Array.isArray(args) ? args : [args.expiration_type], + ...params, + } + } + /** + * Constructs a no op call for the is_discount_expired(uint64)uint64 ABI method + * + * Checks if the discount for the specified expiration type is expired. + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static isDiscountExpired(args: MethodArgs<'is_discount_expired(uint64)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'is_discount_expired(uint64)uint64' as const, + methodArgs: Array.isArray(args) ? args : [args.expiration_type], + ...params, + } + } + /** + * Constructs a no op call for the create_discount(uint64,uint64,uint64,uint64,pay)void ABI method + * + * Creates a new discount for the subscription service. + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static createDiscount(args: MethodArgs<'create_discount(uint64,uint64,uint64,uint64,pay)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'create_discount(uint64,uint64,uint64,uint64,pay)void' as const, + methodArgs: Array.isArray(args) ? args : [args.expiration_type, args.discount_type, args.discount_value, args.expires_in, args.fee_txn], + ...params, + } + } + /** + * Constructs a no op call for the delete_discount(uint64)void ABI method + * + * Deletes a discount for the subscription service. + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static deleteDiscount(args: MethodArgs<'delete_discount(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'delete_discount(uint64)void' as const, + methodArgs: Array.isArray(args) ? args : [args.expiration_type], + ...params, + } + } + /** + * Constructs a no op call for the compute_price(uint64,bool)uint64 ABI method + * + * Computes the price of the subscription for the given expiration type. + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static computePrice(args: MethodArgs<'compute_price(uint64,bool)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'compute_price(uint64,bool)uint64' as const, + methodArgs: Array.isArray(args) ? args : [args.expiration_type, args.with_discount], + ...params, + } + } + /** + * Constructs a no op call for the compute_platform_fee(uint64,application)uint64 ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static computePlatformFee(args: MethodArgs<'compute_platform_fee(uint64,application)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'compute_platform_fee(uint64,application)uint64' as const, + methodArgs: Array.isArray(args) ? args : [args.whole_usd, args.sma_id], + ...params, + } + } + /** + * Constructs a no op call for the create_subscription(address,uint64,pay,pay,txn,application,application)uint64 ABI method + * + * Subscribes a user to the subscription service and creates a new +subscription. + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static createSubscription(args: MethodArgs<'create_subscription(address,uint64,pay,pay,txn,application,application)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'create_subscription(address,uint64,pay,pay,txn,application,application)uint64' as const, + methodArgs: Array.isArray(args) ? args : [args.subscriber, args.expiration_type, args.fee_txn, args.platform_fee_txn, args.pay_txn, args.locker, args.sma_id], + ...params, + } + } + /** + * Constructs a no op call for the get_subscription(address)(uint64,uint64,uint64,uint64,uint64) ABI method + * + * Retrieves the subscription details of a given subscriber. + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static getSubscription(args: MethodArgs<'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)' as const, + methodArgs: Array.isArray(args) ? args : [args.subscriber], + ...params, + } + } + /** + * Constructs a no op call for the is_subscriber(address)uint64 ABI method + * + * Checks if a given address is a subscriber of the subscription service. + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static isSubscriber(args: MethodArgs<'is_subscriber(address)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'is_subscriber(address)uint64' as const, + methodArgs: Array.isArray(args) ? args : [args.subscriber], + ...params, + } + } + /** + * Constructs a no op call for the claim_subscription(asset)void ABI method + * + * Allows a subscriber to claim their subscription. + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static claimSubscription(args: MethodArgs<'claim_subscription(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'claim_subscription(asset)void' as const, + methodArgs: Array.isArray(args) ? args : [args.subscription], + ...params, + } + } + /** + * Constructs a no op call for the transfer_subscription(address,asset)void ABI method + * + * Transfers a subscription from the sender's address to a new address. + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static transferSubscription(args: MethodArgs<'transfer_subscription(address,asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'transfer_subscription(address,asset)void' as const, + methodArgs: Array.isArray(args) ? args : [args.new_address, args.subscription], + ...params, + } + } + /** + * Constructs a no op call for the delete_subscription(asset)uint64 ABI method + * + * Unsubscribes a user from the subscription service and deletes the +subscription. + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static deleteSubscription(args: MethodArgs<'delete_subscription(asset)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'delete_subscription(asset)uint64' as const, + methodArgs: Array.isArray(args) ? args : [args.sub_id], + ...params, + } + } + /** + * Constructs a no op call for the enable()void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static enable(args: MethodArgs<'enable()void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'enable()void' as const, + methodArgs: Array.isArray(args) ? args : [], + ...params, + } + } + /** + * Constructs a no op call for the disable()void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static disable(args: MethodArgs<'disable()void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'disable()void' as const, + methodArgs: Array.isArray(args) ? args : [], + ...params, + } + } +} + +/** + * A client to make calls to the SMI smart contract + */ +export class SmiClient { + /** + * The underlying `ApplicationClient` for when you want to have more flexibility + */ + public readonly appClient: ApplicationClient + + private readonly sender: SendTransactionFrom | undefined + + /** + * Creates a new instance of `SmiClient` + * + * @param appDetails appDetails The details to identify the app to deploy + * @param algod An algod client instance + */ + constructor(appDetails: AppDetails, private algod: Algodv2) { + this.sender = appDetails.sender + this.appClient = algokit.getAppClient({ + ...appDetails, + app: APP_SPEC + }, algod) + } + + /** + * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type + * + * @param result The AppCallTransactionResult to be mapped + * @param returnValueFormatter An optional delegate to format the return value if required + * @returns The smart contract response with an updated return value + */ + protected mapReturnValue(result: AppCallTransactionResult, returnValueFormatter?: (value: any) => TReturn): AppCallTransactionResultOfType { + if(result.return?.decodeError) { + throw result.return.decodeError + } + const returnValue = result.return?.returnValue !== undefined && returnValueFormatter !== undefined + ? returnValueFormatter(result.return.returnValue) + : result.return?.returnValue as TReturn | undefined + return { ...result, return: returnValue } + } + + /** + * Calls the ABI method with the matching signature using an onCompletion code of NO_OP + * + * @param typedCallParams An object containing the method signature, args, and any other relevant parameters + * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type + * @returns The result of the smart contract call + */ + public async call(typedCallParams: TypedCallParams, returnValueFormatter?: (value: any) => MethodReturn) { + return this.mapReturnValue>(await this.appClient.call(typedCallParams), returnValueFormatter) + } + + /** + * Idempotently deploys the SMI smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public deploy(params: SmiDeployArgs & AppClientDeployCoreParams = {}): ReturnType { + const createArgs = params.createCall?.(SmiCallFactory.create) + const updateArgs = params.updateCall?.(SmiCallFactory.update) + const deleteArgs = params.deleteCall?.(SmiCallFactory.delete) + return this.appClient.deploy({ + ...params, + updateArgs, + deleteArgs, + createArgs, + createOnCompleteAction: createArgs?.onCompleteAction, + }) + } + + /** + * Gets available create methods + */ + public get create() { + const $this = this + return { + /** + * Creates a new instance of the SMI smart contract using the create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void ABI method. + * + * @param args The arguments for the smart contract call + * @param params Any additional parameters for the call + * @returns The create result + */ + async create(args: MethodArgs<'create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void'>, params: AppClientCallCoreParams & AppClientCompilationParams & (OnCompleteNoOp) = {}): Promise>> { + return $this.mapReturnValue(await $this.appClient.create(SmiCallFactory.create.create(args, params))) + }, + } + } + + /** + * Gets available update methods + */ + public get update() { + const $this = this + return { + /** + * Updates an existing instance of the SMI smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The update result + */ + bare(args: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs = {}): Promise> { + return $this.appClient.update(args) as unknown as Promise> + }, + } + } + + /** + * Gets available delete methods + */ + public get delete() { + const $this = this + return { + /** + * Deletes an existing instance of the SMI smart contract using the delete()void ABI method. + * + * @param args The arguments for the smart contract call + * @param params Any additional parameters for the call + * @returns The delete result + */ + async delete(args: MethodArgs<'delete()void'>, params: AppClientCallCoreParams = {}): Promise>> { + return $this.mapReturnValue(await $this.appClient.delete(SmiCallFactory.delete.delete(args, params))) + }, + } + } + + /** + * Gets available optIn methods + */ + public get optIn() { + const $this = this + return { + /** + * Opts the user into an existing instance of the SMI smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The optIn result + */ + bare(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}): Promise> { + return $this.appClient.optIn(args) as unknown as Promise> + }, + } + } + + /** + * Gets available closeOut methods + */ + public get closeOut() { + const $this = this + return { + /** + * Makes a close out call to an existing instance of the SMI smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The closeOut result + */ + bare(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}): Promise> { + return $this.appClient.closeOut(args) as unknown as Promise> + }, + } + } + + /** + * Makes a clear_state call to an existing instance of the SMI smart contract. + * + * @param args The arguments for the bare call + * @returns The clear_state result + */ + public clearState(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.appClient.clearState(args) + } + + /** + * Calls the get_version()string ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.getVersion(args, params)) + } + + /** + * Calls the update_manager(address)void ABI method. + * + * Updates the manager account of the subscription service. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public updateManager(args: MethodArgs<'update_manager(address)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.updateManager(args, params)) + } + + /** + * Calls the update_sma_id(uint64)void ABI method. + * + * Updates the ID of the Subtopia Price Oracle contract. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public updateSmaId(args: MethodArgs<'update_sma_id(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.updateSmaId(args, params)) + } + + /** + * Calls the get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64) ABI method. + * + * Returns the discount for the specified expiration type. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call: An expression that returns the discount. + */ + public getDiscount(args: MethodArgs<'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.getDiscount(args, params), Discount) + } + + /** + * Calls the is_discount_expired(uint64)uint64 ABI method. + * + * Checks if the discount for the specified expiration type is expired. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call: An expression that checks if the discount is expired. + */ + public isDiscountExpired(args: MethodArgs<'is_discount_expired(uint64)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.isDiscountExpired(args, params)) + } + + /** + * Calls the create_discount(uint64,uint64,uint64,uint64,pay)void ABI method. + * + * Creates a new discount for the subscription service. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public createDiscount(args: MethodArgs<'create_discount(uint64,uint64,uint64,uint64,pay)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.createDiscount(args, params)) + } + + /** + * Calls the delete_discount(uint64)void ABI method. + * + * Deletes a discount for the subscription service. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public deleteDiscount(args: MethodArgs<'delete_discount(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.deleteDiscount(args, params)) + } + + /** + * Calls the compute_price(uint64,bool)uint64 ABI method. + * + * Computes the price of the subscription for the given expiration type. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call: An expression that computes the price of the subscription. + */ + public computePrice(args: MethodArgs<'compute_price(uint64,bool)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.computePrice(args, params)) + } + + /** + * Calls the compute_platform_fee(uint64,application)uint64 ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public computePlatformFee(args: MethodArgs<'compute_platform_fee(uint64,application)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.computePlatformFee(args, params)) + } + + /** + * Calls the create_subscription(address,uint64,pay,pay,txn,application,application)uint64 ABI method. + * + * Subscribes a user to the subscription service and creates a new +subscription. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call: An expression that subscribes the user and creates a new subscription. + */ + public createSubscription(args: MethodArgs<'create_subscription(address,uint64,pay,pay,txn,application,application)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.createSubscription(args, params)) + } + + /** + * Calls the get_subscription(address)(uint64,uint64,uint64,uint64,uint64) ABI method. + * + * Retrieves the subscription details of a given subscriber. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call: An expression that retrieves the subscription details. + */ + public getSubscription(args: MethodArgs<'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.getSubscription(args, params), Subscription) + } + + /** + * Calls the is_subscriber(address)uint64 ABI method. + * + * Checks if a given address is a subscriber of the subscription service. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call: An expression that checks if the address is a subscriber. + */ + public isSubscriber(args: MethodArgs<'is_subscriber(address)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.isSubscriber(args, params)) + } + + /** + * Calls the claim_subscription(asset)void ABI method. + * + * Allows a subscriber to claim their subscription. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public claimSubscription(args: MethodArgs<'claim_subscription(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.claimSubscription(args, params)) + } + + /** + * Calls the transfer_subscription(address,asset)void ABI method. + * + * Transfers a subscription from the sender's address to a new address. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public transferSubscription(args: MethodArgs<'transfer_subscription(address,asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.transferSubscription(args, params)) + } + + /** + * Calls the delete_subscription(asset)uint64 ABI method. + * + * Unsubscribes a user from the subscription service and deletes the +subscription. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call: An expression that unsubscribes the user and deletes the subscription. + */ + public deleteSubscription(args: MethodArgs<'delete_subscription(asset)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.deleteSubscription(args, params)) + } + + /** + * Calls the enable()void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public enable(args: MethodArgs<'enable()void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.enable(args, params)) + } + + /** + * Calls the disable()void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public disable(args: MethodArgs<'disable()void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmiCallFactory.disable(args, params)) + } + + /** + * Extracts a binary state value out of an AppState dictionary + * + * @param state The state dictionary containing the state value + * @param key The key of the state value + * @returns A BinaryState instance containing the state value, or undefined if the key was not found + */ + private static getBinaryState(state: AppState, key: string): BinaryState | undefined { + const value = state[key] + if (!value) return undefined + if (!('valueRaw' in value)) + throw new Error(`Failed to parse state value for ${key}; received an int when expected a byte array`) + return { + asString(): string { + return value.value + }, + asByteArray(): Uint8Array { + return value.valueRaw + } + } + } + + /** + * Extracts a integer state value out of an AppState dictionary + * + * @param state The state dictionary containing the state value + * @param key The key of the state value + * @returns An IntegerState instance containing the state value, or undefined if the key was not found + */ + private static getIntegerState(state: AppState, key: string): IntegerState | undefined { + const value = state[key] + if (!value) return undefined + if ('valueRaw' in value) + throw new Error(`Failed to parse state value for ${key}; received a byte array when expected a number`) + return { + asBigInt() { + return typeof value.value === 'bigint' ? value.value : BigInt(value.value) + }, + asNumber(): number { + return typeof value.value === 'bigint' ? Number(value.value) : value.value + }, + } + } + + /** + * Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value + */ + public async getGlobalState(): Promise { + const state = await this.appClient.getGlobalState() + return { + get coin_id() { + return SmiClient.getIntegerState(state, 'coin_id') + }, + get created_at() { + return SmiClient.getIntegerState(state, 'created_at') + }, + get image_url() { + return SmiClient.getBinaryState(state, 'image_url') + }, + get lifecycle() { + return SmiClient.getIntegerState(state, 'lifecycle') + }, + get manager() { + return SmiClient.getBinaryState(state, 'manager') + }, + get max_subs() { + return SmiClient.getIntegerState(state, 'max_subs') + }, + get name() { + return SmiClient.getBinaryState(state, 'name') + }, + get price() { + return SmiClient.getIntegerState(state, 'price') + }, + get sma_id() { + return SmiClient.getIntegerState(state, 'sma_id') + }, + get sub_type() { + return SmiClient.getIntegerState(state, 'sub_type') + }, + get total_subs() { + return SmiClient.getIntegerState(state, 'total_subs') + }, + get unit_name() { + return SmiClient.getBinaryState(state, 'unit_name') + }, + } + } + + public compose(): SmiComposer { + const client = this + const atc = new AtomicTransactionComposer() + let promiseChain:Promise = Promise.resolve() + const resultMappers: Array any)> = [] + return { + getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.getVersion(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + updateManager(args: MethodArgs<'update_manager(address)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.updateManager(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + updateSmaId(args: MethodArgs<'update_sma_id(uint64)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.updateSmaId(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + getDiscount(args: MethodArgs<'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.getDiscount(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(Discount) + return this + }, + isDiscountExpired(args: MethodArgs<'is_discount_expired(uint64)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.isDiscountExpired(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + createDiscount(args: MethodArgs<'create_discount(uint64,uint64,uint64,uint64,pay)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.createDiscount(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + deleteDiscount(args: MethodArgs<'delete_discount(uint64)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.deleteDiscount(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + computePrice(args: MethodArgs<'compute_price(uint64,bool)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.computePrice(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + computePlatformFee(args: MethodArgs<'compute_platform_fee(uint64,application)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.computePlatformFee(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + createSubscription(args: MethodArgs<'create_subscription(address,uint64,pay,pay,txn,application,application)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.createSubscription(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + getSubscription(args: MethodArgs<'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.getSubscription(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(Subscription) + return this + }, + isSubscriber(args: MethodArgs<'is_subscriber(address)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.isSubscriber(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + claimSubscription(args: MethodArgs<'claim_subscription(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.claimSubscription(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + transferSubscription(args: MethodArgs<'transfer_subscription(address,asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.transferSubscription(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + deleteSubscription(args: MethodArgs<'delete_subscription(asset)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.deleteSubscription(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + enable(args: MethodArgs<'enable()void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.enable(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + disable(args: MethodArgs<'disable()void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.disable(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + get update() { + const $this = this + return { + bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.update.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return $this + }, + } + }, + get delete() { + const $this = this + return { + delete(args: MethodArgs<'delete()void'>, params?: AppClientCallCoreParams) { + promiseChain = promiseChain.then(() => client.delete.delete(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return $this + }, + } + }, + get optIn() { + const $this = this + return { + bare(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.optIn.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return $this + }, + } + }, + get closeOut() { + const $this = this + return { + bare(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.closeOut.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return $this + }, + } + }, + clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.clearState({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom) { + promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit.getTransactionWithSigner(txn, defaultSender ?? client.sender))) + return this + }, + async atc() { + await promiseChain + return atc + }, + async execute() { + await promiseChain + const result = await algokit.sendAtomicTransactionComposer({ atc, sendParams: {} }, client.algod) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue) + } + } + } as unknown as SmiComposer + } +} +export type SmiComposer = { + /** + * Calls the get_version()string ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'get_version()string'>]> + + /** + * Calls the update_manager(address)void ABI method. + * + * Updates the manager account of the subscription service. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + updateManager(args: MethodArgs<'update_manager(address)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'update_manager(address)void'>]> + + /** + * Calls the update_sma_id(uint64)void ABI method. + * + * Updates the ID of the Subtopia Price Oracle contract. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + updateSmaId(args: MethodArgs<'update_sma_id(uint64)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'update_sma_id(uint64)void'>]> + + /** + * Calls the get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64) ABI method. + * + * Returns the discount for the specified expiration type. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getDiscount(args: MethodArgs<'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)'>]> + + /** + * Calls the is_discount_expired(uint64)uint64 ABI method. + * + * Checks if the discount for the specified expiration type is expired. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + isDiscountExpired(args: MethodArgs<'is_discount_expired(uint64)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'is_discount_expired(uint64)uint64'>]> + + /** + * Calls the create_discount(uint64,uint64,uint64,uint64,pay)void ABI method. + * + * Creates a new discount for the subscription service. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + createDiscount(args: MethodArgs<'create_discount(uint64,uint64,uint64,uint64,pay)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'create_discount(uint64,uint64,uint64,uint64,pay)void'>]> + + /** + * Calls the delete_discount(uint64)void ABI method. + * + * Deletes a discount for the subscription service. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + deleteDiscount(args: MethodArgs<'delete_discount(uint64)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'delete_discount(uint64)void'>]> + + /** + * Calls the compute_price(uint64,bool)uint64 ABI method. + * + * Computes the price of the subscription for the given expiration type. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + computePrice(args: MethodArgs<'compute_price(uint64,bool)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'compute_price(uint64,bool)uint64'>]> + + /** + * Calls the compute_platform_fee(uint64,application)uint64 ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + computePlatformFee(args: MethodArgs<'compute_platform_fee(uint64,application)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'compute_platform_fee(uint64,application)uint64'>]> + + /** + * Calls the create_subscription(address,uint64,pay,pay,txn,application,application)uint64 ABI method. + * + * Subscribes a user to the subscription service and creates a new +subscription. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + createSubscription(args: MethodArgs<'create_subscription(address,uint64,pay,pay,txn,application,application)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'create_subscription(address,uint64,pay,pay,txn,application,application)uint64'>]> + + /** + * Calls the get_subscription(address)(uint64,uint64,uint64,uint64,uint64) ABI method. + * + * Retrieves the subscription details of a given subscriber. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getSubscription(args: MethodArgs<'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)'>]> + + /** + * Calls the is_subscriber(address)uint64 ABI method. + * + * Checks if a given address is a subscriber of the subscription service. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + isSubscriber(args: MethodArgs<'is_subscriber(address)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'is_subscriber(address)uint64'>]> + + /** + * Calls the claim_subscription(asset)void ABI method. + * + * Allows a subscriber to claim their subscription. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + claimSubscription(args: MethodArgs<'claim_subscription(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'claim_subscription(asset)void'>]> + + /** + * Calls the transfer_subscription(address,asset)void ABI method. + * + * Transfers a subscription from the sender's address to a new address. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + transferSubscription(args: MethodArgs<'transfer_subscription(address,asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'transfer_subscription(address,asset)void'>]> + + /** + * Calls the delete_subscription(asset)uint64 ABI method. + * + * Unsubscribes a user from the subscription service and deletes the +subscription. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + deleteSubscription(args: MethodArgs<'delete_subscription(asset)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'delete_subscription(asset)uint64'>]> + + /** + * Calls the enable()void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + enable(args: MethodArgs<'enable()void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'enable()void'>]> + + /** + * Calls the disable()void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + disable(args: MethodArgs<'disable()void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'disable()void'>]> + + /** + * Gets available update methods + */ + readonly update: { + /** + * Updates an existing instance of the SMI smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs): SmiComposer<[...TReturns, undefined]> + } + + /** + * Gets available delete methods + */ + readonly delete: { + /** + * Deletes an existing instance of the SMI smart contract using the delete()void ABI method. + * + * @param args The arguments for the smart contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + delete(args: MethodArgs<'delete()void'>, params?: AppClientCallCoreParams): SmiComposer<[...TReturns, MethodReturn<'delete()void'>]> + } + + /** + * Gets available optIn methods + */ + readonly optIn: { + /** + * Opts the user into an existing instance of the SMI smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + bare(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, undefined]> + } + + /** + * Gets available closeOut methods + */ + readonly closeOut: { + /** + * Makes a close out call to an existing instance of the SMI smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + bare(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, undefined]> + } + + /** + * Makes a clear_state call to an existing instance of the SMI smart contract. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn One of: A TransactionWithSigner object (returned as is), a TransactionToSign object (signer is obtained from the signer property), a Transaction object (signer is extracted from the defaultSender parameter), an async SendTransactionResult returned by one of algokit utils helpers (signer is obtained from the defaultSender parameter) + * @param defaultSender The default sender to be used to obtain a signer where the object provided to the transaction parameter does not include a signer. + */ + addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom): SmiComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + atc(): Promise + /** + * Executes the transaction group and returns an array of results + */ + execute(): Promise> +} +export type SmiComposerResults = { + returns: TReturns + groupId: string + txIds: string[] + transactions: Transaction[] +} diff --git a/src/contracts/SML.ts b/src/contracts/SML.ts new file mode 100644 index 0000000..9451f5b --- /dev/null +++ b/src/contracts/SML.ts @@ -0,0 +1,1017 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^2 + */ +import * as algokit from '@algorandfoundation/algokit-utils' +import { + AppCallTransactionResult, + AppCallTransactionResultOfType, + CoreAppCallArgs, + RawAppCallArgs, + AppState, + TealTemplateParams, + ABIAppCallArg, +} from '@algorandfoundation/algokit-utils/types/app' +import { + AppClientCallCoreParams, + AppClientCompilationParams, + AppClientDeployCoreParams, + AppDetails, + ApplicationClient, +} from '@algorandfoundation/algokit-utils/types/app-client' +import { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' +import { SendTransactionResult, TransactionToSign, SendTransactionFrom } from '@algorandfoundation/algokit-utils/types/transaction' +import { Algodv2, OnApplicationComplete, Transaction, TransactionWithSigner, AtomicTransactionComposer } from 'algosdk' +export const APP_SPEC: AppSpec = { + "hints": { + "create(address)void": { + "call_config": { + "no_op": "CREATE" + } + }, + "get_version()string": { + "call_config": { + "no_op": "CALL" + } + }, + "opt_in_smi(application)void": { + "call_config": { + "no_op": "CALL" + } + }, + "opt_out_smi(application)void": { + "call_config": { + "no_op": "CALL" + } + }, + "opt_in_coin(asset)void": { + "call_config": { + "no_op": "CALL" + } + }, + "opt_out_coin(asset)void": { + "call_config": { + "no_op": "CALL" + } + }, + "withdraw_coin(asset)void": { + "call_config": { + "no_op": "CALL" + } + }, + "withdraw_algo()void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSA0IDYKYnl0ZWNibG9jayAweDZkNjE2ZTYxNjc2NTcyIDB4CnR4biBOdW1BcHBBcmdzCmludGNfMCAvLyAwCj09CmJueiBtYWluX2wxOAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGNjNjk0ZWFhIC8vICJjcmVhdGUoYWRkcmVzcyl2b2lkIgo9PQpibnogbWFpbl9sMTcKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgyZmJhNWExYiAvLyAiZ2V0X3ZlcnNpb24oKXN0cmluZyIKPT0KYm56IG1haW5fbDE2CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4Y2FkNTYxNDYgLy8gIm9wdF9pbl9zbWkoYXBwbGljYXRpb24pdm9pZCIKPT0KYm56IG1haW5fbDE1CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4YzJhMzg0NTEgLy8gIm9wdF9vdXRfc21pKGFwcGxpY2F0aW9uKXZvaWQiCj09CmJueiBtYWluX2wxNAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDZiMmIyNTZjIC8vICJvcHRfaW5fY29pbihhc3NldCl2b2lkIgo9PQpibnogbWFpbl9sMTMKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg2YThiODY1NiAvLyAib3B0X291dF9jb2luKGFzc2V0KXZvaWQiCj09CmJueiBtYWluX2wxMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGI0ZTBmMzBhIC8vICJ3aXRoZHJhd19jb2luKGFzc2V0KXZvaWQiCj09CmJueiBtYWluX2wxMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDU3MjU4OGM1IC8vICJ3aXRoZHJhd19hbGdvKCl2b2lkIgo9PQpibnogbWFpbl9sMTAKZXJyCm1haW5fbDEwOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHdpdGhkcmF3YWxnb2Nhc3Rlcl8xNwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTE6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgd2l0aGRyYXdjb2luY2FzdGVyXzE2CmludGNfMSAvLyAxCnJldHVybgptYWluX2wxMjoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBvcHRvdXRjb2luY2FzdGVyXzE1CmludGNfMSAvLyAxCnJldHVybgptYWluX2wxMzoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBvcHRpbmNvaW5jYXN0ZXJfMTQKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE0Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIG9wdG91dHNtaWNhc3Rlcl8xMwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTU6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgb3B0aW5zbWljYXN0ZXJfMTIKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE2Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGdldHZlcnNpb25jYXN0ZXJfMTEKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE3Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCj09CiYmCmFzc2VydApjYWxsc3ViIGNyZWF0ZWNhc3Rlcl8xMAppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTg6CnR4biBPbkNvbXBsZXRpb24KaW50Y18xIC8vIE9wdEluCj09CmJueiBtYWluX2wyMgp0eG4gT25Db21wbGV0aW9uCmludGNfMiAvLyBVcGRhdGVBcHBsaWNhdGlvbgo9PQpibnogbWFpbl9sMjEKZXJyCm1haW5fbDIxOgp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQphc3NlcnQKY2FsbHN1YiB1cGRhdGVfMgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjI6CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CmFzc2VydApjYWxsc3ViIG9wdGluXzEKaW50Y18xIC8vIDEKcmV0dXJuCgovLyBjcmVhdGUKY3JlYXRlXzA6CnByb3RvIDEgMApieXRlY18wIC8vICJtYW5hZ2VyIgpieXRlY18xIC8vICIiCmFwcF9nbG9iYWxfcHV0CmJ5dGVjXzAgLy8gIm1hbmFnZXIiCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIG9wdGluCm9wdGluXzE6CnByb3RvIDAgMAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQphc3NlcnQKcmV0c3ViCgovLyB1cGRhdGUKdXBkYXRlXzI6CnByb3RvIDAgMAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQphc3NlcnQKcmV0c3ViCgovLyBnZXRfdmVyc2lvbgpnZXR2ZXJzaW9uXzM6CnByb3RvIDAgMQpieXRlY18xIC8vICIiCmR1cApwdXNoYnl0ZXMgMHgzMTJlMzAgLy8gIjEuMCIKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmxlbgppdG9iCmV4dHJhY3QgNiAwCmZyYW1lX2RpZyAxCmNvbmNhdApmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKZXh0cmFjdCAyIDAKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmxlbgppdG9iCmV4dHJhY3QgNiAwCmZyYW1lX2RpZyAwCmNvbmNhdApmcmFtZV9idXJ5IDAKcmV0c3ViCgovLyBvcHRfaW5fc21pCm9wdGluc21pXzQ6CnByb3RvIDEgMAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwpzdG9yZSAxCnN0b3JlIDAKbG9hZCAxCmJueiBvcHRpbnNtaV80X2wyCmludGNfMCAvLyAwCnJldHVybgpvcHRpbnNtaV80X2wyOgpsb2FkIDAKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiE9CmFzc2VydAppdHhuX2JlZ2luCmludGNfMyAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KaW50Y18xIC8vIE9wdEluCml0eG5fZmllbGQgT25Db21wbGV0aW9uCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25JRAppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIG9wdF9vdXRfc21pCm9wdG91dHNtaV81Ogpwcm90byAxIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydAppdHhuX2JlZ2luCmludGNfMyAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KcHVzaGludCAyIC8vIENsb3NlT3V0Cml0eG5fZmllbGQgT25Db21wbGV0aW9uCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25JRAppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIG9wdF9pbl9jb2luCm9wdGluY29pbl82Ogpwcm90byAxIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydAppdHhuX2JlZ2luCmludGNfMiAvLyBheGZlcgppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMQp0eG5hcyBBc3NldHMKaXR4bl9maWVsZCBYZmVyQXNzZXQKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBBc3NldEFtb3VudApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwppdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKcmV0c3ViCgovLyBvcHRfb3V0X2NvaW4Kb3B0b3V0Y29pbl83Ogpwcm90byAxIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydAppdHhuX2JlZ2luCmludGNfMiAvLyBheGZlcgppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMQp0eG5hcyBBc3NldHMKaXR4bl9maWVsZCBYZmVyQXNzZXQKYnl0ZWNfMCAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCmludGNfMCAvLyAwCml0eG5fZmllbGQgQXNzZXRBbW91bnQKYnl0ZWNfMCAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBBc3NldENsb3NlVG8KaXR4bl9zdWJtaXQKcmV0c3ViCgovLyB3aXRoZHJhd19jb2luCndpdGhkcmF3Y29pbl84Ogpwcm90byAxIDAKdHhuIFNlbmRlcgpieXRlY18wIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldAo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmZyYW1lX2RpZyAtMQp0eG5hcyBBc3NldHMKYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCnN0b3JlIDMKc3RvcmUgMgpsb2FkIDMKYm56IHdpdGhkcmF3Y29pbl84X2wyCmludGNfMCAvLyAwCnJldHVybgp3aXRoZHJhd2NvaW5fOF9sMjoKaXR4bl9iZWdpbgppbnRjXzIgLy8gYXhmZXIKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTEKdHhuYXMgQXNzZXRzCml0eG5fZmllbGQgWGZlckFzc2V0CmJ5dGVjXzAgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQpsb2FkIDIKaXR4bl9maWVsZCBBc3NldEFtb3VudAppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIHdpdGhkcmF3X2FsZ28Kd2l0aGRyYXdhbGdvXzk6CnByb3RvIDAgMAppbnRjXzAgLy8gMApkdXBuIDIKdHhuIFNlbmRlcgpieXRlY18wIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldAo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmJhbGFuY2UKZnJhbWVfYnVyeSAwCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCm1pbl9iYWxhbmNlCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMApmcmFtZV9kaWcgMQotCmludGNfMCAvLyAwCj4KYm56IHdpdGhkcmF3YWxnb185X2wyCmludGNfMCAvLyAwCnJldHVybgp3aXRoZHJhd2FsZ29fOV9sMjoKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIDEKLQpmcmFtZV9idXJ5IDIKaXR4bl9iZWdpbgppbnRjXzEgLy8gcGF5Cml0eG5fZmllbGQgVHlwZUVudW0KYnl0ZWNfMCAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBSZWNlaXZlcgppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQpmcmFtZV9kaWcgMgppdHhuX2ZpZWxkIEFtb3VudAppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIGNyZWF0ZV9jYXN0ZXIKY3JlYXRlY2FzdGVyXzEwOgpwcm90byAwIDAKYnl0ZWNfMSAvLyAiIgp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMApjYWxsc3ViIGNyZWF0ZV8wCnJldHN1YgoKLy8gZ2V0X3ZlcnNpb25fY2FzdGVyCmdldHZlcnNpb25jYXN0ZXJfMTE6CnByb3RvIDAgMApieXRlY18xIC8vICIiCmNhbGxzdWIgZ2V0dmVyc2lvbl8zCmZyYW1lX2J1cnkgMApwdXNoYnl0ZXMgMHgxNTFmN2M3NSAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCmNvbmNhdApsb2cKcmV0c3ViCgovLyBvcHRfaW5fc21pX2Nhc3RlcgpvcHRpbnNtaWNhc3Rlcl8xMjoKcHJvdG8gMCAwCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKY2FsbHN1YiBvcHRpbnNtaV80CnJldHN1YgoKLy8gb3B0X291dF9zbWlfY2FzdGVyCm9wdG91dHNtaWNhc3Rlcl8xMzoKcHJvdG8gMCAwCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKY2FsbHN1YiBvcHRvdXRzbWlfNQpyZXRzdWIKCi8vIG9wdF9pbl9jb2luX2Nhc3RlcgpvcHRpbmNvaW5jYXN0ZXJfMTQ6CnByb3RvIDAgMAppbnRjXzAgLy8gMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmludGNfMCAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmNhbGxzdWIgb3B0aW5jb2luXzYKcmV0c3ViCgovLyBvcHRfb3V0X2NvaW5fY2FzdGVyCm9wdG91dGNvaW5jYXN0ZXJfMTU6CnByb3RvIDAgMAppbnRjXzAgLy8gMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmludGNfMCAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmNhbGxzdWIgb3B0b3V0Y29pbl83CnJldHN1YgoKLy8gd2l0aGRyYXdfY29pbl9jYXN0ZXIKd2l0aGRyYXdjb2luY2FzdGVyXzE2Ogpwcm90byAwIDAKaW50Y18wIC8vIDAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMApjYWxsc3ViIHdpdGhkcmF3Y29pbl84CnJldHN1YgoKLy8gd2l0aGRyYXdfYWxnb19jYXN0ZXIKd2l0aGRyYXdhbGdvY2FzdGVyXzE3Ogpwcm90byAwIDAKY2FsbHN1YiB3aXRoZHJhd2FsZ29fOQpyZXRzdWI=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu" + }, + "state": { + "global": { + "num_byte_slices": 1, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": { + "manager": { + "type": "bytes", + "key": "manager", + "descr": "Address of the manager of the locker" + } + }, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "SML", + "methods": [ + { + "name": "create", + "args": [ + { + "type": "address", + "name": "manager" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "get_version", + "args": [], + "returns": { + "type": "string" + } + }, + { + "name": "opt_in_smi", + "args": [ + { + "type": "application", + "name": "smi" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "opt_out_smi", + "args": [ + { + "type": "application", + "name": "smi" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "opt_in_coin", + "args": [ + { + "type": "asset", + "name": "coin" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "opt_out_coin", + "args": [ + { + "type": "asset", + "name": "coin" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "withdraw_coin", + "args": [ + { + "type": "asset", + "name": "coin" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "withdraw_algo", + "args": [], + "returns": { + "type": "void" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "opt_in": "CALL", + "update_application": "CALL" + } +} + +/** + * Defines an onCompletionAction of 'no_op' + */ +export type OnCompleteNoOp = { onCompleteAction?: 'no_op' | OnApplicationComplete.NoOpOC } +/** + * Defines an onCompletionAction of 'opt_in' + */ +export type OnCompleteOptIn = { onCompleteAction: 'opt_in' | OnApplicationComplete.OptInOC } +/** + * Defines an onCompletionAction of 'close_out' + */ +export type OnCompleteCloseOut = { onCompleteAction: 'close_out' | OnApplicationComplete.CloseOutOC } +/** + * Defines an onCompletionAction of 'delete_application' + */ +export type OnCompleteDelApp = { onCompleteAction: 'delete_application' | OnApplicationComplete.DeleteApplicationOC } +/** + * Defines an onCompletionAction of 'update_application' + */ +export type OnCompleteUpdApp = { onCompleteAction: 'update_application' | OnApplicationComplete.UpdateApplicationOC } +/** + * A state record containing a single unsigned integer + */ +export type IntegerState = { + /** + * Gets the state value as a BigInt + */ + asBigInt(): bigint + /** + * Gets the state value as a number. + */ + asNumber(): number +} +/** + * A state record containing binary data + */ +export type BinaryState = { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array + /** + * Gets the state value as a string + */ + asString(): string +} + +/** + * Defines the types of available calls and state of the Sml smart contract. + */ +export type Sml = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'create(address)void' | 'create', { + argsObj: { + manager: string + } + argsTuple: [manager: string] + returns: void + }> + & Record<'get_version()string' | 'get_version', { + argsObj: { + } + argsTuple: [] + returns: string + }> + & Record<'opt_in_smi(application)void' | 'opt_in_smi', { + argsObj: { + smi: number | bigint + } + argsTuple: [smi: number | bigint] + returns: void + }> + & Record<'opt_out_smi(application)void' | 'opt_out_smi', { + argsObj: { + smi: number | bigint + } + argsTuple: [smi: number | bigint] + returns: void + }> + & Record<'opt_in_coin(asset)void' | 'opt_in_coin', { + argsObj: { + coin: number | bigint + } + argsTuple: [coin: number | bigint] + returns: void + }> + & Record<'opt_out_coin(asset)void' | 'opt_out_coin', { + argsObj: { + coin: number | bigint + } + argsTuple: [coin: number | bigint] + returns: void + }> + & Record<'withdraw_coin(asset)void' | 'withdraw_coin', { + argsObj: { + coin: number | bigint + } + argsTuple: [coin: number | bigint] + returns: void + }> + & Record<'withdraw_algo()void' | 'withdraw_algo', { + argsObj: { + } + argsTuple: [] + returns: void + }> + /** + * Defines the shape of the global and local state of the application. + */ + state: { + global: { + /** + * Address of the manager of the locker + */ + 'manager'?: BinaryState + } + } +} +/** + * Defines the possible abi call signatures + */ +export type SmlSig = keyof Sml['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a bare call is made + */ +export type TypedCallParams = { + method: TSignature + methodArgs: TSignature extends undefined ? undefined : Array +} & AppClientCallCoreParams & CoreAppCallArgs +/** + * Defines the arguments required for a bare call + */ +export type BareCallArgs = Omit +/** + * Maps a method signature from the Sml smart contract to the method's arguments in either tuple of struct form + */ +export type MethodArgs = Sml['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the Sml smart contract to the method's return type + */ +export type MethodReturn = Sml['methods'][TSignature]['returns'] + +/** + * A factory for available 'create' calls + */ +export type SmlCreateCalls = (typeof SmlCallFactory)['create'] +/** + * Defines supported create methods for this smart contract + */ +export type SmlCreateCallParams = + | (TypedCallParams<'create(address)void'> & (OnCompleteNoOp)) +/** + * A factory for available 'update' calls + */ +export type SmlUpdateCalls = (typeof SmlCallFactory)['update'] +/** + * Defines supported update methods for this smart contract + */ +export type SmlUpdateCallParams = + | TypedCallParams +/** + * Defines arguments required for the deploy method. + */ +export type SmlDeployArgs = { + deployTimeParams?: TealTemplateParams + /** + * A delegate which takes a create call factory and returns the create call params for this smart contract + */ + createCall?: (callFactory: SmlCreateCalls) => SmlCreateCallParams + /** + * A delegate which takes a update call factory and returns the update call params for this smart contract + */ + updateCall?: (callFactory: SmlUpdateCalls) => SmlUpdateCallParams +} + + +/** + * Exposes methods for constructing all available smart contract calls + */ +export abstract class SmlCallFactory { + /** + * Gets available create call factories + */ + static get create() { + return { + /** + * Constructs a create call for the SML smart contract using the create(address)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + create(args: MethodArgs<'create(address)void'>, params: AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams & (OnCompleteNoOp) = {}) { + return { + method: 'create(address)void' as const, + methodArgs: Array.isArray(args) ? args : [args.manager], + ...params, + } + }, + } + } + + /** + * Gets available update call factories + */ + static get update() { + return { + /** + * Constructs an update call for the SML smart contract using a bare call + * + * @param params Any parameters for the call + * @returns A TypedCallParams object for the call + */ + bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams = {}) { + return { + method: undefined, + methodArgs: undefined, + ...params, + } + }, + } + } + + /** + * Gets available optIn call factories + */ + static get optIn() { + return { + /** + * Constructs an opt in call for the SML smart contract using a bare call + * + * @param params Any parameters for the call + * @returns A TypedCallParams object for the call + */ + bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { + return { + method: undefined, + methodArgs: undefined, + ...params, + } + }, + } + } + + /** + * Constructs a no op call for the get_version()string ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'get_version()string' as const, + methodArgs: Array.isArray(args) ? args : [], + ...params, + } + } + /** + * Constructs a no op call for the opt_in_smi(application)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static optInSmi(args: MethodArgs<'opt_in_smi(application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'opt_in_smi(application)void' as const, + methodArgs: Array.isArray(args) ? args : [args.smi], + ...params, + } + } + /** + * Constructs a no op call for the opt_out_smi(application)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static optOutSmi(args: MethodArgs<'opt_out_smi(application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'opt_out_smi(application)void' as const, + methodArgs: Array.isArray(args) ? args : [args.smi], + ...params, + } + } + /** + * Constructs a no op call for the opt_in_coin(asset)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static optInCoin(args: MethodArgs<'opt_in_coin(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'opt_in_coin(asset)void' as const, + methodArgs: Array.isArray(args) ? args : [args.coin], + ...params, + } + } + /** + * Constructs a no op call for the opt_out_coin(asset)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static optOutCoin(args: MethodArgs<'opt_out_coin(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'opt_out_coin(asset)void' as const, + methodArgs: Array.isArray(args) ? args : [args.coin], + ...params, + } + } + /** + * Constructs a no op call for the withdraw_coin(asset)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static withdrawCoin(args: MethodArgs<'withdraw_coin(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'withdraw_coin(asset)void' as const, + methodArgs: Array.isArray(args) ? args : [args.coin], + ...params, + } + } + /** + * Constructs a no op call for the withdraw_algo()void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static withdrawAlgo(args: MethodArgs<'withdraw_algo()void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'withdraw_algo()void' as const, + methodArgs: Array.isArray(args) ? args : [], + ...params, + } + } +} + +/** + * A client to make calls to the SML smart contract + */ +export class SmlClient { + /** + * The underlying `ApplicationClient` for when you want to have more flexibility + */ + public readonly appClient: ApplicationClient + + private readonly sender: SendTransactionFrom | undefined + + /** + * Creates a new instance of `SmlClient` + * + * @param appDetails appDetails The details to identify the app to deploy + * @param algod An algod client instance + */ + constructor(appDetails: AppDetails, private algod: Algodv2) { + this.sender = appDetails.sender + this.appClient = algokit.getAppClient({ + ...appDetails, + app: APP_SPEC + }, algod) + } + + /** + * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type + * + * @param result The AppCallTransactionResult to be mapped + * @param returnValueFormatter An optional delegate to format the return value if required + * @returns The smart contract response with an updated return value + */ + protected mapReturnValue(result: AppCallTransactionResult, returnValueFormatter?: (value: any) => TReturn): AppCallTransactionResultOfType { + if(result.return?.decodeError) { + throw result.return.decodeError + } + const returnValue = result.return?.returnValue !== undefined && returnValueFormatter !== undefined + ? returnValueFormatter(result.return.returnValue) + : result.return?.returnValue as TReturn | undefined + return { ...result, return: returnValue } + } + + /** + * Calls the ABI method with the matching signature using an onCompletion code of NO_OP + * + * @param typedCallParams An object containing the method signature, args, and any other relevant parameters + * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type + * @returns The result of the smart contract call + */ + public async call(typedCallParams: TypedCallParams, returnValueFormatter?: (value: any) => MethodReturn) { + return this.mapReturnValue>(await this.appClient.call(typedCallParams), returnValueFormatter) + } + + /** + * Idempotently deploys the SML smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public deploy(params: SmlDeployArgs & AppClientDeployCoreParams = {}): ReturnType { + const createArgs = params.createCall?.(SmlCallFactory.create) + const updateArgs = params.updateCall?.(SmlCallFactory.update) + return this.appClient.deploy({ + ...params, + updateArgs, + createArgs, + createOnCompleteAction: createArgs?.onCompleteAction, + }) + } + + /** + * Gets available create methods + */ + public get create() { + const $this = this + return { + /** + * Creates a new instance of the SML smart contract using the create(address)void ABI method. + * + * @param args The arguments for the smart contract call + * @param params Any additional parameters for the call + * @returns The create result + */ + async create(args: MethodArgs<'create(address)void'>, params: AppClientCallCoreParams & AppClientCompilationParams & (OnCompleteNoOp) = {}): Promise>> { + return $this.mapReturnValue(await $this.appClient.create(SmlCallFactory.create.create(args, params))) + }, + } + } + + /** + * Gets available update methods + */ + public get update() { + const $this = this + return { + /** + * Updates an existing instance of the SML smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The update result + */ + bare(args: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs = {}): Promise> { + return $this.appClient.update(args) as unknown as Promise> + }, + } + } + + /** + * Gets available optIn methods + */ + public get optIn() { + const $this = this + return { + /** + * Opts the user into an existing instance of the SML smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The optIn result + */ + bare(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}): Promise> { + return $this.appClient.optIn(args) as unknown as Promise> + }, + } + } + + /** + * Makes a clear_state call to an existing instance of the SML smart contract. + * + * @param args The arguments for the bare call + * @returns The clear_state result + */ + public clearState(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.appClient.clearState(args) + } + + /** + * Calls the get_version()string ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmlCallFactory.getVersion(args, params)) + } + + /** + * Calls the opt_in_smi(application)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public optInSmi(args: MethodArgs<'opt_in_smi(application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmlCallFactory.optInSmi(args, params)) + } + + /** + * Calls the opt_out_smi(application)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public optOutSmi(args: MethodArgs<'opt_out_smi(application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmlCallFactory.optOutSmi(args, params)) + } + + /** + * Calls the opt_in_coin(asset)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public optInCoin(args: MethodArgs<'opt_in_coin(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmlCallFactory.optInCoin(args, params)) + } + + /** + * Calls the opt_out_coin(asset)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public optOutCoin(args: MethodArgs<'opt_out_coin(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmlCallFactory.optOutCoin(args, params)) + } + + /** + * Calls the withdraw_coin(asset)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public withdrawCoin(args: MethodArgs<'withdraw_coin(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmlCallFactory.withdrawCoin(args, params)) + } + + /** + * Calls the withdraw_algo()void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public withdrawAlgo(args: MethodArgs<'withdraw_algo()void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmlCallFactory.withdrawAlgo(args, params)) + } + + /** + * Extracts a binary state value out of an AppState dictionary + * + * @param state The state dictionary containing the state value + * @param key The key of the state value + * @returns A BinaryState instance containing the state value, or undefined if the key was not found + */ + private static getBinaryState(state: AppState, key: string): BinaryState | undefined { + const value = state[key] + if (!value) return undefined + if (!('valueRaw' in value)) + throw new Error(`Failed to parse state value for ${key}; received an int when expected a byte array`) + return { + asString(): string { + return value.value + }, + asByteArray(): Uint8Array { + return value.valueRaw + } + } + } + + /** + * Extracts a integer state value out of an AppState dictionary + * + * @param state The state dictionary containing the state value + * @param key The key of the state value + * @returns An IntegerState instance containing the state value, or undefined if the key was not found + */ + private static getIntegerState(state: AppState, key: string): IntegerState | undefined { + const value = state[key] + if (!value) return undefined + if ('valueRaw' in value) + throw new Error(`Failed to parse state value for ${key}; received a byte array when expected a number`) + return { + asBigInt() { + return typeof value.value === 'bigint' ? value.value : BigInt(value.value) + }, + asNumber(): number { + return typeof value.value === 'bigint' ? Number(value.value) : value.value + }, + } + } + + /** + * Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value + */ + public async getGlobalState(): Promise { + const state = await this.appClient.getGlobalState() + return { + get manager() { + return SmlClient.getBinaryState(state, 'manager') + }, + } + } + + public compose(): SmlComposer { + const client = this + const atc = new AtomicTransactionComposer() + let promiseChain:Promise = Promise.resolve() + const resultMappers: Array any)> = [] + return { + getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.getVersion(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + optInSmi(args: MethodArgs<'opt_in_smi(application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.optInSmi(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + optOutSmi(args: MethodArgs<'opt_out_smi(application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.optOutSmi(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + optInCoin(args: MethodArgs<'opt_in_coin(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.optInCoin(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + optOutCoin(args: MethodArgs<'opt_out_coin(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.optOutCoin(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + withdrawCoin(args: MethodArgs<'withdraw_coin(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.withdrawCoin(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + withdrawAlgo(args: MethodArgs<'withdraw_algo()void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.withdrawAlgo(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + get update() { + const $this = this + return { + bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.update.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return $this + }, + } + }, + get optIn() { + const $this = this + return { + bare(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.optIn.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return $this + }, + } + }, + clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.clearState({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom) { + promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit.getTransactionWithSigner(txn, defaultSender ?? client.sender))) + return this + }, + async atc() { + await promiseChain + return atc + }, + async execute() { + await promiseChain + const result = await algokit.sendAtomicTransactionComposer({ atc, sendParams: {} }, client.algod) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue) + } + } + } as unknown as SmlComposer + } +} +export type SmlComposer = { + /** + * Calls the get_version()string ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'get_version()string'>]> + + /** + * Calls the opt_in_smi(application)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + optInSmi(args: MethodArgs<'opt_in_smi(application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'opt_in_smi(application)void'>]> + + /** + * Calls the opt_out_smi(application)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + optOutSmi(args: MethodArgs<'opt_out_smi(application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'opt_out_smi(application)void'>]> + + /** + * Calls the opt_in_coin(asset)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + optInCoin(args: MethodArgs<'opt_in_coin(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'opt_in_coin(asset)void'>]> + + /** + * Calls the opt_out_coin(asset)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + optOutCoin(args: MethodArgs<'opt_out_coin(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'opt_out_coin(asset)void'>]> + + /** + * Calls the withdraw_coin(asset)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + withdrawCoin(args: MethodArgs<'withdraw_coin(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'withdraw_coin(asset)void'>]> + + /** + * Calls the withdraw_algo()void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + withdrawAlgo(args: MethodArgs<'withdraw_algo()void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'withdraw_algo()void'>]> + + /** + * Gets available update methods + */ + readonly update: { + /** + * Updates an existing instance of the SML smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs): SmlComposer<[...TReturns, undefined]> + } + + /** + * Gets available optIn methods + */ + readonly optIn: { + /** + * Opts the user into an existing instance of the SML smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + bare(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, undefined]> + } + + /** + * Makes a clear_state call to an existing instance of the SML smart contract. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn One of: A TransactionWithSigner object (returned as is), a TransactionToSign object (signer is obtained from the signer property), a Transaction object (signer is extracted from the defaultSender parameter), an async SendTransactionResult returned by one of algokit utils helpers (signer is obtained from the defaultSender parameter) + * @param defaultSender The default sender to be used to obtain a signer where the object provided to the transaction parameter does not include a signer. + */ + addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom): SmlComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + atc(): Promise + /** + * Executes the transaction group and returns an array of results + */ + execute(): Promise> +} +export type SmlComposerResults = { + returns: TReturns + groupId: string + txIds: string[] + transactions: Transaction[] +} diff --git a/src/contracts/SMR.ts b/src/contracts/SMR.ts new file mode 100644 index 0000000..ab1d1ea --- /dev/null +++ b/src/contracts/SMR.ts @@ -0,0 +1,1312 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^2 + */ +import * as algokit from '@algorandfoundation/algokit-utils' +import { + AppCallTransactionResult, + AppCallTransactionResultOfType, + CoreAppCallArgs, + RawAppCallArgs, + AppState, + TealTemplateParams, + ABIAppCallArg, +} from '@algorandfoundation/algokit-utils/types/app' +import { + AppClientCallCoreParams, + AppClientCompilationParams, + AppClientDeployCoreParams, + AppDetails, + ApplicationClient, +} from '@algorandfoundation/algokit-utils/types/app-client' +import { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' +import { SendTransactionResult, TransactionToSign, SendTransactionFrom } from '@algorandfoundation/algokit-utils/types/transaction' +import { Algodv2, OnApplicationComplete, Transaction, TransactionWithSigner, AtomicTransactionComposer } from 'algosdk' +export const APP_SPEC: AppSpec = { + "hints": { + "create(uint64)void": { + "call_config": { + "no_op": "CREATE" + } + }, + "get_version()string": { + "call_config": { + "no_op": "CALL" + } + }, + "update_sml_precompile(byte[],byte[])void": { + "call_config": { + "no_op": "CALL" + } + }, + "update_smi_precompile(byte[],byte[])void": { + "call_config": { + "no_op": "CALL" + } + }, + "append_extra_approval_chunk(byte[])void": { + "call_config": { + "no_op": "CALL" + } + }, + "update_sml(address,application)void": { + "call_config": { + "no_op": "CALL" + } + }, + "update_smi(address,application)void": { + "call_config": { + "no_op": "CALL" + } + }, + "get_sml(address)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "create_sml(address,pay)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "transfer_smi(application,application,address,pay)void": { + "call_config": { + "no_op": "CALL" + } + }, + "delete_smi(application,application)void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSA2IDEwMDAwMCAxMDAwMCAyMDAwMDAKYnl0ZWNibG9jayAweCAweDczNmQ2MTVmNjk2NCAweDAxIDB4MTUxZjdjNzUgMHg3MzZkNmM1ZjYxNzA3MDcyNmY3NjYxNmMgMHg3MzZkNmM1ZjYzNmM2NTYxNzIgMHg3MzZkNjk1ZjYxNzA3MDcyNmY3NjYxNmMgMHg3MzZkNjk1ZjYzNmM2NTYxNzIgMHhjYWQ1NjE0NiAweDZiMmIyNTZjIDB4MDAgMHhjMmEzODQ1MQp0eG4gTnVtQXBwQXJncwppbnRjXzAgLy8gMAo9PQpibnogbWFpbl9sMjYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgyNDBkMmY2NyAvLyAiY3JlYXRlKHVpbnQ2NCl2b2lkIgo9PQpibnogbWFpbl9sMjUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgyZmJhNWExYiAvLyAiZ2V0X3ZlcnNpb24oKXN0cmluZyIKPT0KYm56IG1haW5fbDI0CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4ODk0ZWE4ZTggLy8gInVwZGF0ZV9zbWxfcHJlY29tcGlsZShieXRlW10sYnl0ZVtdKXZvaWQiCj09CmJueiBtYWluX2wyMwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGZkZmE4MGRiIC8vICJ1cGRhdGVfc21pX3ByZWNvbXBpbGUoYnl0ZVtdLGJ5dGVbXSl2b2lkIgo9PQpibnogbWFpbl9sMjIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg3ZjcwMGY3YiAvLyAiYXBwZW5kX2V4dHJhX2FwcHJvdmFsX2NodW5rKGJ5dGVbXSl2b2lkIgo9PQpibnogbWFpbl9sMjEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgxZmZhMDNhZCAvLyAidXBkYXRlX3NtbChhZGRyZXNzLGFwcGxpY2F0aW9uKXZvaWQiCj09CmJueiBtYWluX2wyMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDA0MTgyZjc3IC8vICJ1cGRhdGVfc21pKGFkZHJlc3MsYXBwbGljYXRpb24pdm9pZCIKPT0KYm56IG1haW5fbDE5CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4OTYxNjhlNzcgLy8gImdldF9zbWwoYWRkcmVzcyl1aW50NjQiCj09CmJueiBtYWluX2wxOAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGUxYzM2M2Q4IC8vICJjcmVhdGVfc21sKGFkZHJlc3MscGF5KXVpbnQ2NCIKPT0KYm56IG1haW5fbDE3CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4NWQwZjgyYTggLy8gImNyZWF0ZV9zbWkoc3RyaW5nLHVpbnQ2NCx1aW50NjQsdWludDY0LGFzc2V0LHN0cmluZyxzdHJpbmcsYWRkcmVzcyxhcHBsaWNhdGlvbixhcHBsaWNhdGlvbixwYXkscGF5KXVpbnQ2NCIKPT0KYm56IG1haW5fbDE2CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MzkyYTAzYjQgLy8gInRyYW5zZmVyX3NtaShhcHBsaWNhdGlvbixhcHBsaWNhdGlvbixhZGRyZXNzLHBheSl2b2lkIgo9PQpibnogbWFpbl9sMTUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgwMWJlZjQzMCAvLyAiZGVsZXRlX3NtaShhcHBsaWNhdGlvbixhcHBsaWNhdGlvbil2b2lkIgo9PQpibnogbWFpbl9sMTQKZXJyCm1haW5fbDE0Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGRlbGV0ZXNtaWNhc3Rlcl8yNwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTU6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgdHJhbnNmZXJzbWljYXN0ZXJfMjYKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE2Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGNyZWF0ZXNtaWNhc3Rlcl8yNQppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTc6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgY3JlYXRlc21sY2FzdGVyXzI0CmludGNfMSAvLyAxCnJldHVybgptYWluX2wxODoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBnZXRzbWxjYXN0ZXJfMjMKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE5Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHVwZGF0ZXNtaWNhc3Rlcl8yMgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjA6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgdXBkYXRlc21sY2FzdGVyXzIxCmludGNfMSAvLyAxCnJldHVybgptYWluX2wyMToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBhcHBlbmRleHRyYWFwcHJvdmFsY2h1bmtjYXN0ZXJfMjAKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDIyOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHVwZGF0ZXNtaXByZWNvbXBpbGVjYXN0ZXJfMTkKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDIzOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHVwZGF0ZXNtbHByZWNvbXBpbGVjYXN0ZXJfMTgKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDI0Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGdldHZlcnNpb25jYXN0ZXJfMTcKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDI1Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCj09CiYmCmFzc2VydApjYWxsc3ViIGNyZWF0ZWNhc3Rlcl8xNgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjY6CnR4biBPbkNvbXBsZXRpb24KcHVzaGludCA0IC8vIFVwZGF0ZUFwcGxpY2F0aW9uCj09CmJueiBtYWluX2wyOAplcnIKbWFpbl9sMjg6CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CmFzc2VydApjYWxsc3ViIHVwZGF0ZV80CmludGNfMSAvLyAxCnJldHVybgoKLy8gaW5uZXJfdXNkX2luX21pY3JvYWxnbwppbm5lcnVzZGlubWljcm9hbGdvXzA6CnByb3RvIDIgMQpmcmFtZV9kaWcgLTIKcHVzaGJ5dGVzIDB4NzU3MDY0NjE3NDY1NjQ1ZjYxNzQgLy8gInVwZGF0ZWRfYXQiCmFwcF9nbG9iYWxfZ2V0X2V4CnN0b3JlIDYzCnN0b3JlIDYyCmZyYW1lX2RpZyAtMgpwdXNoYnl0ZXMgMHg2NDY1NjM2OTZkNjE2YzczIC8vICJkZWNpbWFscyIKYXBwX2dsb2JhbF9nZXRfZXgKc3RvcmUgNjUKc3RvcmUgNjQKZnJhbWVfZGlnIC0yCnB1c2hieXRlcyAweDcwNzI2OTYzNjUgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldF9leApzdG9yZSA2NwpzdG9yZSA2Ngpsb2FkIDYyCnN0b3JlIDUzCmxvYWQgNjQKc3RvcmUgNTYKbG9hZCA2NgpzdG9yZSA1NwpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCmxvYWQgNTMKLQpwdXNoaW50IDg2NDAwIC8vIDg2NDAwCj4KYm56IGlubmVydXNkaW5taWNyb2FsZ29fMF9sMwppbm5lcnVzZGlubWljcm9hbGdvXzBfbDE6CmZyYW1lX2RpZyAtMQppbnRjIDQgLy8gMTAwMDAKKgpwdXNoaW50IDEwIC8vIDEwCmxvYWQgNTYKZXhwCioKbG9hZCA1NwovCmludGMgNCAvLyAxMDAwMAovCmludGMgNCAvLyAxMDAwMAoqCnN0b3JlIDYwCmxvYWQgNjAKaW50Y18zIC8vIDEwMDAwMAo8CmJ6IGlubmVydXNkaW5taWNyb2FsZ29fMF9sNAppbnRjXzMgLy8gMTAwMDAwCnJldHN1Ygppbm5lcnVzZGlubWljcm9hbGdvXzBfbDM6CnB1c2hpbnQgMiAvLyAyCnN0b3JlIDU2CnB1c2hpbnQgMzAgLy8gMzAKc3RvcmUgNTcKYiBpbm5lcnVzZGlubWljcm9hbGdvXzBfbDEKaW5uZXJ1c2Rpbm1pY3JvYWxnb18wX2w0Ogpsb2FkIDYwCnJldHN1YgoKLy8gaW5uZXJfY3JlYXRlX3NtbAppbm5lcmNyZWF0ZXNtbF8xOgpwcm90byAyIDEKYnl0ZWNfMCAvLyAiIgpkdXAKaW50Y18wIC8vIDAKYnl0ZWMgNCAvLyAic21sX2FwcHJvdmFsIgpib3hfZ2V0CnN0b3JlIDI1CnN0b3JlIDI0CmxvYWQgMjUKYXNzZXJ0CmxvYWQgMjQKZnJhbWVfYnVyeSAwCmJ5dGVjIDUgLy8gInNtbF9jbGVhciIKYm94X2dldApzdG9yZSAyNwpzdG9yZSAyNgpsb2FkIDI3CmFzc2VydApsb2FkIDI2CmZyYW1lX2J1cnkgMQppdHhuX2JlZ2luCmludGNfMiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KaW50Y18wIC8vIE5vT3AKaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KZnJhbWVfZGlnIDAKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KZnJhbWVfZGlnIDEKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEdsb2JhbE51bVVpbnQKaW50Y18xIC8vIDEKaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBMb2NhbE51bVVpbnQKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBMb2NhbE51bUJ5dGVTbGljZQpwdXNoYnl0ZXMgMHhjYzY5NGVhYSAvLyAweGNjNjk0ZWFhCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdAppdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgLTIKYm94X2RlbApwb3AKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAyCml0b2IKYm94X3B1dApmcmFtZV9kaWcgMgphcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCnN0b3JlIDI5CnN0b3JlIDI4Cml0eG5fYmVnaW4KZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKaXR4bl9maWVsZCBTZW5kZXIKaW50Y18xIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmxvYWQgMjgKaXR4bl9maWVsZCBSZWNlaXZlcgpmcmFtZV9kaWcgLTEKaXR4bl9maWVsZCBBbW91bnQKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKZnJhbWVfZGlnIDIKZnJhbWVfYnVyeSAwCnJldHN1YgoKLy8gaW5uZXJfdXBkYXRlX3ByZWNvbXBpbGVzCmlubmVydXBkYXRlcHJlY29tcGlsZXNfMjoKcHJvdG8gNCAwCmludGNfMSAvLyAxCnN0b3JlIDEKZnJhbWVfZGlnIC00CnN0b3JlIDAKaW5uZXJ1cGRhdGVwcmVjb21waWxlc18yX2wxOgpsb2FkIDEKZ2xvYmFsIEdyb3VwU2l6ZQo8CmJ6IGlubmVydXBkYXRlcHJlY29tcGlsZXNfMl9sMwpsb2FkIDAKbG9hZCAxCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMQpleHRyYWN0IDIgMApjb25jYXQKc3RvcmUgMApsb2FkIDEKaW50Y18xIC8vIDEKKwpzdG9yZSAxCmIgaW5uZXJ1cGRhdGVwcmVjb21waWxlc18yX2wxCmlubmVydXBkYXRlcHJlY29tcGlsZXNfMl9sMzoKZnJhbWVfZGlnIC0yCmV4dHJhY3QgMiAwCmJveF9kZWwKcG9wCmZyYW1lX2RpZyAtMgpleHRyYWN0IDIgMApsb2FkIDAKYm94X3B1dApmcmFtZV9kaWcgLTEKZXh0cmFjdCAyIDAKYm94X2RlbApwb3AKZnJhbWVfZGlnIC0xCmV4dHJhY3QgMiAwCmZyYW1lX2RpZyAtMwpib3hfcHV0CnJldHN1YgoKLy8gY3JlYXRlCmNyZWF0ZV8zOgpwcm90byAxIDAKYnl0ZWNfMSAvLyAic21hX2lkIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlY18xIC8vICJzbWFfaWQiCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIHVwZGF0ZQp1cGRhdGVfNDoKcHJvdG8gMCAwCnR4biBTZW5kZXIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCj09Ci8vIHVuYXV0aG9yaXplZAphc3NlcnQKaW50Y18xIC8vIDEKcmV0dXJuCgovLyBnZXRfdmVyc2lvbgpnZXR2ZXJzaW9uXzU6CnByb3RvIDAgMQpieXRlY18wIC8vICIiCmR1cApwdXNoYnl0ZXMgVE1QTF9WRVJTSU9OIC8vIFRNUExfVkVSU0lPTgpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDEKY29uY2F0CmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpleHRyYWN0IDIgMApmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDAKY29uY2F0CmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIHVwZGF0ZV9zbWxfcHJlY29tcGlsZQp1cGRhdGVzbWxwcmVjb21waWxlXzY6CnByb3RvIDIgMApieXRlY18wIC8vICIiCmR1cAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmJ5dGVjIDQgLy8gInNtbF9hcHByb3ZhbCIKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmxlbgppdG9iCmV4dHJhY3QgNiAwCmZyYW1lX2RpZyAwCmNvbmNhdApmcmFtZV9idXJ5IDAKYnl0ZWMgNSAvLyAic21sX2NsZWFyIgpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDEKY29uY2F0CmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAwCmZyYW1lX2RpZyAxCmNhbGxzdWIgaW5uZXJ1cGRhdGVwcmVjb21waWxlc18yCnJldHN1YgoKLy8gdXBkYXRlX3NtaV9wcmVjb21waWxlCnVwZGF0ZXNtaXByZWNvbXBpbGVfNzoKcHJvdG8gMiAwCmJ5dGVjXzAgLy8gIiIKZHVwCnR4biBTZW5kZXIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCj09Ci8vIHVuYXV0aG9yaXplZAphc3NlcnQKYnl0ZWMgNiAvLyAic21pX2FwcHJvdmFsIgpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDAKY29uY2F0CmZyYW1lX2J1cnkgMApieXRlYyA3IC8vICJzbWlfY2xlYXIiCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpsZW4KaXRvYgpleHRyYWN0IDYgMApmcmFtZV9kaWcgMQpjb25jYXQKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTEKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIDEKY2FsbHN1YiBpbm5lcnVwZGF0ZXByZWNvbXBpbGVzXzIKcmV0c3ViCgovLyBhcHBlbmRfZXh0cmFfYXBwcm92YWxfY2h1bmsKYXBwZW5kZXh0cmFhcHByb3ZhbGNodW5rXzg6CnByb3RvIDEgMAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CnR4biBGZWUKaW50Y18wIC8vIDAKPT0KLy8gRmVlIG11c3QgYmUgMAphc3NlcnQKcmV0c3ViCgovLyB1cGRhdGVfc21sCnVwZGF0ZXNtbF85Ogpwcm90byAyIDAKaW50Y18wIC8vIDAKYnl0ZWNfMCAvLyAiIgpkdXAKZnJhbWVfZGlnIC0yCmJveF9sZW4Kc3RvcmUgMwpzdG9yZSAyCmxvYWQgMwpibnogdXBkYXRlc21sXzlfbDIKaW50Y18wIC8vIDAKcmV0dXJuCnVwZGF0ZXNtbF85X2wyOgpmcmFtZV9kaWcgLTIKYm94X2dldApzdG9yZSA1CnN0b3JlIDQKbG9hZCA1CmFzc2VydApsb2FkIDQKYnRvaQpmcmFtZV9idXJ5IDAKYnl0ZWMgNCAvLyAic21sX2FwcHJvdmFsIgpib3hfZ2V0CnN0b3JlIDcKc3RvcmUgNgpsb2FkIDcKYXNzZXJ0CmxvYWQgNgpmcmFtZV9idXJ5IDEKYnl0ZWMgNSAvLyAic21sX2NsZWFyIgpib3hfZ2V0CnN0b3JlIDkKc3RvcmUgOApsb2FkIDkKYXNzZXJ0CmxvYWQgOApmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpmcmFtZV9kaWcgMAo9PQovLyBMb2NrZXIgSUQgbWlzbWF0Y2gKYXNzZXJ0Cml0eG5fYmVnaW4KaW50Y18yIC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKZnJhbWVfZGlnIDEKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KZnJhbWVfZGlnIDIKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIHVwZGF0ZV9zbWkKdXBkYXRlc21pXzEwOgpwcm90byAyIDAKYnl0ZWNfMCAvLyAiIgpkdXAKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpwdXNoYnl0ZXMgMHg2ZDYxNmU2MTY3NjU3MiAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXRfZXgKc3RvcmUgMTEKc3RvcmUgMTAKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwphcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCnN0b3JlIDEzCnN0b3JlIDEyCmJ5dGVjIDYgLy8gInNtaV9hcHByb3ZhbCIKYm94X2dldApzdG9yZSAxNQpzdG9yZSAxNApsb2FkIDE1CmFzc2VydApsb2FkIDE0CmZyYW1lX2J1cnkgMApieXRlYyA3IC8vICJzbWlfY2xlYXIiCmJveF9nZXQKc3RvcmUgMTcKc3RvcmUgMTYKbG9hZCAxNwphc3NlcnQKbG9hZCAxNgpmcmFtZV9idXJ5IDEKbG9hZCAxMgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwo9PQovLyBDcmVhdG9yIGFkZHJlc3MgbWlzbWF0Y2gKYXNzZXJ0CmxvYWQgMTAKZnJhbWVfZGlnIC0yCj09Ci8vIFNNSSBtYW5hZ2VyIGFkZHJlc3MgbWlzbWF0Y2gKYXNzZXJ0Cml0eG5fYmVnaW4KaW50Y18yIC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKZnJhbWVfZGlnIDAKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KZnJhbWVfZGlnIDEKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIGdldF9zbWwKZ2V0c21sXzExOgpwcm90byAxIDEKaW50Y18wIC8vIDAKZHVwCmZyYW1lX2RpZyAtMQpib3hfbGVuCnN0b3JlIDE5CnN0b3JlIDE4CmxvYWQgMTkKYm56IGdldHNtbF8xMV9sMgppbnRjXzAgLy8gMApmcmFtZV9idXJ5IDAKYiBnZXRzbWxfMTFfbDMKZ2V0c21sXzExX2wyOgpmcmFtZV9kaWcgLTEKYm94X2dldApzdG9yZSAyMQpzdG9yZSAyMApsb2FkIDIxCmFzc2VydApsb2FkIDIwCmJ0b2kKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmZyYW1lX2J1cnkgMApnZXRzbWxfMTFfbDM6CnJldHN1YgoKLy8gY3JlYXRlX3NtbApjcmVhdGVzbWxfMTI6CnByb3RvIDIgMQppbnRjXzAgLy8gMApkdXAKdHhuIFNlbmRlcgpmcmFtZV9kaWcgLTIKPT0KLy8gTWFuYWdlciBhZGRyZXNzIG11c3QgbWF0Y2gKYXNzZXJ0CmZyYW1lX2RpZyAtMQpndHhucyBBbW91bnQKaW50Y18zIC8vIDEwMDAwMAo+PQovLyBGZWUgbXVzdCBiZSBhdCBsZWFzdCAwLjEgQWxnbwphc3NlcnQKZnJhbWVfZGlnIC0yCmJveF9sZW4Kc3RvcmUgMjMKc3RvcmUgMjIKbG9hZCAyMwpibnogY3JlYXRlc21sXzEyX2wyCmludGNfMyAvLyAxMDAwMDAKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgMQpjYWxsc3ViIGlubmVyY3JlYXRlc21sXzEKZnJhbWVfYnVyeSAwCmIgY3JlYXRlc21sXzEyX2wzCmNyZWF0ZXNtbF8xMl9sMjoKaW50Y18wIC8vIDAKcmV0dXJuCmNyZWF0ZXNtbF8xMl9sMzoKcmV0c3ViCgovLyBjcmVhdGVfc21pCmNyZWF0ZXNtaV8xMzoKcHJvdG8gMTIgMQppbnRjXzAgLy8gMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCmR1cApieXRlY18wIC8vICIiCmR1cAppbnRjXzAgLy8gMApkdXAKZnJhbWVfZGlnIC0yCmd0eG5zIFNlbmRlcgpmcmFtZV9kaWcgLTUKPT0KLy8gTWFuYWdlciBhZGRyZXNzIG11c3QgbWF0Y2ggZmVlIHR4biBzZW5kZXIKYXNzZXJ0CmJ5dGVjXzEgLy8gInNtYV9pZCIKYXBwX2dsb2JhbF9nZXQKcHVzaGJ5dGVzIDB4NjE2NDZkNjk2ZSAvLyAiYWRtaW4iCmFwcF9nbG9iYWxfZ2V0X2V4CnN0b3JlIDMyCnN0b3JlIDMxCmZyYW1lX2RpZyAtMwp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAic21hX2lkIgphcHBfZ2xvYmFsX2dldAo9PQovLyBQbGF0Zm9ybSBmZWUgdHhuIG1pc21hdGNoCmFzc2VydApmcmFtZV9kaWcgLTEKZ3R4bnMgQW1vdW50CmJ5dGVjXzEgLy8gInNtYV9pZCIKYXBwX2dsb2JhbF9nZXQKcHVzaGludCA1MDAgLy8gNTAwCmNhbGxzdWIgaW5uZXJ1c2Rpbm1pY3JvYWxnb18wCj09Ci8vIFBsYXRmb3JtIGZlZSB0eG4gbWlzbWF0Y2gKYXNzZXJ0CmZyYW1lX2RpZyAtMQpndHhucyBSZWNlaXZlcgpsb2FkIDMxCj09Ci8vIFBsYXRmb3JtIGZlZSB0eG4gbWlzbWF0Y2gKYXNzZXJ0CmZyYW1lX2RpZyAtNQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIC04CnR4bmFzIEFzc2V0cwpmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIC0zCnR4bmFzIEFwcGxpY2F0aW9ucwpmcmFtZV9idXJ5IDMKYnl0ZWMgNiAvLyAic21pX2FwcHJvdmFsIgpib3hfZ2V0CnN0b3JlIDM0CnN0b3JlIDMzCmxvYWQgMzQKYXNzZXJ0CmxvYWQgMzMKZnJhbWVfYnVyeSA0CmJ5dGVjIDcgLy8gInNtaV9jbGVhciIKYm94X2dldApzdG9yZSAzNgpzdG9yZSAzNQpsb2FkIDM2CmFzc2VydApsb2FkIDM1CmZyYW1lX2J1cnkgNQppdHhuX2JlZ2luCmludGNfMiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KaW50Y18wIC8vIE5vT3AKaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KZnJhbWVfZGlnIDQKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KZnJhbWVfZGlnIDUKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQppbnRjXzEgLy8gMQppdHhuX2ZpZWxkIEV4dHJhUHJvZ3JhbVBhZ2VzCnB1c2hpbnQgOCAvLyA4Cml0eG5fZmllbGQgR2xvYmFsTnVtVWludApwdXNoaW50IDQgLy8gNAppdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIExvY2FsTnVtVWludAppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIExvY2FsTnVtQnl0ZVNsaWNlCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCnB1c2hieXRlcyAweGE2NTkyYWY4IC8vIDB4YTY1OTJhZjgKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKZnJhbWVfZGlnIC0xMgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgMQppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTExCml0b2IKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKZnJhbWVfZGlnIC0xMAppdG9iCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAtOQppdG9iCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAyCml0b2IKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKZnJhbWVfZGlnIDMKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTcKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKZnJhbWVfZGlnIC02Cml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCml0eG5fc3VibWl0Cml0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKZnJhbWVfYnVyeSA2CmZyYW1lX2RpZyA2CmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgNgphcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCnN0b3JlIDM4CnN0b3JlIDM3Cml0eG5fYmVnaW4KZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKaXR4bl9maWVsZCBTZW5kZXIKaW50Y18xIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmxvYWQgMzcKaXR4bl9maWVsZCBSZWNlaXZlcgpsb2FkIDM3Cm1pbl9iYWxhbmNlCml0eG5fZmllbGQgQW1vdW50CmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CmZyYW1lX2RpZyAtNQpib3hfbGVuCnN0b3JlIDQwCnN0b3JlIDM5CmxvYWQgNDAKYm56IGNyZWF0ZXNtaV8xM19sMgppbnRjXzAgLy8gMApyZXR1cm4KY3JlYXRlc21pXzEzX2wyOgpmcmFtZV9kaWcgLTUKYm94X2dldApzdG9yZSA0MgpzdG9yZSA0MQpsb2FkIDQyCmFzc2VydApsb2FkIDQxCmJ0b2kKZnJhbWVfYnVyeSA3CmZyYW1lX2RpZyA3CmZyYW1lX2RpZyAtNAp0eG5hcyBBcHBsaWNhdGlvbnMKPT0KLy8gTG9ja2VyIElEIG1pc21hdGNoCmFzc2VydApmcmFtZV9kaWcgLTQKdHhuYXMgQXBwbGljYXRpb25zCmFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKc3RvcmUgNDQKc3RvcmUgNDMKZnJhbWVfZGlnIDIKaW50Y18wIC8vIDAKPgpibnogY3JlYXRlc21pXzEzX2w2CmludGNfMyAvLyAxMDAwMDAKc3RvcmUgMzAKY3JlYXRlc21pXzEzX2w0OgppdHhuX2JlZ2luCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgU2VuZGVyCmludGNfMSAvLyBwYXkKaXR4bl9maWVsZCBUeXBlRW51bQpsb2FkIDQzCml0eG5fZmllbGQgUmVjZWl2ZXIKbG9hZCAzMAppdHhuX2ZpZWxkIEFtb3VudAppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdAppdHhuX2JlZ2luCmludGNfMiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC00CnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKZnJhbWVfZGlnIDYKaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKYnl0ZWMgOCAvLyAib3B0X2luX3NtaShhcHBsaWNhdGlvbil2b2lkIgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpieXRlY18yIC8vIDB4MDEKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKaXR4bl9zdWJtaXQKZnJhbWVfZGlnIC04CnR4bmFzIEFzc2V0cwppbnRjXzAgLy8gMAohPQpieiBjcmVhdGVzbWlfMTNfbDcKaXR4bl9iZWdpbgppbnRjXzIgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtNAp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmZyYW1lX2RpZyAtOAp0eG5hcyBBc3NldHMKaXR4bl9maWVsZCBBc3NldHMKYnl0ZWMgOSAvLyAib3B0X2luX2NvaW4oYXNzZXQpdm9pZCIKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKYnl0ZWMgMTAgLy8gMHgwMAppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwppdHhuX3N1Ym1pdApiIGNyZWF0ZXNtaV8xM19sNwpjcmVhdGVzbWlfMTNfbDY6CmludGMgNSAvLyAyMDAwMDAKc3RvcmUgMzAKYiBjcmVhdGVzbWlfMTNfbDQKY3JlYXRlc21pXzEzX2w3OgpyZXRzdWIKCi8vIHRyYW5zZmVyX3NtaQp0cmFuc2ZlcnNtaV8xNDoKcHJvdG8gNCAwCmludGNfMCAvLyAwCmR1cG4gNApmcmFtZV9kaWcgLTEKZ3R4bnMgU2VuZGVyCnR4biBTZW5kZXIKPT0KLy8gU2VuZGVyIG1pc21hdGNoCmFzc2VydAp0eG4gU2VuZGVyCmJveF9nZXQKc3RvcmUgNDcKc3RvcmUgNDYKbG9hZCA0Nwphc3NlcnQKbG9hZCA0NgpidG9pCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMApmcmFtZV9kaWcgLTMKdHhuYXMgQXBwbGljYXRpb25zCj09Ci8vIE9sZCBsb2NrZXIgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCBzdG9yZWQgcmVmZXJlbmNlCmFzc2VydApmcmFtZV9kaWcgLTQKdHhuYXMgQXBwbGljYXRpb25zCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpwdXNoYnl0ZXMgMHg2MzZmNjk2ZTVmNjk2NCAvLyAiY29pbl9pZCIKYXBwX2dsb2JhbF9nZXRfZXgKc3RvcmUgNDkKc3RvcmUgNDgKbG9hZCA0OAppbnRjXzAgLy8gMAo+CmJueiB0cmFuc2ZlcnNtaV8xNF9sNwppbnRjIDUgLy8gMjAwMDAwCnRyYW5zZmVyc21pXzE0X2wyOgpmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIC0yCmJveF9sZW4Kc3RvcmUgNTEKc3RvcmUgNTAKbG9hZCA1MQpibnogdHJhbnNmZXJzbWlfMTRfbDYKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAyCmNhbGxzdWIgaW5uZXJjcmVhdGVzbWxfMQpzdG9yZSA0NQp0cmFuc2ZlcnNtaV8xNF9sNDoKbG9hZCA0NQpmcmFtZV9idXJ5IDQKaXR4bl9iZWdpbgppbnRjXzIgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAwCml0eG5fZmllbGQgQXBwbGljYXRpb25JRApmcmFtZV9kaWcgLTQKdHhuYXMgQXBwbGljYXRpb25zCml0eG5fZmllbGQgQXBwbGljYXRpb25zCmJ5dGVjIDExIC8vICJvcHRfb3V0X3NtaShhcHBsaWNhdGlvbil2b2lkIgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpieXRlY18yIC8vIDB4MDEKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKaXR4bl9zdWJtaXQKaXR4bl9iZWdpbgppbnRjXzIgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtNAp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECnB1c2hieXRlcyAweGM4NmZkYjAxIC8vICJ1cGRhdGVfbWFuYWdlcihhZGRyZXNzKXZvaWQiCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwppdHhuX3N1Ym1pdAppdHhuX2JlZ2luCmludGNfMiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIDQKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmZyYW1lX2RpZyAxCml0eG5fZmllbGQgQXBwbGljYXRpb25zCmJ5dGVjIDggLy8gIm9wdF9pbl9zbWkoYXBwbGljYXRpb24pdm9pZCIKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKYnl0ZWNfMiAvLyAweDAxCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCml0eG5fc3VibWl0CmxvYWQgNDgKaW50Y18wIC8vIDAKIT0KYnogdHJhbnNmZXJzbWlfMTRfbDgKaXR4bl9iZWdpbgppbnRjXzIgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyA0Cml0eG5fZmllbGQgQXBwbGljYXRpb25JRApsb2FkIDQ4Cml0eG5fZmllbGQgQXNzZXRzCmJ5dGVjIDkgLy8gIm9wdF9pbl9jb2luKGFzc2V0KXZvaWQiCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmJ5dGVjIDEwIC8vIDB4MDAKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKaXR4bl9zdWJtaXQKYiB0cmFuc2ZlcnNtaV8xNF9sOAp0cmFuc2ZlcnNtaV8xNF9sNjoKZnJhbWVfZGlnIC0yCmJveF9nZXQKc3RvcmUgNTQKc3RvcmUgNTIKbG9hZCA1NAphc3NlcnQKbG9hZCA1MgpidG9pCmZyYW1lX2J1cnkgMwpmcmFtZV9kaWcgMwpzdG9yZSA0NQpiIHRyYW5zZmVyc21pXzE0X2w0CnRyYW5zZmVyc21pXzE0X2w3OgpwdXNoaW50IDMwMDAwMCAvLyAzMDAwMDAKYiB0cmFuc2ZlcnNtaV8xNF9sMgp0cmFuc2ZlcnNtaV8xNF9sODoKcmV0c3ViCgovLyBkZWxldGVfc21pCmRlbGV0ZXNtaV8xNToKcHJvdG8gMiAwCmludGNfMCAvLyAwCnR4biBTZW5kZXIKYm94X2xlbgpzdG9yZSA1OApzdG9yZSA1NQpsb2FkIDU4Ci8vIFNlbmRlcidzIGxvY2tlciBub3QgZm91bmQKYXNzZXJ0CnR4biBTZW5kZXIKYm94X2dldApzdG9yZSA2MQpzdG9yZSA1OQpsb2FkIDYxCmFzc2VydApsb2FkIDU5CmJ0b2kKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKPT0KLy8gTG9ja2VyIElEIG1pc21hdGNoCmFzc2VydAppdHhuX2JlZ2luCmludGNfMiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwpieXRlYyAxMSAvLyAib3B0X291dF9zbWkoYXBwbGljYXRpb24pdm9pZCIKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKYnl0ZWNfMiAvLyAweDAxCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCml0eG5fc3VibWl0Cml0eG5fYmVnaW4KaW50Y18yIC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCml0eG5fZmllbGQgQXBwbGljYXRpb25JRApwdXNoYnl0ZXMgMHgyNDM3OGQzYyAvLyAiZGVsZXRlKCl2b2lkIgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KaXR4bl9zdWJtaXQKcmV0c3ViCgovLyBjcmVhdGVfY2FzdGVyCmNyZWF0ZWNhc3Rlcl8xNjoKcHJvdG8gMCAwCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKY2FsbHN1YiBjcmVhdGVfMwpyZXRzdWIKCi8vIGdldF92ZXJzaW9uX2Nhc3RlcgpnZXR2ZXJzaW9uY2FzdGVyXzE3Ogpwcm90byAwIDAKYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGdldHZlcnNpb25fNQpmcmFtZV9idXJ5IDAKYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCmNvbmNhdApsb2cKcmV0c3ViCgovLyB1cGRhdGVfc21sX3ByZWNvbXBpbGVfY2FzdGVyCnVwZGF0ZXNtbHByZWNvbXBpbGVjYXN0ZXJfMTg6CnByb3RvIDAgMApieXRlY18wIC8vICIiCmR1cAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMApmcmFtZV9kaWcgMQpjYWxsc3ViIHVwZGF0ZXNtbHByZWNvbXBpbGVfNgpyZXRzdWIKCi8vIHVwZGF0ZV9zbWlfcHJlY29tcGlsZV9jYXN0ZXIKdXBkYXRlc21pcHJlY29tcGlsZWNhc3Rlcl8xOToKcHJvdG8gMCAwCmJ5dGVjXzAgLy8gIiIKZHVwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAwCmZyYW1lX2RpZyAxCmNhbGxzdWIgdXBkYXRlc21pcHJlY29tcGlsZV83CnJldHN1YgoKLy8gYXBwZW5kX2V4dHJhX2FwcHJvdmFsX2NodW5rX2Nhc3RlcgphcHBlbmRleHRyYWFwcHJvdmFsY2h1bmtjYXN0ZXJfMjA6CnByb3RvIDAgMApieXRlY18wIC8vICIiCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmNhbGxzdWIgYXBwZW5kZXh0cmFhcHByb3ZhbGNodW5rXzgKcmV0c3ViCgovLyB1cGRhdGVfc21sX2Nhc3Rlcgp1cGRhdGVzbWxjYXN0ZXJfMjE6CnByb3RvIDAgMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIDEKY2FsbHN1YiB1cGRhdGVzbWxfOQpyZXRzdWIKCi8vIHVwZGF0ZV9zbWlfY2FzdGVyCnVwZGF0ZXNtaWNhc3Rlcl8yMjoKcHJvdG8gMCAwCmJ5dGVjXzAgLy8gIiIKaW50Y18wIC8vIDAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpmcmFtZV9idXJ5IDAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMApmcmFtZV9kaWcgMQpjYWxsc3ViIHVwZGF0ZXNtaV8xMApyZXRzdWIKCi8vIGdldF9zbWxfY2FzdGVyCmdldHNtbGNhc3Rlcl8yMzoKcHJvdG8gMCAwCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIiIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKY2FsbHN1YiBnZXRzbWxfMTEKZnJhbWVfYnVyeSAwCmJ5dGVjXzMgLy8gMHgxNTFmN2M3NQpmcmFtZV9kaWcgMAppdG9iCmNvbmNhdApsb2cKcmV0c3ViCgovLyBjcmVhdGVfc21sX2Nhc3RlcgpjcmVhdGVzbWxjYXN0ZXJfMjQ6CnByb3RvIDAgMAppbnRjXzAgLy8gMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAxCnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAyCmd0eG5zIFR5cGVFbnVtCmludGNfMSAvLyBwYXkKPT0KYXNzZXJ0CmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmNhbGxzdWIgY3JlYXRlc21sXzEyCmZyYW1lX2J1cnkgMApieXRlY18zIC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKaXRvYgpjb25jYXQKbG9nCnJldHN1YgoKLy8gY3JlYXRlX3NtaV9jYXN0ZXIKY3JlYXRlc21pY2FzdGVyXzI1Ogpwcm90byAwIDAKaW50Y18wIC8vIDAKYnl0ZWNfMCAvLyAiIgppbnRjXzAgLy8gMApkdXBuIDMKYnl0ZWNfMCAvLyAiIgpkdXBuIDIKaW50Y18wIC8vIDAKZHVwbiAzCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAxCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKYnRvaQpmcmFtZV9idXJ5IDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwpidG9pCmZyYW1lX2J1cnkgMwp0eG5hIEFwcGxpY2F0aW9uQXJncyA0CmJ0b2kKZnJhbWVfYnVyeSA0CnR4bmEgQXBwbGljYXRpb25BcmdzIDUKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgpmcmFtZV9idXJ5IDYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwpmcmFtZV9idXJ5IDcKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOApmcmFtZV9idXJ5IDgKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOQppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgOQp0eG5hIEFwcGxpY2F0aW9uQXJncyAxMAppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMTAKdHhuIEdyb3VwSW5kZXgKcHVzaGludCAyIC8vIDIKLQpmcmFtZV9idXJ5IDExCmZyYW1lX2RpZyAxMQpndHhucyBUeXBlRW51bQppbnRjXzEgLy8gcGF5Cj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmZyYW1lX2J1cnkgMTIKZnJhbWVfZGlnIDEyCmd0eG5zIFR5cGVFbnVtCmludGNfMSAvLyBwYXkKPT0KYXNzZXJ0CmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmZyYW1lX2RpZyAzCmZyYW1lX2RpZyA0CmZyYW1lX2RpZyA1CmZyYW1lX2RpZyA2CmZyYW1lX2RpZyA3CmZyYW1lX2RpZyA4CmZyYW1lX2RpZyA5CmZyYW1lX2RpZyAxMApmcmFtZV9kaWcgMTEKZnJhbWVfZGlnIDEyCmNhbGxzdWIgY3JlYXRlc21pXzEzCmZyYW1lX2J1cnkgMApieXRlY18zIC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKaXRvYgpjb25jYXQKbG9nCnJldHN1YgoKLy8gdHJhbnNmZXJfc21pX2Nhc3Rlcgp0cmFuc2ZlcnNtaWNhc3Rlcl8yNjoKcHJvdG8gMCAwCmludGNfMCAvLyAwCmR1cApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmZyYW1lX2J1cnkgMgp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmZyYW1lX2J1cnkgMwpmcmFtZV9kaWcgMwpndHhucyBUeXBlRW51bQppbnRjXzEgLy8gcGF5Cj09CmFzc2VydApmcmFtZV9kaWcgMApmcmFtZV9kaWcgMQpmcmFtZV9kaWcgMgpmcmFtZV9kaWcgMwpjYWxsc3ViIHRyYW5zZmVyc21pXzE0CnJldHN1YgoKLy8gZGVsZXRlX3NtaV9jYXN0ZXIKZGVsZXRlc21pY2FzdGVyXzI3Ogpwcm90byAwIDAKaW50Y18wIC8vIDAKZHVwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMApmcmFtZV9kaWcgMQpjYWxsc3ViIGRlbGV0ZXNtaV8xNQpyZXRzdWI=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu" + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 1 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": { + "sma_id": { + "type": "uint64", + "key": "sma_id", + "descr": "ID of Subtopia Price Oracle contract" + } + }, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "SMR", + "methods": [ + { + "name": "create", + "args": [ + { + "type": "uint64", + "name": "sma_id" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "get_version", + "args": [], + "returns": { + "type": "string" + } + }, + { + "name": "update_sml_precompile", + "args": [ + { + "type": "byte[]", + "name": "approval" + }, + { + "type": "byte[]", + "name": "clear" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "update_smi_precompile", + "args": [ + { + "type": "byte[]", + "name": "approval" + }, + { + "type": "byte[]", + "name": "clear" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "append_extra_approval_chunk", + "args": [ + { + "type": "byte[]", + "name": "approval" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "update_sml", + "args": [ + { + "type": "address", + "name": "manager" + }, + { + "type": "application", + "name": "locker" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "update_smi", + "args": [ + { + "type": "address", + "name": "manager" + }, + { + "type": "application", + "name": "smi" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "get_sml", + "args": [ + { + "type": "address", + "name": "manager" + } + ], + "returns": { + "type": "uint64" + } + }, + { + "name": "create_sml", + "args": [ + { + "type": "address", + "name": "manager" + }, + { + "type": "pay", + "name": "fee_txn" + } + ], + "returns": { + "type": "uint64" + } + }, + { + "name": "create_smi", + "args": [ + { + "type": "string", + "name": "name" + }, + { + "type": "uint64", + "name": "sub_type" + }, + { + "type": "uint64", + "name": "price" + }, + { + "type": "uint64", + "name": "max_subs" + }, + { + "type": "asset", + "name": "coin" + }, + { + "type": "string", + "name": "unit_name" + }, + { + "type": "string", + "name": "image_url" + }, + { + "type": "address", + "name": "manager" + }, + { + "type": "application", + "name": "locker" + }, + { + "type": "application", + "name": "sma" + }, + { + "type": "pay", + "name": "fee_txn" + }, + { + "type": "pay", + "name": "platform_fee_txn" + } + ], + "returns": { + "type": "uint64" + } + }, + { + "name": "transfer_smi", + "args": [ + { + "type": "application", + "name": "smi" + }, + { + "type": "application", + "name": "old_locker" + }, + { + "type": "address", + "name": "new_manager" + }, + { + "type": "pay", + "name": "transfer_fee_txn" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "delete_smi", + "args": [ + { + "type": "application", + "name": "smi" + }, + { + "type": "application", + "name": "locker" + } + ], + "returns": { + "type": "void" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "update_application": "CALL" + } +} + +/** + * Defines an onCompletionAction of 'no_op' + */ +export type OnCompleteNoOp = { onCompleteAction?: 'no_op' | OnApplicationComplete.NoOpOC } +/** + * Defines an onCompletionAction of 'opt_in' + */ +export type OnCompleteOptIn = { onCompleteAction: 'opt_in' | OnApplicationComplete.OptInOC } +/** + * Defines an onCompletionAction of 'close_out' + */ +export type OnCompleteCloseOut = { onCompleteAction: 'close_out' | OnApplicationComplete.CloseOutOC } +/** + * Defines an onCompletionAction of 'delete_application' + */ +export type OnCompleteDelApp = { onCompleteAction: 'delete_application' | OnApplicationComplete.DeleteApplicationOC } +/** + * Defines an onCompletionAction of 'update_application' + */ +export type OnCompleteUpdApp = { onCompleteAction: 'update_application' | OnApplicationComplete.UpdateApplicationOC } +/** + * A state record containing a single unsigned integer + */ +export type IntegerState = { + /** + * Gets the state value as a BigInt + */ + asBigInt(): bigint + /** + * Gets the state value as a number. + */ + asNumber(): number +} +/** + * A state record containing binary data + */ +export type BinaryState = { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array + /** + * Gets the state value as a string + */ + asString(): string +} + +/** + * Defines the types of available calls and state of the Smr smart contract. + */ +export type Smr = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'create(uint64)void' | 'create', { + argsObj: { + sma_id: bigint | number + } + argsTuple: [sma_id: bigint | number] + returns: void + }> + & Record<'get_version()string' | 'get_version', { + argsObj: { + } + argsTuple: [] + returns: string + }> + & Record<'update_sml_precompile(byte[],byte[])void' | 'update_sml_precompile', { + argsObj: { + approval: Uint8Array + clear: Uint8Array + } + argsTuple: [approval: Uint8Array, clear: Uint8Array] + returns: void + }> + & Record<'update_smi_precompile(byte[],byte[])void' | 'update_smi_precompile', { + argsObj: { + approval: Uint8Array + clear: Uint8Array + } + argsTuple: [approval: Uint8Array, clear: Uint8Array] + returns: void + }> + & Record<'append_extra_approval_chunk(byte[])void' | 'append_extra_approval_chunk', { + argsObj: { + approval: Uint8Array + } + argsTuple: [approval: Uint8Array] + returns: void + }> + & Record<'update_sml(address,application)void' | 'update_sml', { + argsObj: { + manager: string + locker: number | bigint + } + argsTuple: [manager: string, locker: number | bigint] + returns: void + }> + & Record<'update_smi(address,application)void' | 'update_smi', { + argsObj: { + manager: string + smi: number | bigint + } + argsTuple: [manager: string, smi: number | bigint] + returns: void + }> + & Record<'get_sml(address)uint64' | 'get_sml', { + argsObj: { + manager: string + } + argsTuple: [manager: string] + returns: bigint + }> + & Record<'create_sml(address,pay)uint64' | 'create_sml', { + argsObj: { + manager: string + fee_txn: TransactionToSign | Transaction | Promise + } + argsTuple: [manager: string, fee_txn: TransactionToSign | Transaction | Promise] + returns: bigint + }> + & Record<'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64' | 'create_smi', { + argsObj: { + name: string + sub_type: bigint | number + price: bigint | number + max_subs: bigint | number + coin: number | bigint + unit_name: string + image_url: string + manager: string + locker: number | bigint + sma: number | bigint + fee_txn: TransactionToSign | Transaction | Promise + platform_fee_txn: TransactionToSign | Transaction | Promise + } + argsTuple: [name: string, sub_type: bigint | number, price: bigint | number, max_subs: bigint | number, coin: number | bigint, unit_name: string, image_url: string, manager: string, locker: number | bigint, sma: number | bigint, fee_txn: TransactionToSign | Transaction | Promise, platform_fee_txn: TransactionToSign | Transaction | Promise] + returns: bigint + }> + & Record<'transfer_smi(application,application,address,pay)void' | 'transfer_smi', { + argsObj: { + smi: number | bigint + old_locker: number | bigint + new_manager: string + transfer_fee_txn: TransactionToSign | Transaction | Promise + } + argsTuple: [smi: number | bigint, old_locker: number | bigint, new_manager: string, transfer_fee_txn: TransactionToSign | Transaction | Promise] + returns: void + }> + & Record<'delete_smi(application,application)void' | 'delete_smi', { + argsObj: { + smi: number | bigint + locker: number | bigint + } + argsTuple: [smi: number | bigint, locker: number | bigint] + returns: void + }> + /** + * Defines the shape of the global and local state of the application. + */ + state: { + global: { + /** + * ID of Subtopia Price Oracle contract + */ + 'sma_id'?: IntegerState + } + } +} +/** + * Defines the possible abi call signatures + */ +export type SmrSig = keyof Smr['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a bare call is made + */ +export type TypedCallParams = { + method: TSignature + methodArgs: TSignature extends undefined ? undefined : Array +} & AppClientCallCoreParams & CoreAppCallArgs +/** + * Defines the arguments required for a bare call + */ +export type BareCallArgs = Omit +/** + * Maps a method signature from the Smr smart contract to the method's arguments in either tuple of struct form + */ +export type MethodArgs = Smr['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the Smr smart contract to the method's return type + */ +export type MethodReturn = Smr['methods'][TSignature]['returns'] + +/** + * A factory for available 'create' calls + */ +export type SmrCreateCalls = (typeof SmrCallFactory)['create'] +/** + * Defines supported create methods for this smart contract + */ +export type SmrCreateCallParams = + | (TypedCallParams<'create(uint64)void'> & (OnCompleteNoOp)) +/** + * A factory for available 'update' calls + */ +export type SmrUpdateCalls = (typeof SmrCallFactory)['update'] +/** + * Defines supported update methods for this smart contract + */ +export type SmrUpdateCallParams = + | TypedCallParams +/** + * Defines arguments required for the deploy method. + */ +export type SmrDeployArgs = { + deployTimeParams?: TealTemplateParams + /** + * A delegate which takes a create call factory and returns the create call params for this smart contract + */ + createCall?: (callFactory: SmrCreateCalls) => SmrCreateCallParams + /** + * A delegate which takes a update call factory and returns the update call params for this smart contract + */ + updateCall?: (callFactory: SmrUpdateCalls) => SmrUpdateCallParams +} + + +/** + * Exposes methods for constructing all available smart contract calls + */ +export abstract class SmrCallFactory { + /** + * Gets available create call factories + */ + static get create() { + return { + /** + * Constructs a create call for the SMR smart contract using the create(uint64)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + create(args: MethodArgs<'create(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams & (OnCompleteNoOp) = {}) { + return { + method: 'create(uint64)void' as const, + methodArgs: Array.isArray(args) ? args : [args.sma_id], + ...params, + } + }, + } + } + + /** + * Gets available update call factories + */ + static get update() { + return { + /** + * Constructs an update call for the SMR smart contract using a bare call + * + * @param params Any parameters for the call + * @returns A TypedCallParams object for the call + */ + bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams = {}) { + return { + method: undefined, + methodArgs: undefined, + ...params, + } + }, + } + } + + /** + * Constructs a no op call for the get_version()string ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'get_version()string' as const, + methodArgs: Array.isArray(args) ? args : [], + ...params, + } + } + /** + * Constructs a no op call for the update_sml_precompile(byte[],byte[])void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static updateSmlPrecompile(args: MethodArgs<'update_sml_precompile(byte[],byte[])void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'update_sml_precompile(byte[],byte[])void' as const, + methodArgs: Array.isArray(args) ? args : [args.approval, args.clear], + ...params, + } + } + /** + * Constructs a no op call for the update_smi_precompile(byte[],byte[])void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static updateSmiPrecompile(args: MethodArgs<'update_smi_precompile(byte[],byte[])void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'update_smi_precompile(byte[],byte[])void' as const, + methodArgs: Array.isArray(args) ? args : [args.approval, args.clear], + ...params, + } + } + /** + * Constructs a no op call for the append_extra_approval_chunk(byte[])void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static appendExtraApprovalChunk(args: MethodArgs<'append_extra_approval_chunk(byte[])void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'append_extra_approval_chunk(byte[])void' as const, + methodArgs: Array.isArray(args) ? args : [args.approval], + ...params, + } + } + /** + * Constructs a no op call for the update_sml(address,application)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static updateSml(args: MethodArgs<'update_sml(address,application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'update_sml(address,application)void' as const, + methodArgs: Array.isArray(args) ? args : [args.manager, args.locker], + ...params, + } + } + /** + * Constructs a no op call for the update_smi(address,application)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static updateSmi(args: MethodArgs<'update_smi(address,application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'update_smi(address,application)void' as const, + methodArgs: Array.isArray(args) ? args : [args.manager, args.smi], + ...params, + } + } + /** + * Constructs a no op call for the get_sml(address)uint64 ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static getSml(args: MethodArgs<'get_sml(address)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'get_sml(address)uint64' as const, + methodArgs: Array.isArray(args) ? args : [args.manager], + ...params, + } + } + /** + * Constructs a no op call for the create_sml(address,pay)uint64 ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static createSml(args: MethodArgs<'create_sml(address,pay)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'create_sml(address,pay)uint64' as const, + methodArgs: Array.isArray(args) ? args : [args.manager, args.fee_txn], + ...params, + } + } + /** + * Constructs a no op call for the create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64 ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static createSmi(args: MethodArgs<'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64' as const, + methodArgs: Array.isArray(args) ? args : [args.name, args.sub_type, args.price, args.max_subs, args.coin, args.unit_name, args.image_url, args.manager, args.locker, args.sma, args.fee_txn, args.platform_fee_txn], + ...params, + } + } + /** + * Constructs a no op call for the transfer_smi(application,application,address,pay)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static transferSmi(args: MethodArgs<'transfer_smi(application,application,address,pay)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'transfer_smi(application,application,address,pay)void' as const, + methodArgs: Array.isArray(args) ? args : [args.smi, args.old_locker, args.new_manager, args.transfer_fee_txn], + ...params, + } + } + /** + * Constructs a no op call for the delete_smi(application,application)void ABI method + * + * @param args Any args for the contract call + * @param params Any additional parameters for the call + * @returns A TypedCallParams object for the call + */ + static deleteSmi(args: MethodArgs<'delete_smi(application,application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { + return { + method: 'delete_smi(application,application)void' as const, + methodArgs: Array.isArray(args) ? args : [args.smi, args.locker], + ...params, + } + } +} + +/** + * A client to make calls to the SMR smart contract + */ +export class SmrClient { + /** + * The underlying `ApplicationClient` for when you want to have more flexibility + */ + public readonly appClient: ApplicationClient + + private readonly sender: SendTransactionFrom | undefined + + /** + * Creates a new instance of `SmrClient` + * + * @param appDetails appDetails The details to identify the app to deploy + * @param algod An algod client instance + */ + constructor(appDetails: AppDetails, private algod: Algodv2) { + this.sender = appDetails.sender + this.appClient = algokit.getAppClient({ + ...appDetails, + app: APP_SPEC + }, algod) + } + + /** + * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type + * + * @param result The AppCallTransactionResult to be mapped + * @param returnValueFormatter An optional delegate to format the return value if required + * @returns The smart contract response with an updated return value + */ + protected mapReturnValue(result: AppCallTransactionResult, returnValueFormatter?: (value: any) => TReturn): AppCallTransactionResultOfType { + if(result.return?.decodeError) { + throw result.return.decodeError + } + const returnValue = result.return?.returnValue !== undefined && returnValueFormatter !== undefined + ? returnValueFormatter(result.return.returnValue) + : result.return?.returnValue as TReturn | undefined + return { ...result, return: returnValue } + } + + /** + * Calls the ABI method with the matching signature using an onCompletion code of NO_OP + * + * @param typedCallParams An object containing the method signature, args, and any other relevant parameters + * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type + * @returns The result of the smart contract call + */ + public async call(typedCallParams: TypedCallParams, returnValueFormatter?: (value: any) => MethodReturn) { + return this.mapReturnValue>(await this.appClient.call(typedCallParams), returnValueFormatter) + } + + /** + * Idempotently deploys the SMR smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public deploy(params: SmrDeployArgs & AppClientDeployCoreParams = {}): ReturnType { + const createArgs = params.createCall?.(SmrCallFactory.create) + const updateArgs = params.updateCall?.(SmrCallFactory.update) + return this.appClient.deploy({ + ...params, + updateArgs, + createArgs, + createOnCompleteAction: createArgs?.onCompleteAction, + }) + } + + /** + * Gets available create methods + */ + public get create() { + const $this = this + return { + /** + * Creates a new instance of the SMR smart contract using the create(uint64)void ABI method. + * + * @param args The arguments for the smart contract call + * @param params Any additional parameters for the call + * @returns The create result + */ + async create(args: MethodArgs<'create(uint64)void'>, params: AppClientCallCoreParams & AppClientCompilationParams & (OnCompleteNoOp) = {}): Promise>> { + return $this.mapReturnValue(await $this.appClient.create(SmrCallFactory.create.create(args, params))) + }, + } + } + + /** + * Gets available update methods + */ + public get update() { + const $this = this + return { + /** + * Updates an existing instance of the SMR smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The update result + */ + bare(args: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs = {}): Promise> { + return $this.appClient.update(args) as unknown as Promise> + }, + } + } + + /** + * Makes a clear_state call to an existing instance of the SMR smart contract. + * + * @param args The arguments for the bare call + * @returns The clear_state result + */ + public clearState(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.appClient.clearState(args) + } + + /** + * Calls the get_version()string ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmrCallFactory.getVersion(args, params)) + } + + /** + * Calls the update_sml_precompile(byte[],byte[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public updateSmlPrecompile(args: MethodArgs<'update_sml_precompile(byte[],byte[])void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmrCallFactory.updateSmlPrecompile(args, params)) + } + + /** + * Calls the update_smi_precompile(byte[],byte[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public updateSmiPrecompile(args: MethodArgs<'update_smi_precompile(byte[],byte[])void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmrCallFactory.updateSmiPrecompile(args, params)) + } + + /** + * Calls the append_extra_approval_chunk(byte[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public appendExtraApprovalChunk(args: MethodArgs<'append_extra_approval_chunk(byte[])void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmrCallFactory.appendExtraApprovalChunk(args, params)) + } + + /** + * Calls the update_sml(address,application)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public updateSml(args: MethodArgs<'update_sml(address,application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmrCallFactory.updateSml(args, params)) + } + + /** + * Calls the update_smi(address,application)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public updateSmi(args: MethodArgs<'update_smi(address,application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmrCallFactory.updateSmi(args, params)) + } + + /** + * Calls the get_sml(address)uint64 ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public getSml(args: MethodArgs<'get_sml(address)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmrCallFactory.getSml(args, params)) + } + + /** + * Calls the create_sml(address,pay)uint64 ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public createSml(args: MethodArgs<'create_sml(address,pay)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmrCallFactory.createSml(args, params)) + } + + /** + * Calls the create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64 ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public createSmi(args: MethodArgs<'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmrCallFactory.createSmi(args, params)) + } + + /** + * Calls the transfer_smi(application,application,address,pay)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public transferSmi(args: MethodArgs<'transfer_smi(application,application,address,pay)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmrCallFactory.transferSmi(args, params)) + } + + /** + * Calls the delete_smi(application,application)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The result of the call + */ + public deleteSmi(args: MethodArgs<'delete_smi(application,application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { + return this.call(SmrCallFactory.deleteSmi(args, params)) + } + + /** + * Extracts a binary state value out of an AppState dictionary + * + * @param state The state dictionary containing the state value + * @param key The key of the state value + * @returns A BinaryState instance containing the state value, or undefined if the key was not found + */ + private static getBinaryState(state: AppState, key: string): BinaryState | undefined { + const value = state[key] + if (!value) return undefined + if (!('valueRaw' in value)) + throw new Error(`Failed to parse state value for ${key}; received an int when expected a byte array`) + return { + asString(): string { + return value.value + }, + asByteArray(): Uint8Array { + return value.valueRaw + } + } + } + + /** + * Extracts a integer state value out of an AppState dictionary + * + * @param state The state dictionary containing the state value + * @param key The key of the state value + * @returns An IntegerState instance containing the state value, or undefined if the key was not found + */ + private static getIntegerState(state: AppState, key: string): IntegerState | undefined { + const value = state[key] + if (!value) return undefined + if ('valueRaw' in value) + throw new Error(`Failed to parse state value for ${key}; received a byte array when expected a number`) + return { + asBigInt() { + return typeof value.value === 'bigint' ? value.value : BigInt(value.value) + }, + asNumber(): number { + return typeof value.value === 'bigint' ? Number(value.value) : value.value + }, + } + } + + /** + * Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value + */ + public async getGlobalState(): Promise { + const state = await this.appClient.getGlobalState() + return { + get sma_id() { + return SmrClient.getIntegerState(state, 'sma_id') + }, + } + } + + public compose(): SmrComposer { + const client = this + const atc = new AtomicTransactionComposer() + let promiseChain:Promise = Promise.resolve() + const resultMappers: Array any)> = [] + return { + getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.getVersion(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + updateSmlPrecompile(args: MethodArgs<'update_sml_precompile(byte[],byte[])void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.updateSmlPrecompile(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + updateSmiPrecompile(args: MethodArgs<'update_smi_precompile(byte[],byte[])void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.updateSmiPrecompile(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + appendExtraApprovalChunk(args: MethodArgs<'append_extra_approval_chunk(byte[])void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.appendExtraApprovalChunk(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + updateSml(args: MethodArgs<'update_sml(address,application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.updateSml(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + updateSmi(args: MethodArgs<'update_smi(address,application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.updateSmi(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + getSml(args: MethodArgs<'get_sml(address)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.getSml(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + createSml(args: MethodArgs<'create_sml(address,pay)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.createSml(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + createSmi(args: MethodArgs<'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.createSmi(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + transferSmi(args: MethodArgs<'transfer_smi(application,application,address,pay)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.transferSmi(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + deleteSmi(args: MethodArgs<'delete_smi(application,application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.deleteSmi(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + get update() { + const $this = this + return { + bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.update.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return $this + }, + } + }, + clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { + promiseChain = promiseChain.then(() => client.clearState({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) + resultMappers.push(undefined) + return this + }, + addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom) { + promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit.getTransactionWithSigner(txn, defaultSender ?? client.sender))) + return this + }, + async atc() { + await promiseChain + return atc + }, + async execute() { + await promiseChain + const result = await algokit.sendAtomicTransactionComposer({ atc, sendParams: {} }, client.algod) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue) + } + } + } as unknown as SmrComposer + } +} +export type SmrComposer = { + /** + * Calls the get_version()string ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'get_version()string'>]> + + /** + * Calls the update_sml_precompile(byte[],byte[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + updateSmlPrecompile(args: MethodArgs<'update_sml_precompile(byte[],byte[])void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'update_sml_precompile(byte[],byte[])void'>]> + + /** + * Calls the update_smi_precompile(byte[],byte[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + updateSmiPrecompile(args: MethodArgs<'update_smi_precompile(byte[],byte[])void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'update_smi_precompile(byte[],byte[])void'>]> + + /** + * Calls the append_extra_approval_chunk(byte[])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + appendExtraApprovalChunk(args: MethodArgs<'append_extra_approval_chunk(byte[])void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'append_extra_approval_chunk(byte[])void'>]> + + /** + * Calls the update_sml(address,application)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + updateSml(args: MethodArgs<'update_sml(address,application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'update_sml(address,application)void'>]> + + /** + * Calls the update_smi(address,application)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + updateSmi(args: MethodArgs<'update_smi(address,application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'update_smi(address,application)void'>]> + + /** + * Calls the get_sml(address)uint64 ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getSml(args: MethodArgs<'get_sml(address)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'get_sml(address)uint64'>]> + + /** + * Calls the create_sml(address,pay)uint64 ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + createSml(args: MethodArgs<'create_sml(address,pay)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'create_sml(address,pay)uint64'>]> + + /** + * Calls the create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64 ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + createSmi(args: MethodArgs<'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64'>]> + + /** + * Calls the transfer_smi(application,application,address,pay)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + transferSmi(args: MethodArgs<'transfer_smi(application,application,address,pay)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'transfer_smi(application,application,address,pay)void'>]> + + /** + * Calls the delete_smi(application,application)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + deleteSmi(args: MethodArgs<'delete_smi(application,application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'delete_smi(application,application)void'>]> + + /** + * Gets available update methods + */ + readonly update: { + /** + * Updates an existing instance of the SMR smart contract using a bare call. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs): SmrComposer<[...TReturns, undefined]> + } + + /** + * Makes a clear_state call to an existing instance of the SMR smart contract. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn One of: A TransactionWithSigner object (returned as is), a TransactionToSign object (signer is obtained from the signer property), a Transaction object (signer is extracted from the defaultSender parameter), an async SendTransactionResult returned by one of algokit utils helpers (signer is obtained from the defaultSender parameter) + * @param defaultSender The default sender to be used to obtain a signer where the object provided to the transaction parameter does not include a signer. + */ + addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom): SmrComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + atc(): Promise + /** + * Executes the transaction group and returns an array of results + */ + execute(): Promise> +} +export type SmrComposerResults = { + returns: TReturns + groupId: string + txIds: string[] + transactions: Transaction[] +} diff --git a/src/index.ts b/src/index.ts index 003b8d7..ef91d71 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,10 +12,7 @@ import { optInAsset, optOutAsset, } from "./utils"; -import { - SUBTOPIA_CONTRACTS_VERSION, - SUBTOPIA_REGISTRY_APP_ID, -} from "./constants"; +import { SUBTOPIA_CONTRACTS_VERSION } from "./constants"; import { PriceNormalizationType, SubscriptionType, @@ -60,7 +57,6 @@ export { loadApplicationState, normalizePrice, SUBTOPIA_CONTRACTS_VERSION, - SUBTOPIA_REGISTRY_APP_ID, SMILifecycle, optInAsset, optOutAsset, diff --git a/src/interfaces/index.ts b/src/interfaces/index.ts index 62a559d..4ac8f61 100644 --- a/src/interfaces/index.ts +++ b/src/interfaces/index.ts @@ -11,6 +11,7 @@ import { SubscriptionExpirationType, SubscriptionType, } from "../enums"; +import { TransactionSignerAccount } from "@algorandfoundation/algokit-utils/types/account"; // === Boxes === @@ -105,10 +106,11 @@ export interface SMIDeleteDiscountParams { // === SMR === export interface SMRAddInfrastructureParams extends SMIInputParams { - creator: User; + creator: TransactionSignerAccount; client: AlgodClient; - version?: string; smrID?: number; + unitName?: string; + imageUrl?: string; } export interface SMRGetRegistryParams { diff --git a/src/utils/index.ts b/src/utils/index.ts index f40f1f0..c4562a2 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -13,9 +13,15 @@ import algosdk, { ALGORAND_MIN_TX_FEE, SuggestedParams, ABIResult as SdkABIResult, + ABIType, + ABIArrayDynamicType, + ABIUintType, + decodeAddress, } from "algosdk"; import AlgodClient from "algosdk/dist/types/client/v2/algod/algod"; import { StateValue, State, ApplicationClient } from "beaker-ts"; +import { APP_SPEC as SmiAppSpec } from "../contracts/SMI"; +import { APP_SPEC as SmlAppSpec } from "../contracts/SML"; import { SML_TEAL } from "../contracts/sml_client"; import { @@ -26,6 +32,9 @@ import { } from "../interfaces"; import { DEFAULT_AWAIT_ROUNDS, ALGO_ASSET } from "../constants"; import { PriceNormalizationType, SubscriptionExpirationType } from "../enums"; +import { APP_PAGE_MAX_SIZE } from "@algorandfoundation/algokit-utils/types/app"; +import { AppSpec } from "@algorandfoundation/algokit-utils/types/app-spec"; +import { algos } from "@algorandfoundation/algokit-utils"; /* c8 ignore start */ function strOrHex(v: Buffer): string { @@ -269,6 +278,12 @@ export async function getAssetByID( return asset; } +export function getTxnFeeCount(txnNumber: number): number { + // Get suggested params with a specific fee. + const fee = ALGORAND_MIN_TX_FEE * txnNumber; + return fee; +} + export async function getParamsWithFeeCount( client: Algodv2, txnNumber: number @@ -276,7 +291,7 @@ export async function getParamsWithFeeCount( // Get suggested params with a specific fee. const params: SuggestedParams = await client.getTransactionParams().do(); params.flatFee = true; - params.fee = ALGORAND_MIN_TX_FEE * txnNumber; + params.fee = getTxnFeeCount(txnNumber); return params; } @@ -295,3 +310,113 @@ export function expirationTypeToMonths( return 1; } } + +// Price MBR calculations + +export async function calculateExtraPages( + approval: string, + clear: string, + algodClient: AlgodClient +): Promise { + const approvalCompiled = await algodClient + .compile(Buffer.from(approval, "base64").toString("utf-8")) + .do(); + const approvalDecoded = new Uint8Array( + Buffer.from(approvalCompiled.result, "base64") + ); + const clearCompiled = await algodClient + .compile(Buffer.from(clear, "base64").toString("utf-8")) + .do(); + const clearDecoded = new Uint8Array( + Buffer.from(clearCompiled.result, "base64") + ); + return Math.floor( + (approvalDecoded.length + clearDecoded.length) / APP_PAGE_MAX_SIZE + ); +} + +export function calculateBoxMbr( + name: string | number | Uint8Array, + size: number, + action: string, + abiType: ABIType | null = null +): number { + if (action !== "create" && action !== "destroy") { + throw new Error("Action must be 'create' or 'destroy'"); + } + const nameSize = typeof name === "number" ? name : name.length; + let mbrChange = 2_500 + 400 * (nameSize + size); + + if (abiType !== null) { + if (abiType instanceof ABIArrayDynamicType) { + mbrChange += 800; + } else { + throw new Error(`Unknown abi type: ${abiType}`); + } + } + + return action === "create" ? mbrChange : -mbrChange; +} + +export function calculateRegistryLockerBoxCreateMbr( + locker_owner: string +): number { + const uint64Type = new ABIUintType(64); + return calculateBoxMbr( + decodeAddress(locker_owner).publicKey, + uint64Type.byteLen(), // UInt64 is 8 bytes - 800 is microalgos + "create" + ); +} + +export function calculateCreationMbr( + extraProgramPages: number, + globalNumUint: number, + globalNumByteSlice: number +): number { + return ( + 100_000 * (1 + extraProgramPages) + + (25_000 + 3_500) * globalNumUint + + (25_000 + 25_000) * globalNumByteSlice + ); +} + +export async function calculateSmiCreationMbr( + algodClient: AlgodClient +): Promise { + const extraPages = await calculateExtraPages( + SmiAppSpec.source.approval, + SmiAppSpec.source.clear, + algodClient + ); + return calculateCreationMbr( + extraPages, + SmiAppSpec.state.global.num_uints, + SmiAppSpec.state.global.num_byte_slices + ); +} + +export async function calculateSmlCreationMbr( + algodClient: AlgodClient +): Promise { + const extraPages = await calculateExtraPages( + SmlAppSpec.source.approval, + SmlAppSpec.source.clear, + algodClient + ); + return calculateCreationMbr( + extraPages, + SmlAppSpec.state.global.num_uints, + SmlAppSpec.state.global.num_byte_slices + ); +} + +export function convertCentsToAlgos( + totalCents: number, + priceOfAlgo: number +): number { + const microAlgos = (totalCents * 10000 * Math.pow(10, 6)) / priceOfAlgo; + const algos = microAlgos / 10000; + const roundedAlgos = Math.floor(algos / 10000) * 10000; + return roundedAlgos < 100_000 ? 100_000 : roundedAlgos; +} diff --git a/tests/subtopia.test.ts b/tests/subtopia.test.ts index ac1872c..e3563eb 100644 --- a/tests/subtopia.test.ts +++ b/tests/subtopia.test.ts @@ -1,4 +1,9 @@ -import { Algodv2, decodeAddress } from "algosdk"; +import { + decodeAddress, + mnemonicToSecretKey, + makeBasicAccountTransactionSigner, +} from "algosdk"; +import "dotenv/config"; import { getLocker, SubscriptionType, @@ -6,12 +11,10 @@ import { SubtopiaClient, } from "../src/index"; import { it, describe, expect } from "vitest"; -import { sandbox } from "beaker-ts"; -import { SMR } from "../src/contracts/smr_client"; +import { SubtopiaRegistry } from "../src/clients/SubtopiaRegistry"; import { getRandomAccount, - filterAsync, generateRandomAsset, getRandomElement, } from "./utils"; @@ -21,13 +24,19 @@ import { optOutAsset, rekeyLocker, } from "../src/utils"; -import { SandboxAccount } from "beaker-ts/dist/types/sandbox/accounts"; import { DiscountType, PriceNormalizationType, SubscriptionExpirationType, } from "../src/enums"; import { assert } from "console"; +import { + algos, + ensureFunded, + getAlgoClient, + microAlgos, + transactionSignerAccount, +} from "@algorandfoundation/algokit-utils"; const TIME_BASED_EXPIRATION_TYPES = [ SubscriptionExpirationType.MONTHLY, @@ -36,72 +45,83 @@ const TIME_BASED_EXPIRATION_TYPES = [ SubscriptionExpirationType.ANNUAL, ]; -const algodClient = new Algodv2("a".repeat(64), "http://localhost", "4001"); -const accounts = await sandbox.getAccounts(); -const bigBalanceAccounts = await filterAsync(accounts, async (account) => { - const { amount } = await algodClient.accountInformation(account.addr).do(); - return amount > 1e6 * 100e6; +const algodClient = getAlgoClient({ + server: "https://testnet-api.algonode.cloud", }); - -const adminAccount = bigBalanceAccounts.pop() as SandboxAccount; -const dummyRegistry = new SMR({ - client: algodClient, - sender: adminAccount.addr, - signer: adminAccount.signer, -}); - -async function setupDummyRegistry() { - const { appId: dummyRegistryId, appAddress } = - await dummyRegistry.createApplication({ - extraPages: 2, - }); - const dummyRegistryAddress = await SubtopiaAdminClient.getRegistryAddress({ - client: algodClient, - user: { address: adminAccount.addr, signer: adminAccount.signer }, - smrID: dummyRegistryId, - }); - expect(dummyRegistryAddress).toBe(appAddress); - return { dummyRegistryId, dummyRegistryAddress }; -} +// eslint-disable-next-line @typescript-eslint/no-non-null-assertion +const dispenserAccount = mnemonicToSecretKey( + process.env["TESTNET_SUBTOPIA_DISPENSER_MNEMONIC"] as string +); +const testnetRegistryId = Number(process.env["TESTNET_SUBTOPIA_REGISTRY_ID"]); + +const creatorAccount = mnemonicToSecretKey( + process.env["TESTNET_SUBTOPIA_CREATOR_MNEMONIC"] as string +); +const creatorSignerAccount = transactionSignerAccount( + makeBasicAccountTransactionSigner(creatorAccount), + creatorAccount.addr +); + +await ensureFunded( + { + accountToFund: creatorAccount, + fundingSource: dispenserAccount, + minSpendingBalance: algos(5), + minFundingIncrement: algos(5), + }, + algodClient +); describe("subtopia", () => { it( - "should correctly add infrastructure", + "should correctly add and remove infrastructure", async () => { // Setup - const { dummyRegistryId } = await setupDummyRegistry(); + const subtopiaRegistryClient = await SubtopiaRegistry.init( + algodClient, + creatorSignerAccount, + testnetRegistryId + ); + + let lockerId = await subtopiaRegistryClient.getLocker( + creatorAccount.addr + ); + if (lockerId === undefined) { + const response = await subtopiaRegistryClient.createLocker({ + creator: creatorSignerAccount, + }); + lockerId = response.lockerId; + } // Test - const result = await SubtopiaAdminClient.addInfrastructure({ - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - smrID: dummyRegistryId, + const response = await subtopiaRegistryClient.createInfrastructure({ name: "Cool infrastructure", price: 1, - client: algodClient, subType: SubscriptionType.UNLIMITED, maxSubs: 0, coinID: 0, + lockerId: lockerId, }); - const infrastructureID = Number(result.returnValue); - - const content = await SubtopiaClient.getInfrastructureState( - algodClient, - infrastructureID - ); - - const contentWithNoNormalization = - await SubtopiaClient.getInfrastructureState( - algodClient, - infrastructureID, - false - ); - - // Assert - expect(content.price).toBe(1); - expect(contentWithNoNormalization.price).toBe(1 * 1e6); - expect(result).toBeDefined(); - expect(result.txID).toBeDefined(); + expect(response.infrastructureId).toBeGreaterThan(0); + + // const content = await SubtopiaClient.getInfrastructureState( + // algodClient, + // infrastructureID + // ); + + // const contentWithNoNormalization = + // await SubtopiaClient.getInfrastructureState( + // algodClient, + // infrastructureID, + // false + // ); + + // // Assert + // expect(content.price).toBe(1); + // expect(contentWithNoNormalization.price).toBe(1 * 1e6); + // expect(result).toBeDefined(); + // expect(result.txID).toBeDefined(); }, { timeout: 1e6 } ); diff --git a/yarn.lock b/yarn.lock index 71d76bf..ee0dae6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,232 +2,188 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== +"@algorandfoundation/algokit-utils@^2.3.1": + version "2.3.1" + resolved "https://registry.npmjs.org/@algorandfoundation/algokit-utils/-/algokit-utils-2.3.1.tgz" + integrity sha512-SI5W6YLWdflCxtNHYVyPDnAA5f7D1RxFnfJ5Aw2RgBtm9LFyZEkYAz9q4zTaQWgFvRDTqkTDh0swdJex3XWgDA== + dependencies: + algosdk "^2.3.0" + algosdk2-2 "npm:algosdk@2.2.0" + buffer "^6.0.3" "@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" - integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.21.4": + version "7.21.4" dependencies: - "@babel/highlight" "^7.22.5" + "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" - integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== +"@babel/compat-data@^7.22.0": + version "7.22.3" -"@babel/core@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" - integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.21.4": + version "7.22.1" dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helpers" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.22.0" + "@babel/helper-compilation-targets" "^7.22.1" + "@babel/helper-module-transforms" "^7.22.1" + "@babel/helpers" "^7.22.0" + "@babel/parser" "^7.22.0" + "@babel/template" "^7.21.9" + "@babel/traverse" "^7.22.1" + "@babel/types" "^7.22.0" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.2" semver "^6.3.0" -"@babel/generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" - integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== +"@babel/generator@^7.22.0", "@babel/generator@^7.22.3": + version "7.22.3" dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.22.3" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02" - integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== +"@babel/helper-compilation-targets@^7.22.1": + version "7.22.1" dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" + "@babel/compat-data" "^7.22.0" + "@babel/helper-validator-option" "^7.21.0" browserslist "^4.21.3" lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-environment-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" - integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== - -"@babel/helper-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" - integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== - dependencies: - "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-transforms@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" - integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" - integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== - -"@babel/helper-validator-option@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" - integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== - -"@babel/helpers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820" - integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== - dependencies: - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/highlight@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" - integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== - dependencies: - "@babel/helper-validator-identifier" "^7.22.5" +"@babel/helper-environment-visitor@^7.22.1": + version "7.22.1" + +"@babel/helper-function-name@^7.21.0": + version "7.21.0" + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-imports@^7.21.4": + version "7.21.4" + dependencies: + "@babel/types" "^7.21.4" + +"@babel/helper-module-transforms@^7.22.1": + version "7.22.1" + dependencies: + "@babel/helper-environment-visitor" "^7.22.1" + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-simple-access" "^7.21.5" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.21.9" + "@babel/traverse" "^7.22.1" + "@babel/types" "^7.22.0" + +"@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2": + version "7.21.5" + +"@babel/helper-simple-access@^7.21.5": + version "7.21.5" + dependencies: + "@babel/types" "^7.21.5" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.21.5": + version "7.21.5" + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + +"@babel/helper-validator-option@^7.21.0": + version "7.21.0" + +"@babel/helpers@^7.22.0": + version "7.22.3" + dependencies: + "@babel/template" "^7.21.9" + "@babel/traverse" "^7.22.1" + "@babel/types" "^7.22.3" + +"@babel/highlight@^7.18.6": + version "7.18.6" + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" - integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== - -"@babel/plugin-transform-react-jsx-self@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz#ca2fdc11bc20d4d46de01137318b13d04e481d8e" - integrity sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-jsx-source@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz#49af1615bfdf6ed9d3e9e43e425e0b2b65d15b6c" - integrity sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/template@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" - integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/traverse@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1" - integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/parser" "^7.22.5" - "@babel/types" "^7.22.5" +"@babel/parser@^7.21.9", "@babel/parser@^7.22.0", "@babel/parser@^7.22.4": + version "7.22.4" + +"@babel/plugin-transform-react-jsx-self@^7.21.0": + version "7.21.0" + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-react-jsx-source@^7.19.6": + version "7.19.6" + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/template@^7.20.7", "@babel/template@^7.21.9": + version "7.21.9" + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/parser" "^7.21.9" + "@babel/types" "^7.21.5" + +"@babel/traverse@^7.22.1": + version "7.22.4" + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.22.3" + "@babel/helper-environment-visitor" "^7.22.1" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.22.4" + "@babel/types" "^7.22.4" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" - integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== +"@babel/types@^7.18.6", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.22.0", "@babel/types@^7.22.3", "@babel/types@^7.22.4": + version "7.22.4" dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-string-parser" "^7.21.5" + "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@colors/colors@1.5.0": version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== "@commitlint/config-validator@^17.4.4": version "17.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-17.4.4.tgz#d0742705719559a101d2ee49c0c514044af6d64d" + resolved "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz" integrity sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg== dependencies: "@commitlint/types" "^17.4.4" @@ -235,12 +191,12 @@ "@commitlint/execute-rule@^17.4.0": version "17.4.0" - resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz#4518e77958893d0a5835babe65bf87e2638f6939" + resolved "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz" integrity sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA== "@commitlint/load@>6.1.1": version "17.5.0" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.5.0.tgz#be45dbbb50aaf5eb7e8e940e1e0d6171d1426bab" + resolved "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz" integrity sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q== dependencies: "@commitlint/config-validator" "^17.4.4" @@ -260,7 +216,7 @@ "@commitlint/resolve-extends@^17.4.4": version "17.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz#8f931467dea8c43b9fe38373e303f7c220de6fdc" + resolved "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz" integrity sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A== dependencies: "@commitlint/config-validator" "^17.4.4" @@ -272,153 +228,46 @@ "@commitlint/types@^17.4.4": version "17.4.4" - resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-17.4.4.tgz#1416df936e9aad0d6a7bbc979ecc31e55dade662" + resolved "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz" integrity sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ== dependencies: chalk "^4.1.0" "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" "@csstools/selector-specificity@^2.0.2": version "2.2.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" + resolved "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz" integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== -"@esbuild/android-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" - integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== - -"@esbuild/android-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" - integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== - -"@esbuild/android-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" - integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== - "@esbuild/darwin-arm64@0.17.19": version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz" integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== -"@esbuild/darwin-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" - integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== - -"@esbuild/freebsd-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" - integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== - -"@esbuild/freebsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" - integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== - -"@esbuild/linux-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" - integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== - -"@esbuild/linux-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" - integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== - -"@esbuild/linux-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" - integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== - -"@esbuild/linux-loong64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" - integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== - -"@esbuild/linux-mips64el@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" - integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== - -"@esbuild/linux-ppc64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" - integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== - -"@esbuild/linux-riscv64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" - integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== - -"@esbuild/linux-s390x@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" - integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== - -"@esbuild/linux-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" - integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== - -"@esbuild/netbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" - integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== - -"@esbuild/openbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" - integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== - -"@esbuild/sunos-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" - integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== - -"@esbuild/win32-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" - integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== - -"@esbuild/win32-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" - integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== - -"@esbuild/win32-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" - integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== - "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0": version "4.5.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz" integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== -"@eslint/eslintrc@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" - integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== +"@eslint/eslintrc@^2.0.3": + version "2.0.3" dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.6.0" + espree "^9.5.2" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -426,14 +275,12 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.44.0": - version "8.44.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" - integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== +"@eslint/js@8.42.0": + version "8.42.0" "@feki.de/semantic-release-yarn@1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@feki.de/semantic-release-yarn/-/semantic-release-yarn-1.0.1.tgz#fc74ff10ec4d0a7d2ed736af3b93146fcdb62ba9" + resolved "https://registry.npmjs.org/@feki.de/semantic-release-yarn/-/semantic-release-yarn-1.0.1.tgz" integrity sha512-7y6PSJfJAnKu35exuPO32Iiy9e+Nab577bk4y+kO8Led3Zl/UcjiZxaYZenXZjMZg6Ms9vhNEXvUWUA3D9f5Pg== dependencies: "@semantic-release/error" "^3.0.0" @@ -449,9 +296,12 @@ semver "^7.1.2" tempy "^1.0.0" +"@gar/promisify@^1.1.3": + version "1.1.3" + "@humanwhocodes/config-array@^0.11.10": version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz" integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== dependencies: "@humanwhocodes/object-schema" "^1.2.1" @@ -460,17 +310,17 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -482,89 +332,87 @@ "@isaacs/string-locale-compare@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + resolved "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz" integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== "@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - "@jridgewell/resolve-uri@^3.0.3": version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + "@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== dependencies: "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + 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" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + 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" -"@npmcli/arborist@^6.2.10": - version "6.2.10" - resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.2.10.tgz#d12dbc772b5f2894e7eb680fde2b03ada81331ed" - integrity sha512-YpGd6RgYZ4JzIZCP6d+PfH81tD0XynOE7HyKUZPLss/YQZXR5pO6hyXWNYb1fcQw4yJrh9ed9umhGbxPhcjBRA== +"@npmcli/arborist@^6.2.9": + version "6.2.9" dependencies: "@isaacs/string-locale-compare" "^1.1.0" "@npmcli/fs" "^3.1.0" @@ -600,13 +448,10 @@ treeverse "^3.0.0" walk-up-path "^3.0.1" -"@npmcli/config@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-6.2.1.tgz#954cc09b727b6bfc087cb1d2a48994dc342e45cc" - integrity sha512-Cj/OrSbrLvnwWuzquFCDTwFN8QmR+SWH6qLNCBttUreDkKM5D5p36SeSMbcEUiCGdwjUrVy2yd8C0REwwwDPEw== +"@npmcli/config@^6.1.7": + version "6.1.7" dependencies: "@npmcli/map-workspaces" "^3.0.2" - ci-info "^3.8.0" ini "^4.1.0" nopt "^7.0.0" proc-log "^3.0.0" @@ -616,22 +461,26 @@ "@npmcli/disparity-colors@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz#60ea8c6eb5ba9de2d1950e15b06205b2c3ab7833" + resolved "https://registry.npmjs.org/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz" integrity sha512-5R/z157/f20Fi0Ou4ZttL51V0xz0EdPEOauFtPCEYOLInDBRCj1/TxOJ5aGTrtShxEshN2d+hXb9ZKSi5RLBcg== dependencies: ansi-styles "^4.3.0" +"@npmcli/fs@^2.1.0": + version "2.1.2" + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + "@npmcli/fs@^3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz" integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== dependencies: semver "^7.3.5" -"@npmcli/git@^4.0.0", "@npmcli/git@^4.0.1", "@npmcli/git@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.1.0.tgz#ab0ad3fd82bc4d8c1351b6c62f0fa56e8fe6afa6" - integrity sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ== +"@npmcli/git@^4.0.0", "@npmcli/git@^4.0.1": + version "4.0.4" dependencies: "@npmcli/promise-spawn" "^6.0.0" lru-cache "^7.4.4" @@ -644,7 +493,7 @@ "@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.0.2": version "2.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" + resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz" integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== dependencies: npm-bundled "^3.0.0" @@ -652,7 +501,7 @@ "@npmcli/map-workspaces@^3.0.2", "@npmcli/map-workspaces@^3.0.4": version "3.0.4" - resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz#15ad7d854292e484f7ba04bc30187a8320dba799" + resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz" integrity sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg== dependencies: "@npmcli/name-from-folder" "^2.0.0" @@ -662,7 +511,7 @@ "@npmcli/metavuln-calculator@^5.0.0": version "5.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz#426b3e524c2008bcc82dbc2ef390aefedd643d76" + resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz" integrity sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q== dependencies: cacache "^17.0.0" @@ -670,45 +519,47 @@ pacote "^15.0.0" semver "^7.3.5" +"@npmcli/move-file@^2.0.0": + version "2.0.1" + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + "@npmcli/name-from-folder@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" + resolved "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz" integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== "@npmcli/node-gyp@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz" integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== -"@npmcli/package-json@^3.0.0", "@npmcli/package-json@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-3.1.1.tgz#5628332aac90fa1b4d6f98e03988c5958b35e0c5" - integrity sha512-+UW0UWOYFKCkvszLoTwrYGrjNrT8tI5Ckeb/h+Z1y1fsNJEctl7HmerA5j2FgmoqFaLI2gsA1X9KgMFqx/bRmA== +"@npmcli/package-json@^3.0.0", "@npmcli/package-json@^3.1.0": + version "3.1.0" dependencies: - "@npmcli/git" "^4.1.0" glob "^10.2.2" json-parse-even-better-errors "^3.0.0" normalize-package-data "^5.0.0" npm-normalize-package-bin "^3.0.1" - proc-log "^3.0.0" "@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": version "6.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz" integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== dependencies: which "^3.0.0" "@npmcli/query@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.0.0.tgz#51a0dfb85811e04f244171f164b6bc83b36113a7" + resolved "https://registry.npmjs.org/@npmcli/query/-/query-3.0.0.tgz" integrity sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA== dependencies: postcss-selector-parser "^6.0.10" "@npmcli/run-script@^6.0.0", "@npmcli/run-script@^6.0.2": version "6.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz" integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== dependencies: "@npmcli/node-gyp" "^3.0.0" @@ -718,14 +569,12 @@ which "^3.0.0" "@octokit/auth-token@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" - integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== + version "3.0.3" + dependencies: + "@octokit/types" "^9.0.0" -"@octokit/core@^4.2.1": - version "4.2.4" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" - integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== +"@octokit/core@^4.0.0", "@octokit/core@^4.2.1", "@octokit/core@>=3", "@octokit/core@>=4": + version "4.2.1" dependencies: "@octokit/auth-token" "^3.0.0" "@octokit/graphql" "^5.0.0" @@ -736,9 +585,7 @@ universal-user-agent "^6.0.0" "@octokit/endpoint@^7.0.0": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" - integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== + version "7.0.5" dependencies: "@octokit/types" "^9.0.0" is-plain-object "^5.0.0" @@ -746,65 +593,45 @@ "@octokit/graphql@^5.0.0": version "5.0.6" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" + resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz" integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== dependencies: "@octokit/request" "^6.0.0" "@octokit/types" "^9.0.0" universal-user-agent "^6.0.0" -"@octokit/openapi-types@^18.0.0": - version "18.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.0.0.tgz#f43d765b3c7533fd6fb88f3f25df079c24fccf69" - integrity sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw== +"@octokit/openapi-types@^17.2.0": + version "17.2.0" -"@octokit/plugin-paginate-rest@^7.0.0": - version "7.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-7.1.2.tgz#1e25e88acab8198858960f6ef7ae02e6c9f7139f" - integrity sha512-Jx8KuKqEAVRsK6fMzZKv3h6UH9/NRDHsDRtUAROqqmZlCptM///Uef7A1ViZ/cbDplekz7VbDWdFLAZ/mpuDww== +"@octokit/plugin-paginate-rest@^6.1.2": + version "6.1.2" dependencies: - "@octokit/tsconfig" "^2.0.0" - "@octokit/types" "^9.3.2" + "@octokit/tsconfig" "^1.0.2" + "@octokit/types" "^9.2.3" -"@octokit/plugin-retry@^5.0.0": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-5.0.4.tgz#c726c0e4e3fcd3b34a010e709f2c8b92cce1915a" - integrity sha512-hw00fDIhOgijy4aSxS6weWF5uqZVeoiC/AptLLyjL8KFCJRGRaXfcfgj76h/Z3cSLTjRsEIQnNCTig8INttL/g== +"@octokit/plugin-retry@^4.1.3": + version "4.1.6" dependencies: - "@octokit/request-error" "^4.0.1" - "@octokit/types" "^10.0.0" + "@octokit/types" "^9.0.0" bottleneck "^2.15.3" "@octokit/plugin-throttling@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-6.1.0.tgz#093275e6b542be371acb0631252a428f2f1b0615" - integrity sha512-JqMbTiPC0sUSTsLQsdq3JVx1mx8UtTo5mwR80YqPXE93+XhevvSyOR1rO2Z+NbO/r0TK4hqFJSSi/9oIZBxZTg== + version "6.0.0" dependencies: "@octokit/types" "^9.0.0" bottleneck "^2.15.3" "@octokit/request-error@^3.0.0": version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" + resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz" integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== dependencies: "@octokit/types" "^9.0.0" deprecation "^2.0.0" once "^1.4.0" -"@octokit/request-error@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-4.0.2.tgz#0e16802f3e688e1dd6807e81c7810f419b2c530d" - integrity sha512-uqwUEmZw3x4I9DGYq9fODVAAvcLsPQv97NRycP6syEFu5916M189VnNBW2zANNwqg3OiligNcAey7P0SET843w== - dependencies: - "@octokit/types" "^10.0.0" - deprecation "^2.0.0" - once "^1.4.0" - "@octokit/request@^6.0.0": - version "6.2.8" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" - integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== + version "6.2.5" dependencies: "@octokit/endpoint" "^7.0.0" "@octokit/request-error" "^3.0.0" @@ -813,46 +640,33 @@ node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/tsconfig@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-2.0.0.tgz#9f316995c2fd49516b2d2ffb2e02a4341e347fe8" - integrity sha512-tWnrai3quGt8+gRN2edzo9fmraWekeryXPeXDomMw2oFSpu/lH3VSWGn/q4V+rwjTRMeeXk/ci623/01Zet4VQ== - -"@octokit/types@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" - integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== - dependencies: - "@octokit/openapi-types" "^18.0.0" +"@octokit/tsconfig@^1.0.2": + version "1.0.2" -"@octokit/types@^9.0.0", "@octokit/types@^9.3.2": - version "9.3.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" - integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== +"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": + version "9.2.3" dependencies: - "@octokit/openapi-types" "^18.0.0" + "@octokit/openapi-types" "^17.2.0" "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@pnpm/config.env-replace@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz" integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== "@pnpm/network.ca-file@^1.0.1": version "1.0.2" - resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + resolved "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz" integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== dependencies: graceful-fs "4.2.10" "@pnpm/npm-conf@^2.1.0": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz#0058baf1c26cbb63a828f0193795401684ac86f0" - integrity sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA== + version "2.2.0" dependencies: "@pnpm/config.env-replace" "^1.1.0" "@pnpm/network.ca-file" "^1.0.1" @@ -860,7 +674,7 @@ "@semantic-release/changelog@6.0.3": version "6.0.3" - resolved "https://registry.yarnpkg.com/@semantic-release/changelog/-/changelog-6.0.3.tgz#6195630ecbeccad174461de727d5f975abc23eeb" + resolved "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz" integrity sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag== dependencies: "@semantic-release/error" "^3.0.0" @@ -869,13 +683,11 @@ lodash "^4.17.4" "@semantic-release/commit-analyzer@^10.0.0": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz#be6fcc1703459294c394ede41b37fd9a21d39807" - integrity sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ== + version "10.0.0" dependencies: - conventional-changelog-angular "^6.0.0" - conventional-commits-filter "^3.0.0" - conventional-commits-parser "^4.0.0" + conventional-changelog-angular "^5.0.0" + conventional-commits-filter "^2.0.0" + conventional-commits-parser "^3.2.3" debug "^4.0.0" import-from "^4.0.0" lodash-es "^4.17.21" @@ -883,17 +695,12 @@ "@semantic-release/error@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-3.0.0.tgz#30a3b97bbb5844d695eb22f9d3aa40f6a92770c2" + resolved "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz" integrity sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw== -"@semantic-release/error@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-4.0.0.tgz#692810288239637f74396976a9340fbc0aa9f6f9" - integrity sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ== - "@semantic-release/git@10.0.1": version "10.0.1" - resolved "https://registry.yarnpkg.com/@semantic-release/git/-/git-10.0.1.tgz#c646e55d67fae623875bf3a06a634dd434904498" + resolved "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz" integrity sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w== dependencies: "@semantic-release/error" "^3.0.0" @@ -906,15 +713,13 @@ p-reduce "^2.0.0" "@semantic-release/github@^9.0.0": - version "9.0.3" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-9.0.3.tgz#2559da9bcedeacb572f240469270a281c2a83615" - integrity sha512-X6gq4USKVlCxPwIIyXb99jU7gwVWlnsKOevs+OyABRdoqc+OIRITbFmrrYU3eE1vGMGk+Qu/GAoLUQQQwC3YOA== + version "9.0.0" dependencies: "@octokit/core" "^4.2.1" - "@octokit/plugin-paginate-rest" "^7.0.0" - "@octokit/plugin-retry" "^5.0.0" + "@octokit/plugin-paginate-rest" "^6.1.2" + "@octokit/plugin-retry" "^4.1.3" "@octokit/plugin-throttling" "^6.0.0" - "@semantic-release/error" "^4.0.0" + "@semantic-release/error" "^3.0.0" aggregate-error "^4.0.1" debug "^4.3.4" dir-glob "^3.0.1" @@ -928,11 +733,9 @@ url-join "^5.0.0" "@semantic-release/npm@^10.0.2": - version "10.0.4" - resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-10.0.4.tgz#b55df5cb86d4b10b4e8eb56d5ce0bd3537c641e1" - integrity sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw== + version "10.0.3" dependencies: - "@semantic-release/error" "^4.0.0" + "@semantic-release/error" "^3.0.0" aggregate-error "^4.0.1" execa "^7.0.0" fs-extra "^11.0.0" @@ -947,14 +750,12 @@ tempy "^3.0.0" "@semantic-release/release-notes-generator@^11.0.0": - version "11.0.3" - resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.3.tgz#9d7d94e305441d3b31385e29aa5a79ce3f6a21ae" - integrity sha512-NU77dWKQf+QcZrv/Hcp3DPeSxglPu8hYKCipGxAPpeaneLkg6S0zfTVug4tg4mfDhZHC6RtoI7ljQDK8VoJ2Dw== - dependencies: - conventional-changelog-angular "^6.0.0" - conventional-changelog-writer "^6.0.0" - conventional-commits-filter "^3.0.0" - conventional-commits-parser "^4.0.0" + version "11.0.2" + dependencies: + conventional-changelog-angular "^5.0.0" + conventional-changelog-writer "^5.0.0" + conventional-commits-filter "^2.0.0" + conventional-commits-parser "^3.2.3" debug "^4.0.0" get-stream "^7.0.0" import-from "^4.0.0" @@ -964,50 +765,42 @@ "@sigstore/protobuf-specs@^0.1.0": version "0.1.0" - resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz#957cb64ea2f5ce527cc9cf02a096baeb0d2b99b4" + resolved "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz" integrity sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ== -"@sigstore/tuf@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.2.tgz#acbb2c8399fb03aca0c90fa1dc1934bda4160623" - integrity sha512-vjwcYePJzM01Ha6oWWZ9gNcdIgnzyFxfqfWzph483DPJTH8Tb7f7bQRRll3CYVkyH56j0AgcPAcl6Vg95DPF+Q== - dependencies: - "@sigstore/protobuf-specs" "^0.1.0" - tuf-js "^1.1.7" - "@tootallnate/once@2": version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== "@tsconfig/node10@^1.0.7": version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@tufjs/canonical-json@1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" + resolved "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz" integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== "@tufjs/models@1.0.4": version "1.0.4" - resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" + resolved "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz" integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== dependencies: "@tufjs/canonical-json" "1.0.0" @@ -1015,67 +808,56 @@ "@types/chai-subset@^1.3.3": version "1.3.3" - resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" + resolved "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz" integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== dependencies: "@types/chai" "*" "@types/chai@*", "@types/chai@^4.3.5": version "4.3.5" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" + resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz" integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/json-schema@^7.0.9": version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz" integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== "@types/minimist@^1.2.0": version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== -"@types/node@*": - version "20.3.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.3.tgz#329842940042d2b280897150e023e604d11657d6" - integrity sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw== - -"@types/node@^18.13.0": - version "18.16.19" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.19.tgz#cb03fca8910fdeb7595b755126a8a78144714eea" - integrity sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA== +"@types/node@*", "@types/node@^18.13.0", "@types/node@>= 14": + version "18.16.16" "@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.1": version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/parse-json@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prop-types@*": version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/react-dom@^18.0.9": - version "18.2.6" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.6.tgz#ad621fa71a8db29af7c31b41b2ea3d8a6f4144d1" - integrity sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A== + version "18.2.4" dependencies: "@types/react" "*" "@types/react@*", "@types/react@^18.0.26": - version "18.2.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127" - integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g== + version "18.2.8" dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -1083,23 +865,21 @@ "@types/scheduler@*": version "0.16.3" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz" integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== "@types/semver@^7.3.12": version "7.5.0" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== "@typescript-eslint/eslint-plugin@^5.46.0": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz#81382d6ecb92b8dda70e91f9035611cb2fecd1c3" - integrity sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw== + version "5.59.8" dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.60.1" - "@typescript-eslint/type-utils" "5.60.1" - "@typescript-eslint/utils" "5.60.1" + "@typescript-eslint/scope-manager" "5.59.8" + "@typescript-eslint/type-utils" "5.59.8" + "@typescript-eslint/utils" "5.59.8" debug "^4.3.4" grapheme-splitter "^1.0.4" ignore "^5.2.0" @@ -1107,87 +887,71 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.46.0": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.1.tgz#0f2f58209c0862a73e3d5a56099abfdfa21d0fd3" - integrity sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q== +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.46.0": + version "5.59.8" dependencies: - "@typescript-eslint/scope-manager" "5.60.1" - "@typescript-eslint/types" "5.60.1" - "@typescript-eslint/typescript-estree" "5.60.1" + "@typescript-eslint/scope-manager" "5.59.8" + "@typescript-eslint/types" "5.59.8" + "@typescript-eslint/typescript-estree" "5.59.8" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.60.1": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz#35abdb47f500c68c08f2f2b4f22c7c79472854bb" - integrity sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ== +"@typescript-eslint/scope-manager@5.59.8": + version "5.59.8" dependencies: - "@typescript-eslint/types" "5.60.1" - "@typescript-eslint/visitor-keys" "5.60.1" + "@typescript-eslint/types" "5.59.8" + "@typescript-eslint/visitor-keys" "5.59.8" -"@typescript-eslint/type-utils@5.60.1": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz#17770540e98d65ab4730c7aac618003f702893f4" - integrity sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A== +"@typescript-eslint/type-utils@5.59.8": + version "5.59.8" dependencies: - "@typescript-eslint/typescript-estree" "5.60.1" - "@typescript-eslint/utils" "5.60.1" + "@typescript-eslint/typescript-estree" "5.59.8" + "@typescript-eslint/utils" "5.59.8" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.60.1": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.1.tgz#a17473910f6b8d388ea83c9d7051af89c4eb7561" - integrity sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg== +"@typescript-eslint/types@5.59.8": + version "5.59.8" -"@typescript-eslint/typescript-estree@5.60.1": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz#8c71824b7165b64d5ebd7aa42968899525959834" - integrity sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw== +"@typescript-eslint/typescript-estree@5.59.8": + version "5.59.8" dependencies: - "@typescript-eslint/types" "5.60.1" - "@typescript-eslint/visitor-keys" "5.60.1" + "@typescript-eslint/types" "5.59.8" + "@typescript-eslint/visitor-keys" "5.59.8" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.60.1": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.1.tgz#6861ebedbefba1ac85482d2bdef6f2ff1eb65b80" - integrity sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ== +"@typescript-eslint/utils@5.59.8": + version "5.59.8" dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.60.1" - "@typescript-eslint/types" "5.60.1" - "@typescript-eslint/typescript-estree" "5.60.1" + "@typescript-eslint/scope-manager" "5.59.8" + "@typescript-eslint/types" "5.59.8" + "@typescript-eslint/typescript-estree" "5.59.8" eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.60.1": - version "5.60.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz#19a877358bf96318ec35d90bfe6bd1445cce9434" - integrity sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw== +"@typescript-eslint/visitor-keys@5.59.8": + version "5.59.8" dependencies: - "@typescript-eslint/types" "5.60.1" + "@typescript-eslint/types" "5.59.8" eslint-visitor-keys "^3.3.0" "@vitejs/plugin-react@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.0.1.tgz#793aa790633433558da7ac0a38c58ddf47dff518" - integrity sha512-g25lL98essfeSj43HJ0o4DMp0325XK0ITkxpgChzJU/CyemgyChtlxfnRbjfwxDGCTRxTiXtQAsdebQXKMRSOA== + version "4.0.0" dependencies: - "@babel/core" "^7.22.5" - "@babel/plugin-transform-react-jsx-self" "^7.22.5" - "@babel/plugin-transform-react-jsx-source" "^7.22.5" + "@babel/core" "^7.21.4" + "@babel/plugin-transform-react-jsx-self" "^7.21.0" + "@babel/plugin-transform-react-jsx-source" "^7.19.6" react-refresh "^0.14.0" "@vitest/coverage-c8@^0.31.0": version "0.31.4" - resolved "https://registry.yarnpkg.com/@vitest/coverage-c8/-/coverage-c8-0.31.4.tgz#5628e415fd9bea99ee12127e0524b9d267a33e17" + resolved "https://registry.npmjs.org/@vitest/coverage-c8/-/coverage-c8-0.31.4.tgz" integrity sha512-VPx368m4DTcpA/P0v3YdVxl4QOSh1DbUcXURLRvDShrIB5KxOgfzw4Bn2R8AhAe/GyiWW/FIsJ/OJdYXCCiC1w== dependencies: "@ampproject/remapping" "^2.2.1" @@ -1198,7 +962,7 @@ "@vitest/expect@0.31.4": version "0.31.4" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.31.4.tgz#115c517404488bf3cb6ce4ac411c40d8e86891b8" + resolved "https://registry.npmjs.org/@vitest/expect/-/expect-0.31.4.tgz" integrity sha512-tibyx8o7GUyGHZGyPgzwiaPaLDQ9MMuCOrc03BYT0nryUuhLbL7NV2r/q98iv5STlwMgaKuFJkgBW/8iPKwlSg== dependencies: "@vitest/spy" "0.31.4" @@ -1207,7 +971,7 @@ "@vitest/runner@0.31.4": version "0.31.4" - resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.31.4.tgz#e99abee89132a500d9726a53b58dfc9160db1078" + resolved "https://registry.npmjs.org/@vitest/runner/-/runner-0.31.4.tgz" integrity sha512-Wgm6UER+gwq6zkyrm5/wbpXGF+g+UBB78asJlFkIOwyse0pz8lZoiC6SW5i4gPnls/zUcPLWS7Zog0LVepXnpg== dependencies: "@vitest/utils" "0.31.4" @@ -1217,7 +981,7 @@ "@vitest/snapshot@0.31.4": version "0.31.4" - resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.31.4.tgz#59a42046fec4950a1ac70cf0ec64aada3b995559" + resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.31.4.tgz" integrity sha512-LemvNumL3NdWSmfVAMpXILGyaXPkZbG5tyl6+RQSdcHnTj6hvA49UAI8jzez9oQyE/FWLKRSNqTGzsHuk89LRA== dependencies: magic-string "^0.30.0" @@ -1226,77 +990,67 @@ "@vitest/spy@0.31.4": version "0.31.4" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.31.4.tgz#fce8e348cea32deff79996d116c67893b19cc47d" + resolved "https://registry.npmjs.org/@vitest/spy/-/spy-0.31.4.tgz" integrity sha512-3ei5ZH1s3aqbEyftPAzSuunGICRuhE+IXOmpURFdkm5ybUADk+viyQfejNk6q8M5QGX8/EVKw+QWMEP3DTJDag== dependencies: tinyspy "^2.1.0" "@vitest/utils@0.31.4": version "0.31.4" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.31.4.tgz#5cfdcecfd604a7dbe3972cfe0f2b1e0af1246ad2" + resolved "https://registry.npmjs.org/@vitest/utils/-/utils-0.31.4.tgz" integrity sha512-DobZbHacWznoGUfYU8XDPY78UubJxXfMNY1+SUdOp1NsI34eopSA6aZMeaGu10waSOeYwE8lxrd/pLfT0RMxjQ== dependencies: concordance "^5.0.4" loupe "^2.3.6" pretty-format "^27.5.1" -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - abbrev@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== abbrev@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz" integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1, acorn-walk@^8.2.0: version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.4.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.9.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" - integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.4.1, acorn@^8.8.0, acorn@^8.8.2: + version "8.8.2" -agent-base@6, agent-base@^6.0.2: +agent-base@^6.0.2, agent-base@6: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" agent-base@^7.0.2, agent-base@^7.1.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz" integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== dependencies: debug "^4.3.4" agentkeepalive@^4.2.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" + resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz" integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== dependencies: debug "^4.1.0" @@ -1305,15 +1059,23 @@ agentkeepalive@^4.2.1: aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" -aggregate-error@^4.0.0, aggregate-error@^4.0.1: +aggregate-error@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz" + integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== + dependencies: + clean-stack "^4.0.0" + indent-string "^5.0.0" + +aggregate-error@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-4.0.1.tgz#25091fe1573b9e0be892aeda15c7c66a545f758e" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz" integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== dependencies: clean-stack "^4.0.0" @@ -1321,7 +1083,7 @@ aggregate-error@^4.0.0, aggregate-error@^4.0.1: ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -1329,9 +1091,19 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1, ajv@^8.11.0: +ajv@^8.0.1: version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^8.11.0: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" @@ -1341,12 +1113,12 @@ ajv@^8.0.1, ajv@^8.11.0: algo-msgpack-with-bigint@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz#38bb717220525b3ff42232eefdcd9efb9ad405d6" + resolved "https://registry.npmjs.org/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz" integrity sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ== -algosdk@2.3.0: +algosdk@^2.2.0, algosdk@^2.3.0, algosdk@2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/algosdk/-/algosdk-2.3.0.tgz#fcb460b3c311f76fa7908dc14a889ead8054955b" + resolved "https://registry.npmjs.org/algosdk/-/algosdk-2.3.0.tgz" integrity sha512-voxoY2eue2CkzwkTh6UNN5JUeVOBL9qoNX3N/+OYwS2/Xd17ACSs6tLV/6dZumEgPa40ZL8TkO4zQF/ysDpy8w== dependencies: algo-msgpack-with-bigint "^2.1.1" @@ -1360,72 +1132,88 @@ algosdk@2.3.0: tweetnacl "^1.0.3" vlq "^2.0.4" +"algosdk2-2@npm:algosdk@2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/algosdk/-/algosdk-2.2.0.tgz" + integrity sha512-FG3u/60DzjMK9Cffy9itst7WcfsTgZKfsD1r8pT33PfsA7r8NoXiUSL7cf0fNWFus6S3E14BpE2CY64VJ8KV1A== + dependencies: + algo-msgpack-with-bigint "^2.1.1" + buffer "^6.0.3" + cross-fetch "^3.1.5" + hi-base32 "^0.5.1" + js-sha256 "^0.9.0" + js-sha3 "^0.8.0" + js-sha512 "^0.8.0" + json-bigint "^1.0.0" + tweetnacl "^1.0.3" + vlq "^2.0.4" + ansi-escapes@^4.2.1: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-escapes@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz" integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== dependencies: type-fest "^3.0.0" ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + 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" ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== ansicolors@~0.3.2: version "0.3.2" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + resolved "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz" integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== "aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== archy@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== are-we-there-yet@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== dependencies: delegates "^1.0.0" @@ -1433,7 +1221,7 @@ are-we-there-yet@^3.0.0: are-we-there-yet@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz#3ff397dc14f08b52dd8b2a64d3cee154ab8760d2" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz" integrity sha512-nSXlV+u3vtVjRgihdTzbfWYzxPWGo424zPgQbHD0ZqIla3jqYAewDcvee0Ua2hjS5IfTAmjGlx1Jf0PKwjZDEw== dependencies: delegates "^1.0.0" @@ -1441,67 +1229,67 @@ are-we-there-yet@^4.0.0: arg@^4.1.0: version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== argv-formatter@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" + resolved "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz" integrity sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw== array-ify@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== arrify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== assertion-error@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== balanced-match@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz" integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== beaker-ts@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/beaker-ts/-/beaker-ts-0.1.2.tgz#03381f6ecd11a1dcb82a4d0b100e1feb4ee3d479" + resolved "https://registry.npmjs.org/beaker-ts/-/beaker-ts-0.1.2.tgz" integrity sha512-PWjLRdZTsVeClgqwa5HD61UnvRTlJx2mx5Y53Ln4821LN5oJ/nrbhhDEfqOysOmA2+bVQT/B43c8XGjtbMKuOQ== dependencies: commander "^9.4.0" @@ -1509,17 +1297,17 @@ beaker-ts@^0.1.2: before-after-hook@^2.2.0: version "2.2.3" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== bignumber.js@^9.0.0: version "9.1.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== bin-links@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.1.tgz#afeb0549e642f61ff889b58ea2f8dca78fb9d8d3" + resolved "https://registry.npmjs.org/bin-links/-/bin-links-4.0.1.tgz" integrity sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA== dependencies: cmd-shim "^6.0.0" @@ -1529,12 +1317,12 @@ bin-links@^4.0.1: binary-extensions@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bl@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -1543,17 +1331,17 @@ bl@^4.1.0: blueimp-md5@^2.10.0: version "2.19.0" - resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.19.0.tgz#b53feea5498dcb53dc6ec4b823adb84b729c4af0" + resolved "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz" integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== bottleneck@^2.15.3: version "2.19.5" - resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" + resolved "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz" integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1561,31 +1349,29 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -browserslist@^4.21.3: - version "4.21.9" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" - integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== +browserslist@^4.21.3, "browserslist@>= 4.21.0": + version "4.21.7" dependencies: - caniuse-lite "^1.0.30001503" - electron-to-chromium "^1.4.431" + caniuse-lite "^1.0.30001489" + electron-to-chromium "^1.4.411" node-releases "^2.0.12" update-browserslist-db "^1.0.11" buffer@^5.5.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -1593,7 +1379,7 @@ buffer@^5.5.0: buffer@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -1601,14 +1387,14 @@ buffer@^6.0.3: builtins@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== dependencies: semver "^7.0.0" c8@^7.13.0: version "7.14.0" - resolved "https://registry.yarnpkg.com/c8/-/c8-7.14.0.tgz#f368184c73b125a80565e9ab2396ff0be4d732f3" + resolved "https://registry.npmjs.org/c8/-/c8-7.14.0.tgz" integrity sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw== dependencies: "@bcoe/v8-coverage" "^0.2.3" @@ -1626,13 +1412,33 @@ c8@^7.13.0: cac@^6.7.14: version "6.7.14" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== -cacache@^17.0.0, cacache@^17.0.4, cacache@^17.1.3: - version "17.1.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044" - integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg== +cacache@^16.1.0: + version "16.1.3" + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + glob "^8.0.1" + infer-owner "^1.0.4" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + unique-filename "^2.0.0" + +cacache@^17.0.0, cacache@^17.0.4, cacache@^17.1.2: + version "17.1.2" dependencies: "@npmcli/fs" "^3.1.0" fs-minipass "^3.0.0" @@ -1649,17 +1455,17 @@ cacache@^17.0.0, cacache@^17.0.4, cacache@^17.1.3: cachedir@2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz" integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase-keys@^6.2.2: version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== dependencies: camelcase "^5.3.1" @@ -1668,17 +1474,15 @@ camelcase-keys@^6.2.2: camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001503: - version "1.0.30001509" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz#2b7ad5265392d6d2de25cd8776d1ab3899570d14" - integrity sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA== +caniuse-lite@^1.0.30001489: + version "1.0.30001492" cardinal@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + resolved "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz" integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== dependencies: ansicolors "~0.3.2" @@ -1686,7 +1490,7 @@ cardinal@^2.1.1: chai@^4.3.7: version "4.3.7" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" + resolved "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz" integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== dependencies: assertion-error "^1.1.0" @@ -1697,70 +1501,86 @@ chai@^4.3.7: pathval "^1.1.1" type-detect "^4.0.5" -chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1: +chalk@^2.0.0: + 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" + +chalk@^2.3.2: + 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" + +chalk@^2.4.1: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + 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" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" chalk@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== + version "5.2.0" chardet@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== check-error@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== chownr@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== ci-info@^3.6.1, ci-info@^3.7.1, ci-info@^3.8.0: version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== cidr-regex@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" + resolved "https://registry.npmjs.org/cidr-regex/-/cidr-regex-3.1.1.tgz" integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== dependencies: ip-regex "^4.1.0" clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== clean-stack@^4.0.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-4.2.0.tgz#c464e4cde4ac789f4e0735c5d75beb49d7b30b31" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz" integrity sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg== dependencies: escape-string-regexp "5.0.0" cli-columns@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" + resolved "https://registry.npmjs.org/cli-columns/-/cli-columns-4.0.0.tgz" integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== dependencies: string-width "^4.2.3" @@ -1768,19 +1588,19 @@ cli-columns@^4.0.0: cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-spinners@^2.5.0: version "2.9.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz" integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== cli-table3@^0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz" integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== dependencies: string-width "^4.2.0" @@ -1789,12 +1609,12 @@ cli-table3@^0.6.3: cli-width@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== cliui@^7.0.2: version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" @@ -1803,7 +1623,7 @@ cliui@^7.0.2: cliui@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -1812,51 +1632,51 @@ cliui@^8.0.1: clone@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== cmd-shim@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz" integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + 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" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + 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" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + color-support@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== colord@^2.9.3: version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== columnify@^1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + resolved "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz" integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== dependencies: strip-ansi "^6.0.1" @@ -1864,12 +1684,12 @@ columnify@^1.6.0: commander@^9.4.0: version "9.5.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" + resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== -commitizen@4.3.0, commitizen@^4.0.3: +commitizen@^4.0.3, commitizen@4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.3.0.tgz#0d056c542a2d2b1f9b9aba981aa32575b2849924" + resolved "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz" integrity sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw== dependencies: cachedir "2.3.0" @@ -1889,12 +1709,12 @@ commitizen@4.3.0, commitizen@^4.0.3: common-ancestor-path@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + resolved "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz" integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== compare-func@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== dependencies: array-ify "^1.0.0" @@ -1902,12 +1722,12 @@ compare-func@^2.0.0: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concordance@^5.0.4: version "5.0.4" - resolved "https://registry.yarnpkg.com/concordance/-/concordance-5.0.4.tgz#9896073261adced72f88d60e4d56f8efc4bbbbd2" + resolved "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz" integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw== dependencies: date-time "^3.1.0" @@ -1921,7 +1741,7 @@ concordance@^5.0.4: config-chain@^1.1.11: version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" @@ -1929,70 +1749,67 @@ config-chain@^1.1.11: console-control-strings@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -conventional-changelog-angular@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz#a9a9494c28b7165889144fd5b91573c4aa9ca541" - integrity sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg== +conventional-changelog-angular@^5.0.0: + version "5.0.13" dependencies: compare-func "^2.0.0" + q "^1.5.1" -conventional-changelog-writer@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.0.tgz#8c8dea0441c6e648c9b25bb784e750d02f8002d5" - integrity sha512-8PyWTnn7zBIt9l4hj4UusFs1TyG+9Ulu1zlOAc72L7Sdv9Hsc8E86ot7htY3HXCVhXHB/NO0pVGvZpwsyJvFfw== +conventional-changelog-writer@^5.0.0: + version "5.0.1" dependencies: - conventional-commits-filter "^3.0.0" - dateformat "^3.0.3" + conventional-commits-filter "^2.0.7" + dateformat "^3.0.0" handlebars "^4.7.7" json-stringify-safe "^5.0.1" - meow "^8.1.2" - semver "^6.3.0" - split "^1.0.1" + lodash "^4.17.15" + meow "^8.0.0" + semver "^6.0.0" + split "^1.0.0" + through2 "^4.0.0" conventional-commit-types@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" + resolved "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz" integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== -conventional-commits-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" - integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== +conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.7: + version "2.0.7" dependencies: lodash.ismatch "^4.4.0" - modify-values "^1.0.1" + modify-values "^1.0.0" -conventional-commits-parser@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" - integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== +conventional-commits-parser@^3.2.3: + version "3.2.4" dependencies: - JSONStream "^1.3.5" is-text-path "^1.0.1" - meow "^8.1.2" - split2 "^3.2.2" + JSONStream "^1.0.4" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cosmiconfig-typescript-loader@^4.0.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz#c4259ce474c9df0f32274ed162c0447c951ef073" + resolved "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz" integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q== cosmiconfig@^7.1.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz" integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: "@types/parse-json" "^4.0.0" @@ -2001,10 +1818,8 @@ cosmiconfig@^7.1.0: path-type "^4.0.0" yaml "^1.10.0" -cosmiconfig@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" - integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== +cosmiconfig@^8.0.0, cosmiconfig@>=7: + version "8.1.3" dependencies: import-fresh "^3.2.1" js-yaml "^4.1.0" @@ -2013,19 +1828,19 @@ cosmiconfig@^8.0.0: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-fetch@^3.1.5: version "3.1.6" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.6.tgz#bae05aa31a4da760969756318feeee6e70f15d6c" + resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz" integrity sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g== dependencies: node-fetch "^2.6.11" cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -2034,34 +1849,34 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: crypto-random-string@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== crypto-random-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" + resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz" integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== dependencies: type-fest "^1.0.1" css-functions-list@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.1.0.tgz#cf5b09f835ad91a00e5959bcfc627cd498e1321b" + resolved "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz" integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w== cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== csstype@^3.0.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== cz-conventional-changelog@3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2" + resolved "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz" integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw== dependencies: chalk "^2.4.1" @@ -2075,26 +1890,24 @@ cz-conventional-changelog@3.3.0: date-time@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/date-time/-/date-time-3.1.0.tgz#0d1e934d170579f481ed8df1e2b8ff70ee845e1e" + resolved "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz" integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== dependencies: time-zone "^1.0.0" -dateformat@^3.0.3: +dateformat@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" decamelize-keys@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz" integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== dependencies: decamelize "^1.1.0" @@ -2102,41 +1915,41 @@ decamelize-keys@^1.1.0: decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== dedent@0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== deep-eql@^4.1.2: version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz" integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== dependencies: type-detect "^4.0.0" deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== defaults@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" del@^6.0.0: version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + resolved "https://registry.npmjs.org/del/-/del-6.1.1.tgz" integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== dependencies: globby "^11.0.1" @@ -2150,63 +1963,68 @@ del@^6.0.0: delegates@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== depd@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== deprecation@^2.0.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== detect-file@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== detect-indent@6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== diff@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== diff@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + resolved "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz" integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== dir-glob@^3.0.0, dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" dot-prop@^5.1.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" +dotenv@^16.3.1: + version "16.3.1" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + dts-bundle-generator@^8.0.0: version "8.0.1" - resolved "https://registry.yarnpkg.com/dts-bundle-generator/-/dts-bundle-generator-8.0.1.tgz#faa34f8325d65a960696df20fe7ef0b46ab2dc4e" + resolved "https://registry.npmjs.org/dts-bundle-generator/-/dts-bundle-generator-8.0.1.tgz" integrity sha512-9JVw78/OXdKfq+RUrmpLm6WAUJp+aOUGEHimVqIlOEH2VugRt1I8CVIoQZlirWZko+/SVZkNgpWCyZubUuzzPA== dependencies: typescript ">=5.0.2" @@ -2214,66 +2032,69 @@ dts-bundle-generator@^8.0.0: duplexer2@~0.1.0: version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== dependencies: readable-stream "^2.0.2" eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -electron-to-chromium@^1.4.431: - version "1.4.447" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz#ac69d3a7b3713e9ae94bb30ba65c3114e4d76a38" - integrity sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw== +electron-to-chromium@^1.4.411: + version "1.4.419" emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +encoding@^0.1.0: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + encoding@^0.1.13: version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" env-ci@^9.0.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-9.1.1.tgz#f081684c64a639c6ff5cb801bd70464bd40498a4" - integrity sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw== + version "9.1.0" dependencies: execa "^7.0.0" java-properties "^1.0.2" env-paths@^2.2.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== err-code@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== error-ex@^1.3.1, error-ex@^1.3.2: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + 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" esbuild@^0.17.5: version "0.17.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz" integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== optionalDependencies: "@esbuild/android-arm" "0.17.19" @@ -2301,39 +2122,44 @@ esbuild@^0.17.5: escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +escape-string-regexp@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + eslint-config-prettier@^8.5.0: version "8.8.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz" integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== eslint-plugin-prettier@^4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -2341,7 +2167,7 @@ eslint-scope@^5.1.1: eslint-scope@^7.2.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz" integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== dependencies: esrecurse "^4.3.0" @@ -2349,18 +2175,16 @@ eslint-scope@^7.2.0: eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== -eslint@^8.29.0: - version "8.44.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500" - integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== +eslint@*, "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", eslint@^8.29.0, eslint@>=7.0.0, eslint@>=7.28.0: + version "8.42.0" dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.1.0" - "@eslint/js" "8.44.0" + "@eslint/eslintrc" "^2.0.3" + "@eslint/js" "8.42.0" "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -2372,7 +2196,7 @@ eslint@^8.29.0: escape-string-regexp "^4.0.0" eslint-scope "^7.2.0" eslint-visitor-keys "^3.4.1" - espree "^9.6.0" + espree "^9.5.2" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -2392,67 +2216,65 @@ eslint@^8.29.0: lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.3" + optionator "^0.9.1" strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f" - integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A== +espree@^9.5.2: + version "9.5.2" dependencies: - acorn "^8.9.0" + acorn "^8.8.0" acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" esprima@~4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2, esutils@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== event-target-shim@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== events@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== execa@^5.0.0: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -2467,7 +2289,7 @@ execa@^5.0.0: execa@^7.0.0: version "7.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" + resolved "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz" integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== dependencies: cross-spawn "^7.0.3" @@ -2482,19 +2304,14 @@ execa@^7.0.0: expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== dependencies: homedir-polyfill "^1.0.1" -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - external-editor@^3.0.3: version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" @@ -2503,18 +2320,16 @@ external-editor@^3.0.3: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2, fast-diff@^1.2.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" - integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== + version "3.2.12" dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -2524,43 +2339,43 @@ fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastest-levenshtein@^1.0.16: version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" figures@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz" integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== dependencies: escape-string-regexp "^1.0.5" figures@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" figures@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-5.0.0.tgz#126cd055052dea699f8a54e8c9450e6ecfc44d5f" + resolved "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz" integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== dependencies: escape-string-regexp "^5.0.0" @@ -2568,21 +2383,21 @@ figures@^5.0.0: file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + 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" find-node-modules@^2.1.2: version "2.1.3" - resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44" + resolved "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz" integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== dependencies: findup-sync "^4.0.0" @@ -2590,19 +2405,19 @@ find-node-modules@^2.1.2: find-root@1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== find-up@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: locate-path "^2.0.0" find-up@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -2610,7 +2425,7 @@ find-up@^4.1.0: find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -2618,7 +2433,7 @@ find-up@^5.0.0: find-up@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + resolved "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz" integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== dependencies: locate-path "^7.1.0" @@ -2626,14 +2441,14 @@ find-up@^6.3.0: find-versions@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-5.1.0.tgz#973f6739ce20f5e439a27eba8542a4b236c8e685" + resolved "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz" integrity sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg== dependencies: semver-regex "^4.0.5" findup-sync@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz" integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== dependencies: detect-file "^1.0.0" @@ -2643,7 +2458,7 @@ findup-sync@^4.0.0: flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -2651,12 +2466,12 @@ flat-cache@^3.0.4: flatted@^3.1.0: version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== foreground-child@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz" integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== dependencies: cross-spawn "^7.0.0" @@ -2664,7 +2479,7 @@ foreground-child@^2.0.0: foreground-child@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + 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" @@ -2672,25 +2487,15 @@ foreground-child@^3.1.0: from2@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== dependencies: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@^10.0.0: version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" @@ -2699,45 +2504,60 @@ fs-extra@^10.0.0: fs-extra@^11.0.0: version "11.1.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz" integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-minipass@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" +fs-minipass@^2.1.0: + version "2.1.0" + dependencies: + minipass "^3.0.0" + fs-minipass@^3.0.0, fs-minipass@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz" integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g== dependencies: minipass "^5.0.0" fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== gauge@^4.0.3: version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -2751,7 +2571,7 @@ gauge@^4.0.3: gauge@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112" + resolved "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz" integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ== dependencies: aproba "^1.0.3 || ^2.0.0" @@ -2765,32 +2585,32 @@ gauge@^5.0.0: gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-func-name@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-stream@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-7.0.0.tgz#f5695721f481f5581beb9d11cb90c41ddfceea18" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-7.0.0.tgz" integrity sha512-ql6FW5b8tgMYvI4UaoxG3EQN3VyZ6VeQpxNBGg5BZ4xD4u+HJeprzhMMA4OCBEGQgSR+m87pstWMpiVW64W8Fw== git-log-parser@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/git-log-parser/-/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" + resolved "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz" integrity sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA== dependencies: argv-formatter "~1.0.0" @@ -2802,21 +2622,30 @@ git-log-parser@^1.2.0: glob-parent@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + 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" -glob@7.2.3, glob@^7.1.3, glob@^7.1.4: +glob@^10.2.2, glob@^10.2.4: + version "10.2.4" + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.0.3" + minimatch "^9.0.0" + minipass "^5.0.0 || ^6.0.0" + path-scurry "^1.7.0" + +glob@^7.1.3: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -2826,27 +2655,49 @@ glob@7.2.3, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^10.2.2, glob@^10.2.7: - version "10.3.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.1.tgz#9789cb1b994515bedb811a6deca735b5c37d2bf4" - integrity sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw== +glob@^7.1.4: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: - foreground-child "^3.1.0" - jackspeak "^2.0.3" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2" - path-scurry "^1.10.0" + 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@^8.0.1: + version "8.1.0" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@7.2.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" global-dirs@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz" integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== dependencies: ini "^1.3.4" global-modules@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: global-prefix "^1.0.1" @@ -2855,14 +2706,14 @@ global-modules@^1.0.0: global-modules@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== dependencies: global-prefix "^3.0.0" global-prefix@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== dependencies: expand-tilde "^2.0.2" @@ -2873,7 +2724,7 @@ global-prefix@^1.0.1: global-prefix@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== dependencies: ini "^1.3.5" @@ -2882,19 +2733,19 @@ global-prefix@^3.0.0: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" globby@^11.0.1, globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -2905,9 +2756,7 @@ globby@^11.0.1, globby@^11.1.0: slash "^3.0.0" globby@^13.1.4: - version "13.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.0.tgz#7dd5678d765c4680c2e6d106230d86cb727cb1af" - integrity sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ== + version "13.1.4" dependencies: dir-glob "^3.0.1" fast-glob "^3.2.11" @@ -2917,32 +2766,37 @@ globby@^13.1.4: globjoin@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + resolved "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz" integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: +graceful-fs@^4.2.11, graceful-fs@^4.2.6: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + grapheme-splitter@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== handlebars@^4.7.7: version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== dependencies: minimist "^1.2.5" @@ -2954,85 +2808,85 @@ handlebars@^4.7.7: hard-rejection@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-unicode@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hi-base32@^0.5.1: version "0.5.1" - resolved "https://registry.yarnpkg.com/hi-base32/-/hi-base32-0.5.1.tgz#1279f2ddae2673219ea5870c2121d2a33132857e" + resolved "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz" integrity sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA== homedir-polyfill@^1.0.1: version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: parse-passwd "^1.0.0" hook-std@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-3.0.0.tgz#47038a01981e07ce9d83a6a3b2eb98cad0f7bd58" + resolved "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz" integrity sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw== hosted-git-info@^2.1.4: version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" hosted-git-info@^6.0.0, hosted-git-info@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz" integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== dependencies: lru-cache "^7.5.1" html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== html-tags@^3.2.0: version "3.3.1" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz" integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== -http-cache-semantics@^4.1.1: +http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" @@ -3041,7 +2895,7 @@ http-proxy-agent@^5.0.0: http-proxy-agent@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz" integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== dependencies: agent-base "^7.1.0" @@ -3049,7 +2903,7 @@ http-proxy-agent@^7.0.0: https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -3057,7 +2911,7 @@ https-proxy-agent@^5.0.0: https-proxy-agent@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz#75cb70d04811685667183b31ab158d006750418a" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz" integrity sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw== dependencies: agent-base "^7.0.2" @@ -3065,55 +2919,55 @@ https-proxy-agent@^7.0.0: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== human-signals@^4.3.0: version "4.3.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz" integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.6.2: version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore-walk@^6.0.0: version "6.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.3.tgz#0fcdb6decaccda35e308a7b0948645dd9523b7bb" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz" integrity sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA== dependencies: minimatch "^9.0.0" ignore@^5.2.0, ignore@^5.2.1: version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -3121,55 +2975,56 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: import-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" + resolved "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz" integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== import-lazy@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz" integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== indent-string@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz" integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== +infer-owner@^1.0.4: + version "1.0.4" + inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -ini@^4.1.0, ini@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" - integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== +ini@^4.1.0: + version "4.1.0" init-package-json@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" + resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-5.0.0.tgz" integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== dependencies: npm-package-arg "^10.0.0" @@ -3182,7 +3037,7 @@ init-package-json@^5.0.0: inquirer@8.2.5: version "8.2.5" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" + resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz" integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== dependencies: ansi-escapes "^4.2.1" @@ -3203,7 +3058,7 @@ inquirer@8.2.5: into-stream@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-7.0.0.tgz#d1a211e146be8acfdb84dabcbf00fe8205e72936" + resolved "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz" integrity sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw== dependencies: from2 "^2.3.0" @@ -3211,140 +3066,140 @@ into-stream@^7.0.0: ip-regex@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz" integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== ip@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-cidr@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" + resolved "https://registry.npmjs.org/is-cidr/-/is-cidr-4.0.2.tgz" integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== dependencies: cidr-regex "^3.1.1" is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1: version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz" integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: has "^1.0.3" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-lambda@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-path-cwd@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== is-plain-object@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-stream@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== is-text-path@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== dependencies: text-extensions "^1.0.0" is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-unicode-supported@^1.2.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== is-utf8@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== is-windows@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== issue-parser@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" + resolved "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz" integrity sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA== dependencies: lodash.capitalize "^4.2.1" @@ -3355,12 +3210,12 @@ issue-parser@^6.0.0: istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-report@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -3369,16 +3224,14 @@ istanbul-lib-report@^3.0.0: istanbul-reports@^3.1.4: version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" jackspeak@^2.0.3: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" - integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== + version "2.2.0" dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: @@ -3386,140 +3239,151 @@ jackspeak@^2.0.3: java-properties@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" + resolved "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz" integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== js-sha256@^0.9.0: version "0.9.0" - resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" + resolved "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz" integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== js-sha3@^0.8.0: version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== js-sha512@^0.8.0: version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha512/-/js-sha512-0.8.0.tgz#dd22db8d02756faccf19f218e3ed61ec8249f7d4" + resolved "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz" integrity sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ== js-string-escape@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + resolved "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz" integrity sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg== js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== json-bigint@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz" integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== dependencies: bignumber.js "^9.0.0" json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + 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-parse-even-better-errors@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz" integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stringify-nice@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + resolved "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz" integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== json-stringify-safe@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^2.2.2: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonc-parser@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.2.0, jsonparse@^1.3.1: +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +jsonparse@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== +JSONStream@^1.0.4: + version "1.3.5" + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + just-diff-apply@^5.2.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" + resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz" integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== just-diff@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" + resolved "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz" integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== known-css-properties@^0.26.0: version "0.26.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.26.0.tgz#008295115abddc045a9f4ed7e2a84dc8b3a77649" + resolved "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz" integrity sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg== levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -3527,18 +3391,16 @@ levn@^0.4.1: libnpmaccess@^7.0.2: version "7.0.2" - resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-7.0.2.tgz#7f056c8c933dd9c8ba771fa6493556b53c5aac52" + resolved "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-7.0.2.tgz" integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw== dependencies: npm-package-arg "^10.1.0" npm-registry-fetch "^14.0.3" -libnpmdiff@^5.0.18: - version "5.0.18" - resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-5.0.18.tgz#58dae566f30f4ebcd1de8834530a3da739555623" - integrity sha512-KJeZxdI+tvsJMjFvyDOqg4lkcewRU8njf7N97uJXhW6IWr0w2nvICnHq5jt7gcmo2I9p9Tq6cu+6q+/2DrK9qg== +libnpmdiff@^5.0.17: + version "5.0.17" dependencies: - "@npmcli/arborist" "^6.2.10" + "@npmcli/arborist" "^6.2.9" "@npmcli/disparity-colors" "^3.0.0" "@npmcli/installed-package-contents" "^2.0.2" binary-extensions "^2.2.0" @@ -3548,13 +3410,12 @@ libnpmdiff@^5.0.18: pacote "^15.0.8" tar "^6.1.13" -libnpmexec@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-6.0.1.tgz#187aac7f49b5ad4be1c0c446716f74a9adaeae02" - integrity sha512-4CLWMjGSthYC/UED6Z2rNN6oR/5kHqddmfArP4L6mdGefLU3aA7SnjLIGsFmc92Bkj4ktnqj3OwD5mYI81nOkw== +libnpmexec@^5.0.17: + version "5.0.17" dependencies: - "@npmcli/arborist" "^6.2.10" + "@npmcli/arborist" "^6.2.9" "@npmcli/run-script" "^6.0.0" + chalk "^4.1.0" ci-info "^3.7.1" npm-package-arg "^10.1.0" npmlog "^7.0.1" @@ -3565,16 +3426,14 @@ libnpmexec@^6.0.1: semver "^7.3.7" walk-up-path "^3.0.1" -libnpmfund@^4.0.18: - version "4.0.18" - resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-4.0.18.tgz#30593edfaa4becc51a1df2b7a715a295aa1da327" - integrity sha512-pJaWkHal9/qncuVQWoqzFvZ7vSBz9YvoBO+q/R+Sq4WYZMsB1qrVCzbYCYhLqfVlSUNV/6DH0BF3AUckHHOhIQ== +libnpmfund@^4.0.17: + version "4.0.17" dependencies: - "@npmcli/arborist" "^6.2.10" + "@npmcli/arborist" "^6.2.9" libnpmhook@^9.0.3: version "9.0.3" - resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-9.0.3.tgz#5dbd6a146feb7e11993d36a26f750ae2347bb1d9" + resolved "https://registry.npmjs.org/libnpmhook/-/libnpmhook-9.0.3.tgz" integrity sha512-wMZe58sI7KLhg0+nUWZW5KdMfjNNcOIIbkoP19BDHYoUF9El7eeUWkGNxUGzpHkPKiGoQ1z/v6CYin4deebeuw== dependencies: aproba "^2.0.0" @@ -3582,26 +3441,22 @@ libnpmhook@^9.0.3: libnpmorg@^5.0.4: version "5.0.4" - resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-5.0.4.tgz#94eec2b84fbef736457eb27894c972ae6f5cac82" + resolved "https://registry.npmjs.org/libnpmorg/-/libnpmorg-5.0.4.tgz" integrity sha512-YqYXLMAN0Y1eJH4w3hUFN9648xfSdvJANMsdeZTOWJOW4Pqp8qapJFzQdqCfUkg+tEuQmnaFQQKXvkMZC51+Mw== dependencies: aproba "^2.0.0" npm-registry-fetch "^14.0.3" -libnpmpack@^5.0.18: - version "5.0.18" - resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-5.0.18.tgz#bdabd7798a98a0241a5078df2902cd17049789c0" - integrity sha512-Xvb8FkULAY9VXqMCh+S9bl7bb6l/j+xDXRsfyP0nSezW8QklFA4VWLgZgm9PdGupZWC759CYaIPaaXTkIUPYag== +libnpmpack@^5.0.17: + version "5.0.17" dependencies: - "@npmcli/arborist" "^6.2.10" + "@npmcli/arborist" "^6.2.9" "@npmcli/run-script" "^6.0.0" npm-package-arg "^10.1.0" pacote "^15.0.8" -libnpmpublish@^7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.4.0.tgz#c396e0a56adc1511105cd4d4dec8798b3a5c2680" - integrity sha512-DoMMLif02eWBRDhKMov2TKFEexYaUD24L4QPfbteND2CdgrxCTRM4o8sj0XKcylcwcRxcp8i/IKeWTq0lPP53g== +libnpmpublish@^7.2.0: + version "7.2.0" dependencies: ci-info "^3.6.1" normalize-package-data "^5.0.0" @@ -3614,14 +3469,14 @@ libnpmpublish@^7.4.0: libnpmsearch@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-6.0.2.tgz#b6a531a312855dd3bf84dd273b1033dd09b4cbec" + resolved "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-6.0.2.tgz" integrity sha512-p+5BF19AvnVg8mcIQhy6yWhI6jHQRVMYaIaKeITEfYAffWsqbottA/WZdMtHL76hViC6SFM1WdclM1w5eAIa1g== dependencies: npm-registry-fetch "^14.0.3" libnpmteam@^5.0.3: version "5.0.3" - resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-5.0.3.tgz#196657e9d87c0cc914c44fee588ad2b838074a3c" + resolved "https://registry.npmjs.org/libnpmteam/-/libnpmteam-5.0.3.tgz" integrity sha512-7XOGhi45s+ml6TyrhJUTyrErcoDMKGKfEtiTEco4ofU7BGGAUOalVztKMVLLJgJOOXdIAIlzCHqkTXEuSiyCiA== dependencies: aproba "^2.0.0" @@ -3629,7 +3484,7 @@ libnpmteam@^5.0.3: libnpmversion@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-4.0.2.tgz#cad9cd1b287fcf9576a64edfe71491b49a65d06f" + resolved "https://registry.npmjs.org/libnpmversion/-/libnpmversion-4.0.2.tgz" integrity sha512-n1X70mFHv8Piy4yos+MFWUARSkTbyV5cdsHScaIkuwYvRAF/s2VtYScDzWB4Oe8uNEuGNdjiRR1E/Dh1tMvv6g== dependencies: "@npmcli/git" "^4.0.1" @@ -3640,17 +3495,17 @@ libnpmversion@^4.0.2: lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lines-and-columns@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz" integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== load-json-file@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== dependencies: graceful-fs "^4.1.2" @@ -3660,12 +3515,12 @@ load-json-file@^4.0.0: local-pkg@^0.4.3: version "0.4.3" - resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" + resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz" integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== locate-path@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" @@ -3673,93 +3528,93 @@ locate-path@^2.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" locate-path@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz" integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== dependencies: p-locate "^6.0.0" lodash-es@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== lodash.capitalize@^4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" + resolved "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz" integrity sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw== lodash.escaperegexp@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + resolved "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz" integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== lodash.ismatch@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== lodash.isplainobject@^4.0.6: version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== lodash.isstring@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== lodash.map@^4.5.1: version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + resolved "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz" integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.mergewith@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + resolved "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz" integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== lodash.truncate@^4.4.2: version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== lodash.uniq@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== lodash.uniqby@^4.7.0: version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" + resolved "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz" integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== -lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4: +lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4, lodash@4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -3767,62 +3622,80 @@ log-symbols@^4.1.0: longest@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" + resolved "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz" integrity sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q== loupe@^2.3.1, loupe@^2.3.6: version "2.3.6" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz" integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== dependencies: get-func-name "^2.0.0" lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -"lru-cache@^9.1.1 || ^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" - integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== +lru-cache@^9.1.1: + version "9.1.1" magic-string@^0.30.0: version "0.30.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.0.tgz#fd58a4748c5c4547338a424e90fa5dd17f4de529" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz" integrity sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ== dependencies: "@jridgewell/sourcemap-codec" "^1.4.13" make-dir@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" make-error@^1.1.1: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.0.3, make-fetch-happen@^11.1.1: +make-fetch-happen@^10.0.3: + version "10.2.1" + dependencies: + agentkeepalive "^4.2.1" + cacache "^16.1.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^3.1.6" + minipass-collect "^1.0.2" + minipass-fetch "^2.0.3" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^9.0.0" + +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.0, make-fetch-happen@^11.1.1: version "11.1.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz" integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== dependencies: agentkeepalive "^4.2.1" @@ -3843,17 +3716,17 @@ make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.0.3, map-obj@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== map-obj@^4.0.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== marked-terminal@^5.1.1: version "5.2.0" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.2.0.tgz#c5370ec2bae24fb2b34e147b731c94fa933559d3" + resolved "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz" integrity sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA== dependencies: ansi-escapes "^6.2.0" @@ -3863,27 +3736,25 @@ marked-terminal@^5.1.1: node-emoji "^1.11.0" supports-hyperlinks "^2.3.0" -marked@^4.1.0: +"marked@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", marked@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== mathml-tag-names@^2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" + resolved "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== md5-hex@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-3.0.1.tgz#be3741b510591434b2784d79e556eefc2c9a8e5c" + resolved "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz" integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== dependencies: blueimp-md5 "^2.10.0" -meow@^8.1.2: +meow@^8.0.0: version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== dependencies: "@types/minimist" "^1.2.0" camelcase-keys "^6.2.2" @@ -3899,7 +3770,7 @@ meow@^8.1.2: meow@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" + resolved "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz" integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== dependencies: "@types/minimist" "^1.2.0" @@ -3917,22 +3788,22 @@ meow@^9.0.0: merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - merge@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" + resolved "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz" integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -3940,67 +3811,93 @@ micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: mime@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz" integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-fn@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== min-indent@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.0.5: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.0, minimatch@^9.0.1: - version "9.0.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.2.tgz#397e387fff22f6795844d00badc903a3d5de7057" - integrity sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg== +minimatch@^5.0.1: + version "5.1.6" + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.0: + version "9.0.0" dependencies: brace-expansion "^2.0.1" minimist-options@4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== dependencies: arrify "^1.0.1" is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - minimist@^1.2.0, minimist@^1.2.5: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +minimist@1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + minipass-collect@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: minipass "^3.0.0" +minipass-fetch@^2.0.3: + version "2.1.2" + dependencies: + minipass "^3.1.6" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + minipass-fetch@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz" integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ== dependencies: minipass "^5.0.0" @@ -4011,14 +3908,14 @@ minipass-fetch@^3.0.0: minipass-flush@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" minipass-json-stream@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + resolved "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== dependencies: jsonparse "^1.3.1" @@ -4026,137 +3923,123 @@ minipass-json-stream@^1.0.1: minipass-pipeline@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" -minipass@^3.0.0: +minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" -minipass@^5.0.0: +minipass@^5.0.0, "minipass@^5.0.0 || ^6.0.0": version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" - integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== - minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" yallist "^4.0.0" -mkdirp@^1.0.3: +mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mlly@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.0.tgz#830c10d63f1f97bd8785377b24dc2a15d972832b" - integrity sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg== + version "1.3.0" dependencies: - acorn "^8.9.0" - pathe "^1.1.1" + acorn "^8.8.2" + pathe "^1.1.0" pkg-types "^1.0.3" ufo "^1.1.2" -modify-values@^1.0.1: +modify-values@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@^2.0.0, ms@^2.1.2: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== mute-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz" integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + nanoid@^3.3.6: version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== natural-compare-lite@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== negotiator@^0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== neo-async@^2.6.0: version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== nerf-dart@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/nerf-dart/-/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" + resolved "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz" integrity sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g== node-emoji@^1.11.0: version "1.11.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== dependencies: lodash "^4.17.21" node-fetch@^2.6.11, node-fetch@^2.6.7: - version "2.6.12" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" - integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== + version "2.6.11" dependencies: whatwg-url "^5.0.0" -node-gyp@^9.0.0, node-gyp@^9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369" - integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== +node-gyp@^9.0.0, node-gyp@^9.3.1: + version "9.3.1" dependencies: env-paths "^2.2.0" - exponential-backoff "^3.1.1" glob "^7.1.4" graceful-fs "^4.2.6" - make-fetch-happen "^11.0.3" + make-fetch-happen "^10.0.3" nopt "^6.0.0" npmlog "^6.0.0" rimraf "^3.0.2" @@ -4166,26 +4049,24 @@ node-gyp@^9.0.0, node-gyp@^9.4.0: node-releases@^2.0.12: version "2.0.12" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz" integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== nopt@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + resolved "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== dependencies: abbrev "^1.0.0" -nopt@^7.0.0, nopt@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" - integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== +nopt@^7.0.0, nopt@^7.1.0: + version "7.1.0" dependencies: abbrev "^2.0.0" normalize-package-data@^2.5.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -4193,9 +4074,19 @@ normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.0, normalize-package-data@^3.0.2: +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: hosted-git-info "^4.0.1" @@ -4205,7 +4096,7 @@ normalize-package-data@^3.0.0, normalize-package-data@^3.0.2: normalize-package-data@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz" integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== dependencies: hosted-git-info "^6.0.0" @@ -4215,46 +4106,46 @@ normalize-package-data@^5.0.0: normalize-path@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@^6.0.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== normalize-url@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz" integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== -npm-audit-report@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-5.0.0.tgz#83ac14aeff249484bde81eff53c3771d5048cf95" - integrity sha512-EkXrzat7zERmUhHaoren1YhTxFwsOu5jypE84k6632SXTHcQE1z8V51GC6GVZt8LxkC+tbBcKMUBZAgk8SUSbw== +npm-audit-report@^4.0.0: + version "4.0.0" + dependencies: + chalk "^4.0.0" npm-bundled@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz" integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== dependencies: npm-normalize-package-bin "^3.0.0" npm-install-checks@^6.0.0, npm-install-checks@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.1.1.tgz#b459b621634d06546664207fde16810815808db1" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz" integrity sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw== dependencies: semver "^7.1.1" npm-normalize-package-bin@^3.0.0, npm-normalize-package-bin@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz" integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: version "10.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz" integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== dependencies: hosted-git-info "^6.0.0" @@ -4264,14 +4155,14 @@ npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: npm-packlist@^7.0.0: version "7.0.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz" integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== dependencies: ignore-walk "^6.0.0" npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz#c6acd97d1ad4c5dbb80eac7b386b03ffeb289e5f" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz" integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== dependencies: npm-install-checks "^6.0.0" @@ -4281,7 +4172,7 @@ npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1: npm-profile@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-7.0.1.tgz#a37dae08b22e662ece2c6e08946f9fcd9fdef663" + resolved "https://registry.npmjs.org/npm-profile/-/npm-profile-7.0.1.tgz" integrity sha512-VReArOY/fCx5dWL66cbJ2OMogTQAVVQA//8jjmjkarboki3V7UJ0XbGFW+khRwiAJFQjuH0Bqr/yF7Y5RZdkMQ== dependencies: npm-registry-fetch "^14.0.0" @@ -4289,7 +4180,7 @@ npm-profile@^7.0.1: npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: version "14.0.5" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz" integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== dependencies: make-fetch-happen "^11.0.0" @@ -4302,59 +4193,57 @@ npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0 npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" npm-run-path@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== dependencies: path-key "^4.0.0" npm-user-validate@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-2.0.0.tgz#7b69bbbff6f7992a1d9a8968d52fd6b6db5431b6" + resolved "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-2.0.0.tgz" integrity sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q== npm@^9.5.0: - version "9.7.2" - resolved "https://registry.yarnpkg.com/npm/-/npm-9.7.2.tgz#95fdbba1b3b8e918f253cac1a45b38655f324ed5" - integrity sha512-LLoOudiSURxzRxfGj+vsD+hKKv2EfxyshDOznxruIkZMouvbaF5sFm4yAwHqxS8aVaOdRl03pRmGpcrFMqMt3g== + version "9.6.7" dependencies: "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^6.2.10" - "@npmcli/config" "^6.2.1" + "@npmcli/arborist" "^6.2.9" + "@npmcli/config" "^6.1.7" "@npmcli/map-workspaces" "^3.0.4" - "@npmcli/package-json" "^3.1.1" + "@npmcli/package-json" "^3.1.0" "@npmcli/run-script" "^6.0.2" abbrev "^2.0.0" archy "~1.0.0" - cacache "^17.1.3" - chalk "^5.2.0" + cacache "^17.1.2" + chalk "^4.1.2" ci-info "^3.8.0" cli-columns "^4.0.0" cli-table3 "^0.6.3" columnify "^1.6.0" fastest-levenshtein "^1.0.16" fs-minipass "^3.0.2" - glob "^10.2.7" + glob "^10.2.4" graceful-fs "^4.2.11" hosted-git-info "^6.1.1" - ini "^4.1.1" + ini "^4.1.0" init-package-json "^5.0.0" is-cidr "^4.0.2" json-parse-even-better-errors "^3.0.0" libnpmaccess "^7.0.2" - libnpmdiff "^5.0.18" - libnpmexec "^6.0.1" - libnpmfund "^4.0.18" + libnpmdiff "^5.0.17" + libnpmexec "^5.0.17" + libnpmfund "^4.0.17" libnpmhook "^9.0.3" libnpmorg "^5.0.4" - libnpmpack "^5.0.18" - libnpmpublish "^7.4.0" + libnpmpack "^5.0.17" + libnpmpublish "^7.2.0" libnpmsearch "^6.0.2" libnpmteam "^5.0.3" libnpmversion "^4.0.2" @@ -4363,9 +4252,9 @@ npm@^9.5.0: minipass "^5.0.0" minipass-pipeline "^1.2.4" ms "^2.1.2" - node-gyp "^9.4.0" - nopt "^7.2.0" - npm-audit-report "^5.0.0" + node-gyp "^9.3.1" + nopt "^7.1.0" + npm-audit-report "^4.0.0" npm-install-checks "^6.1.1" npm-package-arg "^10.1.0" npm-pick-manifest "^8.0.1" @@ -4374,16 +4263,16 @@ npm@^9.5.0: npm-user-validate "^2.0.0" npmlog "^7.0.1" p-map "^4.0.0" - pacote "^15.2.0" + pacote "^15.1.3" parse-conflict-json "^3.0.1" proc-log "^3.0.0" qrcode-terminal "^0.12.0" read "^2.1.0" - semver "^7.5.2" - sigstore "^1.6.0" + read-package-json "^6.0.3" + read-package-json-fast "^3.0.2" + semver "^7.5.1" ssri "^10.0.4" - supports-color "^9.3.1" - tar "^6.1.15" + tar "^6.1.14" text-table "~0.2.0" tiny-relative-date "^1.3.0" treeverse "^3.0.0" @@ -4393,7 +4282,7 @@ npm@^9.5.0: npmlog@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== dependencies: are-we-there-yet "^3.0.0" @@ -4403,7 +4292,7 @@ npmlog@^6.0.0: npmlog@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz" integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== dependencies: are-we-there-yet "^4.0.0" @@ -4413,40 +4302,38 @@ npmlog@^7.0.1: once@^1.3.0, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" onetime@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== dependencies: mimic-fn "^4.0.0" -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== +optionator@^0.9.1: + version "0.9.1" 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" + word-wrap "^1.2.3" ora@^5.4.1: version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: bl "^4.1.0" @@ -4461,120 +4348,118 @@ ora@^5.4.1: os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-each-series@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-3.0.0.tgz#d1aed5e96ef29864c897367a7d2a628fdc960806" + resolved "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz" integrity sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw== p-filter@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-3.0.0.tgz#ce50e03b24b23930e11679ab8694bd09a2d7ed35" + resolved "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz" integrity sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg== dependencies: p-map "^5.1.0" p-is-promise@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" + resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz" integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== p-limit@^1.1.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-limit@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== dependencies: yocto-queue "^1.0.0" p-locate@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-locate@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== dependencies: p-limit "^4.0.0" p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" p-map@^5.1.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-5.5.0.tgz#054ca8ca778dfa4cf3f8db6638ccb5b937266715" + resolved "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz" integrity sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg== dependencies: aggregate-error "^4.0.0" p-reduce@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== p-reduce@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-3.0.0.tgz#f11773794792974bd1f7a14c72934248abff4160" + resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz" integrity sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q== p-try@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pacote@^15.0.0, pacote@^15.0.8, pacote@^15.2.0: - version "15.2.0" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" - integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== +pacote@^15.0.0, pacote@^15.0.8, pacote@^15.1.3: + version "15.1.3" dependencies: "@npmcli/git" "^4.0.0" "@npmcli/installed-package-contents" "^2.0.1" @@ -4597,14 +4482,14 @@ pacote@^15.0.0, pacote@^15.0.8, pacote@^15.2.0: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + 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" parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" + resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz" integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== dependencies: json-parse-even-better-errors "^3.0.0" @@ -4613,7 +4498,7 @@ parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1: parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" @@ -4621,7 +4506,7 @@ parse-json@^4.0.0: parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + 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" @@ -4631,7 +4516,7 @@ parse-json@^5.0.0, parse-json@^5.2.0: parse-json@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-7.0.0.tgz#51c0713f233b804eb5adee3ef1e75d3243e0ff06" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz" integrity sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw== dependencies: "@babel/code-frame" "^7.21.4" @@ -4642,85 +4527,83 @@ parse-json@^7.0.0: parse-passwd@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-exists@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-key@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.0.tgz#0ffbd4c1f7de9600f98a1405507d9f9acb438ab3" - integrity sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g== +path-scurry@^1.7.0: + version "1.9.1" dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2" + lru-cache "^9.1.1" + minipass "^5.0.0 || ^6.0.0" path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pathe@^1.1.0, pathe@^1.1.1: +pathe@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" + resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz" integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== pathval@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pkg-conf@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" + resolved "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz" integrity sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g== dependencies: find-up "^2.0.0" @@ -4728,7 +4611,7 @@ pkg-conf@^2.1.0: pkg-types@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz" integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== dependencies: jsonc-parser "^3.2.0" @@ -4737,27 +4620,27 @@ pkg-types@^1.0.3: postcss-media-query-parser@^0.2.3: version "0.2.3" - resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + resolved "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz" integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== postcss-resolve-nested-selector@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + resolved "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz" integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw== postcss-safe-parser@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz#bb4c29894171a94bc5c996b9a30317ef402adaa1" + resolved "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz" integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== postcss-scss@^4.0.2: version "4.0.6" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.6.tgz#5d62a574b950a6ae12f2aa89b60d63d9e4432bfd" + resolved "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz" integrity sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ== postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11: version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== dependencies: cssesc "^3.0.0" @@ -4765,17 +4648,17 @@ postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11: postcss-sorting@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-sorting/-/postcss-sorting-7.0.1.tgz#923b5268451cf2d93ebf8835e17a6537757049a5" + resolved "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz" integrity sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g== postcss-value-parser@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.3.11, postcss@^8.4.19, postcss@^8.4.23: +postcss@^8.3.11, postcss@^8.3.3, postcss@^8.3.9, postcss@^8.4.19, postcss@^8.4.23: version "8.4.24" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz" integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== dependencies: nanoid "^3.3.6" @@ -4784,24 +4667,24 @@ postcss@^8.3.11, postcss@^8.4.19, postcss@^8.4.23: prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier-linter-helpers@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" -prettier@^2.8.1: +prettier@^2.8.1, prettier@>=2.0.0: version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pretty-format@^27.5.1: version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== dependencies: ansi-regex "^5.0.1" @@ -4810,37 +4693,37 @@ pretty-format@^27.5.1: proc-log@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz" integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== process@^0.11.10: version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== promise-all-reject-late@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + resolved "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz" integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== promise-call-limit@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.2.tgz#f64b8dd9ef7693c9c7613e7dfe8d6d24de3031ea" + resolved "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz" integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA== promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== dependencies: err-code "^2.0.2" @@ -4848,39 +4731,42 @@ promise-retry@^2.0.1: promzard@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" + resolved "https://registry.npmjs.org/promzard/-/promzard-1.0.0.tgz" integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== dependencies: read "^2.0.0" proto-list@~1.2.1: version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== punycode@^2.1.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +q@^1.5.1: + version "1.5.1" + qrcode-terminal@^0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + resolved "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz" integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== -rc@1.2.8, rc@^1.2.8: +rc@^1.2.8, rc@1.2.8: version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -4890,31 +4776,29 @@ rc@1.2.8, rc@^1.2.8: react-is@^17.0.1: version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== react-refresh@^0.14.0: version "0.14.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" + resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== read-cmd-shim@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz" integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz" integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== dependencies: json-parse-even-better-errors "^3.0.0" npm-normalize-package-bin "^3.0.0" -read-package-json@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" - integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== +read-package-json@^6.0.0, read-package-json@^6.0.3: + version "6.0.3" dependencies: glob "^10.2.2" json-parse-even-better-errors "^3.0.0" @@ -4923,16 +4807,25 @@ read-package-json@^6.0.0: read-pkg-up@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg-up@^9.0.0, read-pkg-up@^9.1.0: +read-pkg-up@^9.0.0: + version "9.1.0" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz" + integrity sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg== + dependencies: + find-up "^6.3.0" + read-pkg "^7.1.0" + type-fest "^2.5.0" + +read-pkg-up@^9.1.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-9.1.0.tgz#38ca48e0bc6c6b260464b14aad9bcd4e5b1fbdc3" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz" integrity sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg== dependencies: find-up "^6.3.0" @@ -4941,7 +4834,7 @@ read-pkg-up@^9.0.0, read-pkg-up@^9.1.0: read-pkg@^5.0.0, read-pkg@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -4951,7 +4844,7 @@ read-pkg@^5.0.0, read-pkg@^5.2.0: read-pkg@^7.1.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-7.1.0.tgz#438b4caed1ad656ba359b3e00fd094f3c427a43e" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz" integrity sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg== dependencies: "@types/normalize-package-data" "^2.4.1" @@ -4961,7 +4854,7 @@ read-pkg@^7.1.0: read-pkg@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-8.0.0.tgz#78b93774c15a3f151b56d5790d5127a5cb9fc507" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz" integrity sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw== dependencies: "@types/normalize-package-data" "^2.4.1" @@ -4971,14 +4864,14 @@ read-pkg@^8.0.0: read@^2.0.0, read@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" + resolved "https://registry.npmjs.org/read/-/read-2.1.0.tgz" integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== dependencies: mute-stream "~1.0.0" readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@~2.3.6: version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + 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" @@ -4989,9 +4882,27 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.0, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.0.0, readable-stream@3: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.4.0: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -4999,9 +4910,7 @@ readable-stream@^3.0.0, readable-stream@^3.4.0, readable-stream@^3.6.0: util-deprecate "^1.0.1" readable-stream@^4.1.0: - version "4.4.1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.1.tgz#fa0f0878c3bc0c12b6a82e4e58c5dc160e1faaa2" - integrity sha512-llAHX9QC25bz5RPIoTeJxPaA/hgryaldValRhVZ2fK9bzbmFiscpz8fw6iBTvJfAk1w4FC1KXQme/nO7fbKyKg== + version "4.4.0" dependencies: abort-controller "^3.0.0" buffer "^6.0.3" @@ -5010,7 +4919,7 @@ readable-stream@^4.1.0: redent@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: indent-string "^4.0.0" @@ -5018,38 +4927,38 @@ redent@^3.0.0: redeyed@~2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + resolved "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz" integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== dependencies: esprima "~4.0.0" registry-auth-token@^4.0.0: version "4.2.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" + resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz" integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== dependencies: rc "1.2.8" registry-auth-token@^5.0.0: version "5.0.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756" + resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz" integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== dependencies: "@pnpm/npm-conf" "^2.1.0" require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== dependencies: expand-tilde "^2.0.0" @@ -5057,24 +4966,24 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-global@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" + resolved "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz" integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== dependencies: global-dirs "^0.1.1" resolve@^1.10.0: version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: is-core-module "^2.11.0" @@ -5083,7 +4992,7 @@ resolve@^1.10.0: restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -5091,65 +5000,63 @@ restore-cursor@^3.1.0: retry@^0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rollup@^3.21.0: - version "3.26.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.26.0.tgz#9f2e0316a4ca641911cefd8515c562a9124e6130" - integrity sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg== + version "3.23.0" optionalDependencies: fsevents "~2.3.2" run-async@^2.4.0: version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" rxjs@^7.5.5: version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -semantic-release@21.0.3: +semantic-release@>=18.0.0, semantic-release@>=19.0.0, semantic-release@>=20.1.0, semantic-release@21.0.3: version "21.0.3" - resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-21.0.3.tgz#e1c584dd045024a1372a5bf51b60d23fe5e26893" + resolved "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.3.tgz" integrity sha512-DS/0P1DrL8cKpkhN7JCzhkbOge9sURSRqUlmEAjeXTzK0lOSWhp+oJJcji0bLFEIyu3DuYEeQrWCdJNwRHrFdw== dependencies: "@semantic-release/commit-analyzer" "^10.0.0" @@ -5183,96 +5090,97 @@ semantic-release@21.0.3: semver-diff@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" + resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz" integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== dependencies: semver "^7.3.5" semver-regex@^4.0.5: version "4.0.5" - resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-4.0.5.tgz#fbfa36c7ba70461311f5debcb3928821eb4f9180" + resolved "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz" integrity sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw== -"semver@2 || 3 || 4 || 5": - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^6.0.0, semver@^6.3.0: +semver@^6.3.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2: - version "7.5.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== +semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.1: + version "7.5.1" dependencies: lru-cache "^6.0.0" +"semver@2 || 3 || 4 || 5": + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + 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" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== siginfo@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz" integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz" integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== signale@^1.2.1: version "1.4.0" - resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" + resolved "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz" integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== dependencies: chalk "^2.3.2" figures "^2.0.0" pkg-conf "^2.1.0" -sigstore@^1.3.0, sigstore@^1.4.0, sigstore@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.7.0.tgz#9186e6c8ce1ab0cba5d97b414212d40f0a01564e" - integrity sha512-KP7QULhWdlu3hlp+jw2EvgWKlOGOY9McLj/jrchLjHNlNPK0KWIwF919cbmOp6QiKXLmPijR2qH/5KYWlbtG9Q== +sigstore@^1.3.0, sigstore@^1.4.0: + version "1.5.2" dependencies: "@sigstore/protobuf-specs" "^0.1.0" - "@sigstore/tuf" "^1.0.1" make-fetch-happen "^11.0.1" + tuf-js "^1.1.3" slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slash@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== slice-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" @@ -5281,12 +5189,12 @@ slice-ansi@^4.0.0: smart-buffer@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== socks-proxy-agent@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== dependencies: agent-base "^6.0.2" @@ -5295,7 +5203,7 @@ socks-proxy-agent@^7.0.0: socks@^2.6.2: version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== dependencies: ip "^2.0.0" @@ -5303,22 +5211,22 @@ socks@^2.6.2: source-map-js@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map@^0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== spawn-error-forwarder@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" + resolved "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz" integrity sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g== spdx-correct@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" @@ -5326,12 +5234,12 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" @@ -5339,158 +5247,182 @@ spdx-expression-parse@^3.0.0: spdx-license-ids@^3.0.0: version "3.0.13" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz" integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== -split2@^3.2.2: +split@^1.0.0: + version "1.0.1" + dependencies: + through "2" + +split2@^3.0.0: version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== dependencies: readable-stream "^3.0.0" split2@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" + resolved "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz" integrity sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg== dependencies: through2 "~2.0.0" -split@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - ssri@^10.0.0, ssri@^10.0.1, ssri@^10.0.4: version "10.0.4" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6" + resolved "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz" integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ== dependencies: minipass "^5.0.0" +ssri@^9.0.0: + version "9.0.1" + dependencies: + minipass "^3.1.1" + stackback@0.0.2: version "0.0.2" - resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== std-env@^3.3.2: version "3.3.3" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.3.tgz#a54f06eb245fdcfef53d56f3c0251f1d5c3d01fe" + resolved "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz" integrity sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg== stream-combiner2@~1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + resolved "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz" integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw== dependencies: duplexer2 "~0.1.0" readable-stream "^2.0.2" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + 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" + +"string-width-cjs@npm:string-width@^4.2.0": + 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" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + 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" -string-width@^5.0.1, string-width@^5.1.2: +string-width@^5.0.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + 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" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== +string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: - safe-buffer "~5.2.0" + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - safe-buffer "~5.1.0" + ansi-regex "^5.0.1" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + version "7.0.1" dependencies: ansi-regex "^6.0.1" -strip-bom@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== +strip-bom@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-final-newline@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== strip-indent@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: min-indent "^1.0.0" -strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1, strip-json-comments@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== strip-literal@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.0.1.tgz#0115a332710c849b4e46497891fb8d585e404bd2" + resolved "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.1.tgz" integrity sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q== dependencies: acorn "^8.8.2" style-search@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" + resolved "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz" integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== stylelint-config-recommended@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz#1c9e07536a8cd875405f8ecef7314916d94e7e40" + resolved "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz" integrity sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ== stylelint-config-sass-guidelines@^9.0.1: version "9.0.1" - resolved "https://registry.yarnpkg.com/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-9.0.1.tgz#3114ce780f2085ba9ea5da2b7d97a1e85e968fa7" + resolved "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-9.0.1.tgz" integrity sha512-N06PsVsrgKijQ3YT5hqKA7x3NUkgELTRI1cbWMqcYiCGG6MjzvNk6Cb5YYA1PrvrksBV76BvY9P9bAswojVMqA== dependencies: postcss-scss "^4.0.2" @@ -5499,7 +5431,7 @@ stylelint-config-sass-guidelines@^9.0.1: stylelint-order@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/stylelint-order/-/stylelint-order-5.0.0.tgz#abd20f6b85ac640774cbe40e70d3fe9c6fdf4400" + resolved "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz" integrity sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw== dependencies: postcss "^8.3.11" @@ -5507,7 +5439,7 @@ stylelint-order@^5.0.0: stylelint-scss@^4.0.0: version "4.7.0" - resolved "https://registry.yarnpkg.com/stylelint-scss/-/stylelint-scss-4.7.0.tgz#f986bf8c5a4b93eae2b67d3a3562eef822657908" + resolved "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz" integrity sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg== dependencies: postcss-media-query-parser "^0.2.3" @@ -5515,9 +5447,9 @@ stylelint-scss@^4.0.0: postcss-selector-parser "^6.0.11" postcss-value-parser "^4.2.0" -stylelint@^14.16.0: +stylelint@^14.0.0, stylelint@^14.0.1, stylelint@^14.10.0, stylelint@^14.16.0, "stylelint@^14.5.1 || ^15.0.0": version "14.16.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-14.16.1.tgz#b911063530619a1bbe44c2b875fd8181ebdc742d" + resolved "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz" integrity sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A== dependencies: "@csstools/selector-specificity" "^2.0.2" @@ -5561,26 +5493,21 @@ stylelint@^14.16.0: supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-color@^9.3.1: - version "9.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" - integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== - supports-hyperlinks@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== dependencies: has-flag "^4.0.0" @@ -5588,17 +5515,17 @@ supports-hyperlinks@^2.3.0: supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svg-tags@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + resolved "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz" integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== table@^6.8.1: version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + resolved "https://registry.npmjs.org/table/-/table-6.8.1.tgz" integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== dependencies: ajv "^8.0.1" @@ -5607,10 +5534,8 @@ table@^6.8.1: string-width "^4.2.3" strip-ansi "^6.0.1" -tar@^6.1.11, tar@^6.1.13, tar@^6.1.15, tar@^6.1.2: - version "6.1.15" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" - integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== +tar@^6.1.11, tar@^6.1.13, tar@^6.1.14, tar@^6.1.2: + version "6.1.14" dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" @@ -5621,12 +5546,12 @@ tar@^6.1.11, tar@^6.1.13, tar@^6.1.15, tar@^6.1.2: temp-dir@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz" integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== tempy@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-1.0.1.tgz#30fe901fd869cfb36ee2bd999805aa72fbb035de" + resolved "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz" integrity sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== dependencies: del "^6.0.0" @@ -5637,7 +5562,7 @@ tempy@^1.0.0: tempy@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/tempy/-/tempy-3.0.0.tgz#a6c0a15f5534a820e92c3e1369f1c1e87ebd6b68" + resolved "https://registry.npmjs.org/tempy/-/tempy-3.0.0.tgz" integrity sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA== dependencies: is-stream "^3.0.0" @@ -5647,7 +5572,7 @@ tempy@^3.0.0: test-exclude@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" @@ -5656,94 +5581,104 @@ test-exclude@^6.0.0: text-extensions@^1.0.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== -text-table@^0.2.0, text-table@~0.2.0: +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +text-table@~0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +through@^2.3.6, "through@>=2.2.7 <3", through@2: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +through2@^4.0.0: + version "4.0.2" + dependencies: + readable-stream "3" + through2@~2.0.0: version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" xtend "~4.0.1" -through@2, "through@>=2.2.7 <3", through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - time-zone@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" + resolved "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz" integrity sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA== tiny-relative-date@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + resolved "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz" integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== tinybench@^2.5.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.0.tgz#4711c99bbf6f3e986f67eb722fed9cddb3a68ba5" + resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz" integrity sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA== tinypool@^0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.5.0.tgz#3861c3069bf71e4f1f5aa2d2e6b3aaacc278961e" + resolved "https://registry.npmjs.org/tinypool/-/tinypool-0.5.0.tgz" integrity sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ== tinyspy@^2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.1.1.tgz#9e6371b00c259e5c5b301917ca18c01d40ae558c" + resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz" integrity sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w== tmp@^0.0.33: version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + 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@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + 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" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== traverse@~0.6.6: version "0.6.7" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" + resolved "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz" integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== treeverse@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" + resolved "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz" integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== trim-newlines@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -ts-node@^10.8.1, ts-node@^10.9.1: +ts-node@^10.8.1, ts-node@^10.9.1, ts-node@>=10: version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -5762,153 +5697,161 @@ ts-node@^10.8.1, ts-node@^10.9.1: tslib@^1.8.1: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.1.0, tslib@^2.4.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== + version "2.5.3" tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" -tuf-js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" - integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== +tuf-js@^1.1.3: + version "1.1.6" dependencies: "@tufjs/models" "1.0.4" debug "^4.3.4" - make-fetch-happen "^11.1.1" + make-fetch-happen "^11.1.0" tweetnacl@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.16.0: version "0.16.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz" integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== type-fest@^0.18.0: version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== type-fest@^1.0.1: version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== type-fest@^2.0.0, type-fest@^2.12.2, type-fest@^2.5.0: version "2.19.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== -type-fest@^3.0.0, type-fest@^3.8.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.12.0.tgz#4ce26edc1ccc59fc171e495887ef391fe1f5280e" - integrity sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA== +type-fest@^3.0.0: + version "3.11.1" -typescript@>=5.0.2, "typescript@^4.6.4 || ^5.0.0": - version "5.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" - integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== +type-fest@^3.8.0: + version "3.11.1" + +"typescript@^4.6.4 || ^5.0.0", typescript@>=3: + version "5.1.3" -typescript@^4.7.4, typescript@^4.9.4: +typescript@^4.7.4, typescript@^4.9.4, typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@>=5.0.2: + version "5.1.3" + ufo@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.1.2.tgz#d0d9e0fa09dece0c31ffd57bd363f030a35cfe76" + resolved "https://registry.npmjs.org/ufo/-/ufo-1.1.2.tgz" integrity sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ== uglify-js@^3.1.4: version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== +unique-filename@^2.0.0: + version "2.0.1" + dependencies: + unique-slug "^3.0.0" + unique-filename@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz" integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== dependencies: unique-slug "^4.0.0" +unique-slug@^3.0.0: + version "3.0.0" + dependencies: + imurmurhash "^0.1.4" + unique-slug@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz" integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== dependencies: imurmurhash "^0.1.4" unique-string@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: crypto-random-string "^2.0.0" unique-string@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" + resolved "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz" integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== dependencies: crypto-random-string "^4.0.0" universal-user-agent@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== universalify@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== update-browserslist-db@^1.0.11: version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== dependencies: escalade "^3.1.1" @@ -5916,34 +5859,34 @@ update-browserslist-db@^1.0.11: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" url-join@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" + resolved "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz" integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-compile-cache@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== v8-to-istanbul@^9.0.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz" integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" @@ -5952,7 +5895,7 @@ v8-to-istanbul@^9.0.0: validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" @@ -5960,14 +5903,14 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: validate-npm-package-name@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz" integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== dependencies: builtins "^5.0.0" vite-node@0.31.4: version "0.31.4" - resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.31.4.tgz#0437f76c35fa83f0a868d3fb5896ca9e164291f5" + resolved "https://registry.npmjs.org/vite-node/-/vite-node-0.31.4.tgz" integrity sha512-uzL377GjJtTbuc5KQxVbDu2xfU/x0wVjUtXQR2ihS21q/NK6ROr4oG0rsSkBBddZUVCwzfx22in76/0ZZHXgkQ== dependencies: cac "^6.7.14" @@ -5977,9 +5920,9 @@ vite-node@0.31.4: picocolors "^1.0.0" vite "^3.0.0 || ^4.0.0" -"vite@^3.0.0 || ^4.0.0", vite@^4.0.0: +"vite@^3.0.0 || ^4.0.0", vite@^4.0.0, vite@^4.2.0: version "4.3.9" - resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d" + resolved "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz" integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg== dependencies: esbuild "^0.17.5" @@ -5988,9 +5931,9 @@ vite-node@0.31.4: optionalDependencies: fsevents "~2.3.2" -vitest@^0.31.0: +vitest@^0.31.0, "vitest@>=0.30.0 <1": version "0.31.4" - resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.31.4.tgz#5abe02562675262949c10e40811f348a80f6b2a6" + resolved "https://registry.npmjs.org/vitest/-/vitest-0.31.4.tgz" integrity sha512-GoV0VQPmWrUFOZSg3RpQAPN+LPmHg2/gxlMNJlyxJihkz6qReHDV6b0pPDcqFLNEPya4tWJ1pgwUNP9MLmUfvQ== dependencies: "@types/chai" "^4.3.5" @@ -6021,63 +5964,84 @@ vitest@^0.31.0: vlq@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-2.0.4.tgz#6057b85729245b9829e3cc7755f95b228d4fe041" + resolved "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz" integrity sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA== walk-up-path@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" + resolved "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz" integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== -wcwidth@^1.0.0, wcwidth@^1.0.1: +wcwidth@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== well-known-symbols@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/well-known-symbols/-/well-known-symbols-2.0.0.tgz#e9c7c07dbd132b7b84212c8174391ec1f9871ba5" + resolved "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz" integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which@^1.2.14, which@^1.3.1: +which@^1.2.14: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: + 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" + +which@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" which@^3.0.0, which@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" + resolved "https://registry.npmjs.org/which/-/which-3.0.1.tgz" integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== dependencies: isexe "^2.0.0" why-is-node-running@^2.2.2: version "2.2.2" - resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" + resolved "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz" integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== dependencies: siginfo "^2.0.0" @@ -6085,24 +6049,33 @@ why-is-node-running@^2.2.2: wide-align@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" -word-wrap@^1.0.3: +word-wrap@^1.0.3, word-wrap@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + 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" + +wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + 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" @@ -6111,7 +6084,7 @@ wordwrap@^1.0.0: wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -6120,12 +6093,12 @@ wrap-ansi@^8.1.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" @@ -6133,7 +6106,7 @@ write-file-atomic@^4.0.2: write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz" integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== dependencies: imurmurhash "^0.1.4" @@ -6141,42 +6114,42 @@ write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: xtend@~4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0: version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yargs-parser@^20.2.2, yargs-parser@^20.2.3, yargs-parser@^20.2.9: version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^16.2.0: version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -6189,7 +6162,7 @@ yargs@^16.2.0: yargs@^17.5.1, yargs@^17.6.0: version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -6202,15 +6175,15 @@ yargs@^17.5.1, yargs@^17.6.0: yn@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== yocto-queue@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== From ab16f0c0b46960e1ba39f0735a162eb2d5b27b7c Mon Sep 17 00:00:00 2001 From: Altynbek Orumbayev Date: Sun, 27 Aug 2023 21:12:16 +0200 Subject: [PATCH 2/7] refactor: using raw atc --- .github/workflows/ci.yaml | 28 +- package-lock.json | 493 +- package.json | 4 +- src/clients/SubtopiaAdminClient.ts | 280 -- src/clients/SubtopiaClient.ts | 751 --- src/clients/SubtopiaInfrastructure.ts | 590 +++ src/clients/SubtopiaRegistry.ts | 642 ++- src/constants/index.ts | 19 +- src/contracts/SMA.ts | 719 --- src/contracts/SMI.ts | 2354 ---------- src/contracts/SML.ts | 1017 ---- src/contracts/SMR.ts | 1312 ------ src/contracts/smi_client.ts | 804 ---- src/contracts/sml_client.ts | 536 --- src/contracts/smr_client.ts | 307 -- src/enums/index.ts | 18 + src/index.ts | 8 +- src/interfaces/index.ts | 18 + src/utils/index.ts | 79 +- tests/subtopia.test.ts | 2003 ++++---- yarn.lock | 6189 ------------------------- 21 files changed, 2166 insertions(+), 16005 deletions(-) delete mode 100644 src/clients/SubtopiaAdminClient.ts delete mode 100644 src/clients/SubtopiaClient.ts create mode 100644 src/clients/SubtopiaInfrastructure.ts delete mode 100644 src/contracts/SMA.ts delete mode 100644 src/contracts/SMI.ts delete mode 100644 src/contracts/SML.ts delete mode 100644 src/contracts/SMR.ts delete mode 100644 src/contracts/smi_client.ts delete mode 100644 src/contracts/sml_client.ts delete mode 100644 src/contracts/smr_client.ts delete mode 100644 yarn.lock diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 9538cd1..6948d50 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -28,10 +28,10 @@ jobs: node-version: 18 - name: Install dependencies - run: yarn install --frozen-lockfile + run: npm ci - name: Run build - run: yarn build + run: npm run build lint: name: Linting @@ -46,10 +46,10 @@ jobs: node-version: 18 - name: Install dependencies - run: yarn install --frozen-lockfile + run: npm ci - name: Lint - run: yarn lint:scripts + run: npm run lint:scripts unit-tests: name: Unit tests @@ -72,20 +72,20 @@ jobs: timeout-minutes: 12 - name: Install dependencies - run: yarn install --frozen-lockfile + run: npm ci - name: Run sandbox - run: yarn localnet:start + run: npm run localnet:start - name: Run tests - run: yarn test:integration + run: npm run test:integration - name: "Upload coverage to Codecov" uses: codecov/codecov-action@v3 if: runner.os == 'Linux' && matrix.node == '18' with: - fail_ci_if_error: true - token: ${{ secrets.CODECOV_TOKEN }} + fail_ci_if_error: true + token: ${{ secrets.CODECOV_TOKEN }} deploy-docs: if: github.ref == 'refs/heads/main' @@ -103,10 +103,10 @@ jobs: node-version: 18 - name: Install dependencies - run: yarn install --frozen-lockfile + run: npm ci - name: Build docs - run: yarn docs + run: npm run docs - name: Deploy 🚀 uses: JamesIves/github-pages-deploy-action@v4 @@ -134,13 +134,13 @@ jobs: node-version: 18 - name: Install dependencies - run: yarn install --frozen-lockfile + run: npm ci - name: Run build - run: yarn build + run: npm run build - name: Release env: GITHUB_TOKEN: ${{ secrets.CUSTOM_GH_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - run: yarn release + run: npm run release diff --git a/package-lock.json b/package-lock.json index fefac8f..ee37e20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "2.0.1", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { - "@algorandfoundation/algokit-utils": "^2.3.1", - "algosdk": "2.3.0", + "@algorandfoundation/algokit-utils": "^2.3.2", + "algosdk": "^2.5.0", "beaker-ts": "^0.1.2" }, "devDependencies": { @@ -44,12 +44,11 @@ } }, "node_modules/@algorandfoundation/algokit-utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@algorandfoundation/algokit-utils/-/algokit-utils-2.3.1.tgz", - "integrity": "sha512-SI5W6YLWdflCxtNHYVyPDnAA5f7D1RxFnfJ5Aw2RgBtm9LFyZEkYAz9q4zTaQWgFvRDTqkTDh0swdJex3XWgDA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@algorandfoundation/algokit-utils/-/algokit-utils-2.3.2.tgz", + "integrity": "sha512-+Q4b8OVXogjkthapH04k+AqY19hxklfXFTmvoaQdQbbo2rUk1AgSXBRq0ThVg7n7RhfSMMUh0ZIL5bpse7MSKA==", "dependencies": { "algosdk": "^2.3.0", - "algosdk2-2": "npm:algosdk@2.2.0", "buffer": "^6.0.3" }, "engines": { @@ -2498,14 +2497,13 @@ } }, "node_modules/algosdk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-2.3.0.tgz", - "integrity": "sha512-voxoY2eue2CkzwkTh6UNN5JUeVOBL9qoNX3N/+OYwS2/Xd17ACSs6tLV/6dZumEgPa40ZL8TkO4zQF/ysDpy8w==", - "license": "MIT", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-2.5.0.tgz", + "integrity": "sha512-MlbPjjx4utq5sETOE0okF7/Lz0fgoBtRJRvSbRu3GnoybLTq/n6To2ojDAjJMqi+qMDyUBE9fWu+8jdSvozavA==", "dependencies": { "algo-msgpack-with-bigint": "^2.1.1", "buffer": "^6.0.3", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "hi-base32": "^0.5.1", "js-sha256": "^0.9.0", "js-sha3": "^0.8.0", @@ -2518,27 +2516,6 @@ "node": ">=16.0.0" } }, - "node_modules/algosdk2-2": { - "name": "algosdk", - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-2.2.0.tgz", - "integrity": "sha512-FG3u/60DzjMK9Cffy9itst7WcfsTgZKfsD1r8pT33PfsA7r8NoXiUSL7cf0fNWFus6S3E14BpE2CY64VJ8KV1A==", - "dependencies": { - "algo-msgpack-with-bigint": "^2.1.1", - "buffer": "^6.0.3", - "cross-fetch": "^3.1.5", - "hi-base32": "^0.5.1", - "js-sha256": "^0.9.0", - "js-sha3": "^0.8.0", - "js-sha512": "^0.8.0", - "json-bigint": "^1.0.0", - "tweetnacl": "^1.0.3", - "vlq": "^2.0.4" - }, - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -3643,12 +3620,11 @@ "license": "MIT" }, "node_modules/cross-fetch": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", - "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", - "license": "MIT", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dependencies": { - "node-fetch": "^2.6.11" + "node-fetch": "^2.6.12" } }, "node_modules/cross-spawn": { @@ -6430,8 +6406,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.11", - "license": "MIT", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -6678,8 +6655,6 @@ }, "node_modules/npm/node_modules/@colors/colors": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -6696,8 +6671,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "ISC", @@ -6715,8 +6688,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -6729,16 +6700,12 @@ }, "node_modules/npm/node_modules/@isaacs/cliui/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==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/@isaacs/cliui/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -6771,8 +6738,6 @@ }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", "dev": true, "inBundle": true, "license": "ISC" @@ -6844,8 +6809,6 @@ }, "node_modules/npm/node_modules/@npmcli/disparity-colors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz", - "integrity": "sha512-5R/z157/f20Fi0Ou4ZttL51V0xz0EdPEOauFtPCEYOLInDBRCj1/TxOJ5aGTrtShxEshN2d+hXb9ZKSi5RLBcg==", "dev": true, "inBundle": true, "license": "ISC", @@ -6858,8 +6821,6 @@ }, "node_modules/npm/node_modules/@npmcli/fs": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "dev": true, "inBundle": true, "license": "ISC", @@ -6891,8 +6852,6 @@ }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", - "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -6909,8 +6868,6 @@ }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz", - "integrity": "sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==", "dev": true, "inBundle": true, "license": "ISC", @@ -6926,8 +6883,6 @@ }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz", - "integrity": "sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q==", "dev": true, "inBundle": true, "license": "ISC", @@ -6956,8 +6911,6 @@ }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", - "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", "dev": true, "inBundle": true, "license": "ISC", @@ -6967,8 +6920,6 @@ }, "node_modules/npm/node_modules/@npmcli/node-gyp": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, "inBundle": true, "license": "ISC", @@ -6993,8 +6944,6 @@ }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", - "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", "dev": true, "inBundle": true, "license": "ISC", @@ -7007,8 +6956,6 @@ }, "node_modules/npm/node_modules/@npmcli/query": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.0.0.tgz", - "integrity": "sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA==", "dev": true, "inBundle": true, "license": "ISC", @@ -7021,8 +6968,6 @@ }, "node_modules/npm/node_modules/@npmcli/run-script": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", "dev": true, "inBundle": true, "license": "ISC", @@ -7039,8 +6984,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -7051,8 +6994,6 @@ }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz", - "integrity": "sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -7062,8 +7003,6 @@ }, "node_modules/npm/node_modules/@tootallnate/once": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, "inBundle": true, "license": "MIT", @@ -7073,8 +7012,6 @@ }, "node_modules/npm/node_modules/@tufjs/canonical-json": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -7084,8 +7021,6 @@ }, "node_modules/npm/node_modules/@tufjs/models": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", "dev": true, "inBundle": true, "license": "MIT", @@ -7099,8 +7034,6 @@ }, "node_modules/npm/node_modules/abbrev": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -7110,8 +7043,6 @@ }, "node_modules/npm/node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, "inBundle": true, "license": "MIT", @@ -7124,8 +7055,6 @@ }, "node_modules/npm/node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -7138,8 +7067,6 @@ }, "node_modules/npm/node_modules/agentkeepalive": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", "dev": true, "inBundle": true, "license": "MIT", @@ -7154,8 +7081,6 @@ }, "node_modules/npm/node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "inBundle": true, "license": "MIT", @@ -7169,8 +7094,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -7180,8 +7103,6 @@ }, "node_modules/npm/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, "inBundle": true, "license": "MIT", @@ -7197,24 +7118,18 @@ }, "node_modules/npm/node_modules/aproba": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/archy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz", - "integrity": "sha512-nSXlV+u3vtVjRgihdTzbfWYzxPWGo424zPgQbHD0ZqIla3jqYAewDcvee0Ua2hjS5IfTAmjGlx1Jf0PKwjZDEw==", "dev": true, "inBundle": true, "license": "ISC", @@ -7228,16 +7143,12 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -7258,8 +7169,6 @@ }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.1.tgz", - "integrity": "sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA==", "dev": true, "inBundle": true, "license": "ISC", @@ -7275,8 +7184,6 @@ }, "node_modules/npm/node_modules/binary-extensions": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "inBundle": true, "license": "MIT", @@ -7286,8 +7193,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -7297,8 +7202,6 @@ }, "node_modules/npm/node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -7323,8 +7226,6 @@ }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -7357,8 +7258,6 @@ }, "node_modules/npm/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, "inBundle": true, "license": "MIT", @@ -7375,8 +7274,6 @@ }, "node_modules/npm/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -7386,8 +7283,6 @@ }, "node_modules/npm/node_modules/ci-info": { "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "dev": true, "funding": [ { @@ -7403,8 +7298,6 @@ }, "node_modules/npm/node_modules/cidr-regex": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-3.1.1.tgz", - "integrity": "sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw==", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -7417,8 +7310,6 @@ }, "node_modules/npm/node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "inBundle": true, "license": "MIT", @@ -7428,8 +7319,6 @@ }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-columns/-/cli-columns-4.0.0.tgz", - "integrity": "sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -7443,8 +7332,6 @@ }, "node_modules/npm/node_modules/cli-table3": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, "inBundle": true, "license": "MIT", @@ -7460,8 +7347,6 @@ }, "node_modules/npm/node_modules/clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "inBundle": true, "license": "MIT", @@ -7471,8 +7356,6 @@ }, "node_modules/npm/node_modules/cmd-shim": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz", - "integrity": "sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==", "dev": true, "inBundle": true, "license": "ISC", @@ -7482,8 +7365,6 @@ }, "node_modules/npm/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, "inBundle": true, "license": "MIT", @@ -7496,16 +7377,12 @@ }, "node_modules/npm/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, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/color-support": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, "inBundle": true, "license": "ISC", @@ -7515,8 +7392,6 @@ }, "node_modules/npm/node_modules/columnify": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", "dev": true, "inBundle": true, "license": "MIT", @@ -7530,32 +7405,24 @@ }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/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, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -7570,8 +7437,6 @@ }, "node_modules/npm/node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "inBundle": true, "license": "ISC", @@ -7587,8 +7452,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -7601,8 +7464,6 @@ }, "node_modules/npm/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, "inBundle": true, "license": "MIT", @@ -7620,16 +7481,12 @@ }, "node_modules/npm/node_modules/debug/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, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/defaults": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "inBundle": true, "license": "MIT", @@ -7642,16 +7499,12 @@ }, "node_modules/npm/node_modules/delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "inBundle": true, "license": "MIT", @@ -7661,8 +7514,6 @@ }, "node_modules/npm/node_modules/diff": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", "dev": true, "inBundle": true, "license": "BSD-3-Clause", @@ -7672,24 +7523,18 @@ }, "node_modules/npm/node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/encoding": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, "inBundle": true, "license": "MIT", @@ -7700,8 +7545,6 @@ }, "node_modules/npm/node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "inBundle": true, "license": "MIT", @@ -7711,16 +7554,12 @@ }, "node_modules/npm/node_modules/err-code": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/event-target-shim": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -7730,8 +7569,6 @@ }, "node_modules/npm/node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "inBundle": true, "license": "MIT", @@ -7741,8 +7578,6 @@ }, "node_modules/npm/node_modules/fastest-levenshtein": { "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "inBundle": true, "license": "MIT", @@ -7752,8 +7587,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "ISC", @@ -7770,8 +7603,6 @@ }, "node_modules/npm/node_modules/fs-minipass": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", "dev": true, "inBundle": true, "license": "ISC", @@ -7784,24 +7615,18 @@ }, "node_modules/npm/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, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/function-bind": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/gauge": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz", - "integrity": "sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -7843,16 +7668,12 @@ }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "inBundle": true, "license": "MIT", @@ -7865,8 +7686,6 @@ }, "node_modules/npm/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, "inBundle": true, "license": "MIT", @@ -7876,16 +7695,12 @@ }, "node_modules/npm/node_modules/has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", "dev": true, "inBundle": true, "license": "ISC", @@ -7898,16 +7713,12 @@ }, "node_modules/npm/node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true, "inBundle": true, "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/http-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "inBundle": true, "license": "MIT", @@ -7922,8 +7733,6 @@ }, "node_modules/npm/node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "inBundle": true, "license": "MIT", @@ -7937,8 +7746,6 @@ }, "node_modules/npm/node_modules/humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -7948,8 +7755,6 @@ }, "node_modules/npm/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "inBundle": true, "license": "MIT", @@ -7963,8 +7768,6 @@ }, "node_modules/npm/node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { @@ -7985,8 +7788,6 @@ }, "node_modules/npm/node_modules/ignore-walk": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", - "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", "dev": true, "inBundle": true, "license": "ISC", @@ -7999,8 +7800,6 @@ }, "node_modules/npm/node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "inBundle": true, "license": "MIT", @@ -8010,8 +7809,6 @@ }, "node_modules/npm/node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "inBundle": true, "license": "MIT", @@ -8027,8 +7824,6 @@ }, "node_modules/npm/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, "inBundle": true, "license": "ISC", @@ -8039,8 +7834,6 @@ }, "node_modules/npm/node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, "inBundle": true, "license": "ISC" @@ -8056,8 +7849,6 @@ }, "node_modules/npm/node_modules/init-package-json": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-5.0.0.tgz", - "integrity": "sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw==", "dev": true, "inBundle": true, "license": "ISC", @@ -8076,16 +7867,12 @@ }, "node_modules/npm/node_modules/ip": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/ip-regex": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", "dev": true, "inBundle": true, "license": "MIT", @@ -8095,8 +7882,6 @@ }, "node_modules/npm/node_modules/is-cidr": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-4.0.2.tgz", - "integrity": "sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA==", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -8121,8 +7906,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -8132,16 +7915,12 @@ }, "node_modules/npm/node_modules/is-lambda": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, "inBundle": true, "license": "ISC" @@ -8166,8 +7945,6 @@ }, "node_modules/npm/node_modules/json-parse-even-better-errors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true, "inBundle": true, "license": "MIT", @@ -8177,8 +7954,6 @@ }, "node_modules/npm/node_modules/json-stringify-nice": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", "dev": true, "inBundle": true, "license": "ISC", @@ -8188,8 +7963,6 @@ }, "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" @@ -8199,24 +7972,18 @@ }, "node_modules/npm/node_modules/just-diff": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", - "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", - "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-7.0.2.tgz", - "integrity": "sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw==", "dev": true, "inBundle": true, "license": "ISC", @@ -8285,8 +8052,6 @@ }, "node_modules/npm/node_modules/libnpmhook": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/libnpmhook/-/libnpmhook-9.0.3.tgz", - "integrity": "sha512-wMZe58sI7KLhg0+nUWZW5KdMfjNNcOIIbkoP19BDHYoUF9El7eeUWkGNxUGzpHkPKiGoQ1z/v6CYin4deebeuw==", "dev": true, "inBundle": true, "license": "ISC", @@ -8300,8 +8065,6 @@ }, "node_modules/npm/node_modules/libnpmorg": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/libnpmorg/-/libnpmorg-5.0.4.tgz", - "integrity": "sha512-YqYXLMAN0Y1eJH4w3hUFN9648xfSdvJANMsdeZTOWJOW4Pqp8qapJFzQdqCfUkg+tEuQmnaFQQKXvkMZC51+Mw==", "dev": true, "inBundle": true, "license": "ISC", @@ -8349,8 +8112,6 @@ }, "node_modules/npm/node_modules/libnpmsearch": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-6.0.2.tgz", - "integrity": "sha512-p+5BF19AvnVg8mcIQhy6yWhI6jHQRVMYaIaKeITEfYAffWsqbottA/WZdMtHL76hViC6SFM1WdclM1w5eAIa1g==", "dev": true, "inBundle": true, "license": "ISC", @@ -8363,8 +8124,6 @@ }, "node_modules/npm/node_modules/libnpmteam": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/libnpmteam/-/libnpmteam-5.0.3.tgz", - "integrity": "sha512-7XOGhi45s+ml6TyrhJUTyrErcoDMKGKfEtiTEco4ofU7BGGAUOalVztKMVLLJgJOOXdIAIlzCHqkTXEuSiyCiA==", "dev": true, "inBundle": true, "license": "ISC", @@ -8378,8 +8137,6 @@ }, "node_modules/npm/node_modules/libnpmversion": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/libnpmversion/-/libnpmversion-4.0.2.tgz", - "integrity": "sha512-n1X70mFHv8Piy4yos+MFWUARSkTbyV5cdsHScaIkuwYvRAF/s2VtYScDzWB4Oe8uNEuGNdjiRR1E/Dh1tMvv6g==", "dev": true, "inBundle": true, "license": "ISC", @@ -8396,8 +8153,6 @@ }, "node_modules/npm/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "inBundle": true, "license": "ISC", @@ -8407,8 +8162,6 @@ }, "node_modules/npm/node_modules/make-fetch-happen": { "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, "inBundle": true, "license": "ISC", @@ -8450,8 +8203,6 @@ }, "node_modules/npm/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -8461,8 +8212,6 @@ }, "node_modules/npm/node_modules/minipass-collect": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, "inBundle": true, "license": "ISC", @@ -8475,8 +8224,6 @@ }, "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -8489,8 +8236,6 @@ }, "node_modules/npm/node_modules/minipass-fetch": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -8508,8 +8253,6 @@ }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, "inBundle": true, "license": "ISC", @@ -8522,8 +8265,6 @@ }, "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -8536,8 +8277,6 @@ }, "node_modules/npm/node_modules/minipass-json-stream": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", "dev": true, "inBundle": true, "license": "MIT", @@ -8548,8 +8287,6 @@ }, "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -8562,8 +8299,6 @@ }, "node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "inBundle": true, "license": "ISC", @@ -8576,8 +8311,6 @@ }, "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -8590,8 +8323,6 @@ }, "node_modules/npm/node_modules/minipass-sized": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, "inBundle": true, "license": "ISC", @@ -8604,8 +8335,6 @@ }, "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -8618,8 +8347,6 @@ }, "node_modules/npm/node_modules/minizlib": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "inBundle": true, "license": "MIT", @@ -8633,8 +8360,6 @@ }, "node_modules/npm/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -8647,8 +8372,6 @@ }, "node_modules/npm/node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, "inBundle": true, "license": "MIT", @@ -8661,16 +8384,12 @@ }, "node_modules/npm/node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, "inBundle": true, "license": "ISC", @@ -8680,8 +8399,6 @@ }, "node_modules/npm/node_modules/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "inBundle": true, "license": "MIT", @@ -8728,16 +8445,12 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/node-gyp/node_modules/are-we-there-yet": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "dev": true, "inBundle": true, "license": "ISC", @@ -8751,8 +8464,6 @@ }, "node_modules/npm/node_modules/node-gyp/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, "inBundle": true, "license": "MIT", @@ -8792,8 +8503,6 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/cacache/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -8846,8 +8555,6 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/gauge": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, "inBundle": true, "license": "ISC", @@ -8867,8 +8574,6 @@ }, "node_modules/npm/node_modules/node-gyp/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, "inBundle": true, "license": "ISC", @@ -8916,8 +8621,6 @@ }, "node_modules/npm/node_modules/node-gyp/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, "inBundle": true, "license": "ISC", @@ -8930,8 +8633,6 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -8961,8 +8662,6 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, "inBundle": true, "license": "ISC", @@ -8978,8 +8677,6 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/npmlog": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, "inBundle": true, "license": "ISC", @@ -8995,8 +8692,6 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "inBundle": true, "license": "MIT", @@ -9011,8 +8706,6 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "inBundle": true, "license": "ISC" @@ -9055,8 +8748,6 @@ }, "node_modules/npm/node_modules/node-gyp/node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "inBundle": true, "license": "ISC", @@ -9087,8 +8778,6 @@ }, "node_modules/npm/node_modules/normalize-package-data": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -9116,8 +8805,6 @@ }, "node_modules/npm/node_modules/npm-bundled": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -9130,8 +8817,6 @@ }, "node_modules/npm/node_modules/npm-install-checks": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", - "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -9144,8 +8829,6 @@ }, "node_modules/npm/node_modules/npm-normalize-package-bin": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -9155,8 +8838,6 @@ }, "node_modules/npm/node_modules/npm-package-arg": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "inBundle": true, "license": "ISC", @@ -9172,8 +8853,6 @@ }, "node_modules/npm/node_modules/npm-packlist": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", "dev": true, "inBundle": true, "license": "ISC", @@ -9186,8 +8865,6 @@ }, "node_modules/npm/node_modules/npm-pick-manifest": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", "dev": true, "inBundle": true, "license": "ISC", @@ -9203,8 +8880,6 @@ }, "node_modules/npm/node_modules/npm-profile": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-7.0.1.tgz", - "integrity": "sha512-VReArOY/fCx5dWL66cbJ2OMogTQAVVQA//8jjmjkarboki3V7UJ0XbGFW+khRwiAJFQjuH0Bqr/yF7Y5RZdkMQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -9218,8 +8893,6 @@ }, "node_modules/npm/node_modules/npm-registry-fetch": { "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", "dev": true, "inBundle": true, "license": "ISC", @@ -9238,8 +8911,6 @@ }, "node_modules/npm/node_modules/npm-user-validate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-2.0.0.tgz", - "integrity": "sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q==", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -9249,8 +8920,6 @@ }, "node_modules/npm/node_modules/npmlog": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz", - "integrity": "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==", "dev": true, "inBundle": true, "license": "ISC", @@ -9266,8 +8935,6 @@ }, "node_modules/npm/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, "inBundle": true, "license": "ISC", @@ -9277,8 +8944,6 @@ }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -9326,8 +8991,6 @@ }, "node_modules/npm/node_modules/parse-conflict-json": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", - "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", "dev": true, "inBundle": true, "license": "ISC", @@ -9342,8 +9005,6 @@ }, "node_modules/npm/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, "inBundle": true, "license": "MIT", @@ -9353,8 +9014,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -9389,8 +9048,6 @@ }, "node_modules/npm/node_modules/postcss-selector-parser": { "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -9404,8 +9061,6 @@ }, "node_modules/npm/node_modules/proc-log": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true, "inBundle": true, "license": "ISC", @@ -9415,8 +9070,6 @@ }, "node_modules/npm/node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, "inBundle": true, "license": "MIT", @@ -9426,8 +9079,6 @@ }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", "dev": true, "inBundle": true, "license": "ISC", @@ -9437,8 +9088,6 @@ }, "node_modules/npm/node_modules/promise-call-limit": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz", - "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==", "dev": true, "inBundle": true, "license": "ISC", @@ -9448,16 +9097,12 @@ }, "node_modules/npm/node_modules/promise-inflight": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "inBundle": true, "license": "MIT", @@ -9471,8 +9116,6 @@ }, "node_modules/npm/node_modules/promzard": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.0.tgz", - "integrity": "sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig==", "dev": true, "inBundle": true, "license": "ISC", @@ -9485,8 +9128,6 @@ }, "node_modules/npm/node_modules/qrcode-terminal": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", - "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", "dev": true, "inBundle": true, "bin": { @@ -9495,8 +9136,6 @@ }, "node_modules/npm/node_modules/read": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read/-/read-2.1.0.tgz", - "integrity": "sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -9509,8 +9148,6 @@ }, "node_modules/npm/node_modules/read-cmd-shim": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", - "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", "dev": true, "inBundle": true, "license": "ISC", @@ -9535,8 +9172,6 @@ }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, "inBundle": true, "license": "ISC", @@ -9565,8 +9200,6 @@ }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "inBundle": true, "license": "MIT", @@ -9576,8 +9209,6 @@ }, "node_modules/npm/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, "inBundle": true, "license": "ISC", @@ -9593,8 +9224,6 @@ }, "node_modules/npm/node_modules/rimraf/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, "inBundle": true, "license": "MIT", @@ -9605,8 +9234,6 @@ }, "node_modules/npm/node_modules/rimraf/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, "inBundle": true, "license": "ISC", @@ -9627,8 +9254,6 @@ }, "node_modules/npm/node_modules/rimraf/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, "inBundle": true, "license": "ISC", @@ -9641,16 +9266,12 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "inBundle": true, "license": "MIT", @@ -9673,8 +9294,6 @@ }, "node_modules/npm/node_modules/semver/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==", "dev": true, "inBundle": true, "license": "ISC", @@ -9687,16 +9306,12 @@ }, "node_modules/npm/node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -9709,8 +9324,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -9720,8 +9333,6 @@ }, "node_modules/npm/node_modules/signal-exit": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true, "inBundle": true, "license": "ISC", @@ -9751,8 +9362,6 @@ }, "node_modules/npm/node_modules/smart-buffer": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, "inBundle": true, "license": "MIT", @@ -9763,8 +9372,6 @@ }, "node_modules/npm/node_modules/socks": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, "inBundle": true, "license": "MIT", @@ -9779,8 +9386,6 @@ }, "node_modules/npm/node_modules/socks-proxy-agent": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "inBundle": true, "license": "MIT", @@ -9795,8 +9400,6 @@ }, "node_modules/npm/node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -9807,16 +9410,12 @@ }, "node_modules/npm/node_modules/spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true, "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "inBundle": true, "license": "MIT", @@ -9827,16 +9426,12 @@ }, "node_modules/npm/node_modules/spdx-license-ids": { "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true, "inBundle": true, "license": "CC0-1.0" }, "node_modules/npm/node_modules/ssri": { "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -9858,8 +9453,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -9875,8 +9468,6 @@ "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -9891,8 +9482,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -9906,8 +9495,6 @@ "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -9920,8 +9507,6 @@ }, "node_modules/npm/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, "inBundle": true, "license": "MIT", @@ -9951,8 +9536,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "inBundle": true, "license": "ISC", @@ -9965,8 +9548,6 @@ }, "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "inBundle": true, "license": "ISC", @@ -9979,24 +9560,18 @@ }, "node_modules/npm/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, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/tiny-relative-date": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz", - "integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", - "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -10020,8 +9595,6 @@ }, "node_modules/npm/node_modules/unique-filename": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, "inBundle": true, "license": "ISC", @@ -10034,8 +9607,6 @@ }, "node_modules/npm/node_modules/unique-slug": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -10048,16 +9619,12 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -10068,8 +9635,6 @@ }, "node_modules/npm/node_modules/validate-npm-package-name": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "dev": true, "inBundle": true, "license": "ISC", @@ -10082,16 +9647,12 @@ }, "node_modules/npm/node_modules/walk-up-path": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", - "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "inBundle": true, "license": "MIT", @@ -10101,8 +9662,6 @@ }, "node_modules/npm/node_modules/which": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, "inBundle": true, "license": "ISC", @@ -10118,8 +9677,6 @@ }, "node_modules/npm/node_modules/wide-align": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "inBundle": true, "license": "ISC", @@ -10129,8 +9686,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -10149,8 +9704,6 @@ "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -10168,8 +9721,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -10182,8 +9733,6 @@ }, "node_modules/npm/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -10196,16 +9745,12 @@ }, "node_modules/npm/node_modules/wrap-ansi/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==", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/npm/node_modules/wrap-ansi/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==", "dev": true, "inBundle": true, "license": "MIT", @@ -10238,16 +9783,12 @@ }, "node_modules/npm/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, "inBundle": true, "license": "ISC" }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "inBundle": true, "license": "ISC", @@ -10261,8 +9802,6 @@ }, "node_modules/npm/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "inBundle": true, "license": "ISC" diff --git a/package.json b/package.json index d436251..7190500 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,8 @@ "release": "semantic-release" }, "dependencies": { - "@algorandfoundation/algokit-utils": "^2.3.1", - "algosdk": "2.3.0", + "@algorandfoundation/algokit-utils": "^2.3.2", + "algosdk": "^2.5.0", "beaker-ts": "^0.1.2" }, "devDependencies": { diff --git a/src/clients/SubtopiaAdminClient.ts b/src/clients/SubtopiaAdminClient.ts deleted file mode 100644 index 3c7aefe..0000000 --- a/src/clients/SubtopiaAdminClient.ts +++ /dev/null @@ -1,280 +0,0 @@ -// ============================================================================= -// Subtopia JS SDK -// Copyright (C) 2023 Altynbek Orumbayev -// ============================================================================= - -import { - decodeAddress, - makePaymentTxnWithSuggestedParamsFromObject, -} from "algosdk"; -import { ABIResult } from "beaker-ts"; -import { - getLocker, - getParamsWithFeeCount, - normalizePrice, - rekeyLocker, -} from "../utils"; -import { PendingTransfer, SMR } from "../contracts/smr_client"; -import { getAssetByID } from "../utils"; -import { PriceNormalizationType, SubscriptionType } from "../enums"; -import AlgodClient from "algosdk/dist/types/client/v2/algod/algod"; -import { SubtopiaClient } from "./SubtopiaClient"; -import { - SUBTOPIA_REGISTRY_APP_ID, - SUBTOPIA_CONTRACTS_VERSION, -} from "../constants"; -import { - PendingTransferRecord, - SMRAddInfrastructureParams, - SMRClaimInfrastructureParams, - SMRGetRegistryParams, - SMRTransferInfrastructureParams, -} from "../interfaces"; - -export class SubtopiaAdminClient { - static async getRegistryAddress({ - client, - user, - smrID = SUBTOPIA_REGISTRY_APP_ID, - }: SMRGetRegistryParams): Promise { - const smr = new SMR({ - client, - sender: user.address, - signer: user.signer, - appId: smrID, - }); - - return smr.appAddress; - } - - static async getPendingTransferRecordForAccount( - client: AlgodClient, - subscriberAddress: string, - smrID = SUBTOPIA_REGISTRY_APP_ID - ): Promise { - try { - const boxName = decodeAddress(subscriberAddress).publicKey; - - const response = await client - .getApplicationBoxByName(smrID, boxName) - .do(); - const decoded = PendingTransfer.decodeBytes(response.value); - - const pendingTransferRecord = { - locker: String(decoded["locker"]), - smiID: Number(decoded["smi_id"]), - } as PendingTransferRecord; - - return pendingTransferRecord; - } catch (e) { - return undefined; - } - } - - static async addInfrastructure({ - creator, - client, - smrID = SUBTOPIA_REGISTRY_APP_ID, - name, - price, - subType = SubscriptionType.UNLIMITED, - maxSubs = 0, - coinID = 0, - }: SMRAddInfrastructureParams): Promise> { - const smr = new SMR({ - client, - sender: creator.address, - signer: creator.signer, - appId: smrID, - }); - const locker = await getLocker(client, creator.address, smr.appAddress); - - if (locker.authAddress !== smr.appAddress) { - const response = await rekeyLocker({ - client: client, - locker: locker.lsig, - creatorAddress: creator.address, - creatorSigner: creator.signer, - registryAddress: smr.appAddress, - registrySigner: smr.signer, - rekeyToAddress: smr.appAddress, - }); - - console.log("Rekeyed locker", response); - } - - const suggestedParams = await getParamsWithFeeCount(client, 2); - - const feeTxn = makePaymentTxnWithSuggestedParamsFromObject({ - from: creator.address, - to: smr.appAddress, - amount: Number(880_000 + (coinID === 0 ? 0 : 2_000)), - suggestedParams, - }); - - const asset = await getAssetByID(client, coinID); - - const result = await smr.add( - { - fee_txn: feeTxn, - name: name, - price: BigInt( - normalizePrice(price, asset.decimals, PriceNormalizationType.RAW) - ), - sub_type: BigInt(subType), - max_subs: BigInt(maxSubs), - coin_id: BigInt(coinID), - version: version, - manager: creator.address, - locker: locker.lsig.address(), - }, - { - appAccounts: [locker.lsig.address()], - appForeignAssets: coinID > 0 ? [coinID] : [], - } - ); - - const abiResult = new ABIResult(result); - - return abiResult; - } - - static async transferInfrastructure({ - creator, - newCreatorAddress, - smrID = SUBTOPIA_REGISTRY_APP_ID, - smiID, - client, - }: SMRTransferInfrastructureParams): Promise> { - const smr = new SMR({ - client, - sender: creator.address, - signer: creator.signer, - appId: smrID, - }); - const locker = await getLocker(client, creator.address, smr.appAddress); - - const pendingTransfers = - await SubtopiaAdminClient.getPendingTransferRecordForAccount( - client, - newCreatorAddress, - smrID - ); - - if (pendingTransfers) { - throw new Error( - "New owner have a pending transfer. He must complete it before accepting new transfers." - ); - } - - if (locker.authAddress !== smr.appAddress) { - const response = await rekeyLocker({ - client: client, - locker: locker.lsig, - creatorAddress: creator.address, - creatorSigner: creator.signer, - registryAddress: smr.appAddress, - registrySigner: smr.signer, - rekeyToAddress: smr.appAddress, - }); - console.log("Rekeyed locker", response); - } - - const suggestedParams = await getParamsWithFeeCount(client, 2); - - const newManagerLocker = await getLocker( - client, - newCreatorAddress, - smr.appAddress - ); - - const feeTxn = makePaymentTxnWithSuggestedParamsFromObject({ - from: creator.address, - to: smr.appAddress, - amount: Number(510_000), - suggestedParams, - }); - const result = await smr.transfer_smi( - { - transfer_fee_txn: feeTxn, - new_owner: newCreatorAddress, - smi_id: BigInt(smiID), - old_locker: locker.lsig.address(), - new_locker: newManagerLocker.lsig.address(), - }, - { - appAccounts: [locker.lsig.address(), newManagerLocker.lsig.address()], - appForeignApps: [smiID], - boxes: [ - { - appIndex: smr.appId, - name: decodeAddress(newCreatorAddress).publicKey, - }, - ], - } - ); - - const abiResult = new ABIResult(result); - - return abiResult; - } - - static async claimInfrastructure({ - creator, - smrID = SUBTOPIA_REGISTRY_APP_ID, - smiID, - client, - }: SMRClaimInfrastructureParams): Promise> { - const smr = new SMR({ - client, - sender: creator.address, - signer: creator.signer, - appId: smrID, - }); - const locker = await getLocker(client, creator.address, smr.appAddress); - - if (locker.authAddress !== smr.appAddress) { - const response = await rekeyLocker({ - client: client, - locker: locker.lsig, - creatorAddress: creator.address, - creatorSigner: creator.signer, - registryAddress: smr.appAddress, - registrySigner: smr.signer, - rekeyToAddress: smr.appAddress, - }); - console.log("Rekeyed locker", response); - } - - const smiState = await SubtopiaClient.getInfrastructureState(client, smiID); - const foreignAssetRef = - smiState.coinID > 0 ? { appForeignAssets: [smiState.coinID] } : {}; - - const result = await smr.claim_smi( - { - new_owner: creator.address, - smi: BigInt(smiID), - coin_id: BigInt(smiState.coinID), - }, - { - appAccounts: [locker.lsig.address()], - appForeignApps: [smiID], - suggestedParams: await getParamsWithFeeCount( - client, - smiState.coinID > 0 ? 3 : 2 - ), - boxes: [ - { - appIndex: smr.appId, - name: decodeAddress(creator.address).publicKey, - }, - ], - ...foreignAssetRef, - } - ); - - const abiResult = new ABIResult(result); - - return abiResult; - } -} diff --git a/src/clients/SubtopiaClient.ts b/src/clients/SubtopiaClient.ts deleted file mode 100644 index b7c5c98..0000000 --- a/src/clients/SubtopiaClient.ts +++ /dev/null @@ -1,751 +0,0 @@ -// ============================================================================= -// Subtopia JS SDK -// Copyright (C) 2023 Altynbek Orumbayev -// ============================================================================= - -import algosdk, { - AtomicTransactionComposer, - decodeAddress, - encodeAddress, - encodeUint64, - makeAssetTransferTxnWithSuggestedParamsFromObject, - makePaymentTxnWithSuggestedParamsFromObject, -} from "algosdk"; -import AlgodClient from "algosdk/dist/types/client/v2/algod/algod"; -import { ABIResult } from "beaker-ts"; -import { - loadApplicationState, - getLocker, - normalizePrice, - optInAsset, - getParamsWithFeeCount, - rekeyLocker, - expirationTypeToMonths, -} from "../utils"; -import { Discount, SMI, Subscription } from "../contracts/smi_client"; -import { SMR } from "../contracts/smr_client"; -import { getAssetByID } from "../utils"; -import { SUBTOPIA_REGISTRY_APP_ID, DEFAULT_AWAIT_ROUNDS } from "../constants"; -import { - SubscriptionType, - SubscriptionExpirationType, - PriceNormalizationType, - DiscountType, -} from "../enums"; -import { - SMIState, - SubscriptionRecord, - DiscountRecord, - SMISubscribeParams, - ChainMethodParams, - SMIUnsubscribeParams, - SMIClaimSubscriptionParams, - SMIClaimRevenueParams, - SMITransferSubscriptionParams, - SMIMarkForDeletionParams, - SMIDeleteSubscriptionParams, - SMICreateDiscountParams, - SMIDeleteDiscountParams, -} from "../interfaces"; - -export class SubtopiaClient { - static async getInfrastructureState( - client: AlgodClient, - smiID: number, - withPriceNormalization = true - ) { - const state = await loadApplicationState(client, smiID); - const asset = await getAssetByID(client, Number(state["coin_id"])); - - const expirationTypes = []; - if (state["sub_type"] === SubscriptionType.UNLIMITED) { - expirationTypes.push(SubscriptionExpirationType.UNLIMITED); - } else { - expirationTypes.push( - SubscriptionExpirationType.MONTHLY, - SubscriptionExpirationType.QUARTERLY, - SubscriptionExpirationType.SEMI_ANNUAL, - SubscriptionExpirationType.ANNUAL - ); - } - - const discounts = []; - for (const expirationType of expirationTypes) { - try { - const discount = await SubtopiaClient.getDiscountRecordForType( - client, - smiID, - expirationType - ); - discounts.push(discount); - } catch (e) { - /* empty */ - } - } - - /* eslint-disable prettier/prettier */ - return { - smiID: smiID, - manager: state["manager"], - name: state["name"], - price: withPriceNormalization - ? normalizePrice( - Number(state["price"]), - asset.decimals, - PriceNormalizationType.PRETTY - ) - : Number(state["price"]), - subType: state["sub_type"], - maxSubs: state["max_subs"], - activeSubs: state["active_subs"], - lifecycle: state["lifecycle"], - totalSubs: state["total_subs"], - coinID: state["coin_id"], - expiresIn: state["expires_in"], - createdAt: new Date(Number(state["created_at"]) * 1000), - discounts: discounts, - } as SMIState; - /* eslint-enable prettier/prettier */ - } - - static async getSubscriptionRecordForAccount( - client: AlgodClient, - subscriberAddress: string, - smiID = 0 - ): Promise { - const boxName = decodeAddress(subscriberAddress).publicKey; - - const response = await client.getApplicationBoxByName(smiID, boxName).do(); - const decoded = Subscription.decodeBytes(response.value); - - const expiresAt = - Number(decoded["expires_at"]) === 0 - ? undefined - : new Date(Number(decoded["expires_at"]) * 1000); - - const subscriptionRecord = { - subID: Number(decoded["sub_id"]), - subType: Number(decoded["sub_type"]), - expiresAt: expiresAt, - expirationType: Number( - decoded["expiration_type"] - ) as SubscriptionExpirationType, - createdAt: new Date(Number(decoded["created_at"]) * 1000), - } as SubscriptionRecord; - - return subscriptionRecord; - } - - static async getDiscountRecordForType( - client: AlgodClient, - smiID: number, - expirationType: SubscriptionExpirationType - ): Promise { - const response = await client - .getApplicationBoxByName(smiID, encodeUint64(expirationType)) - .do(); - const decoded = Discount.decodeBytes(response.value); - - const expiresAt = - Number(decoded["expires_at"]) === 0 - ? undefined - : new Date(Number(decoded["expires_at"]) * 1000); - - const discountRecord = { - discountType: Number(decoded["discount_type"]), - discountValue: Number(decoded["discount_value"]), - expirationType: Number(decoded["expiration_type"]), - expiresAt: expiresAt, - createdAt: new Date(Number(decoded["created_at"]) * 1000), - totalClaims: Number(decoded["total_claims"]), - } as DiscountRecord; - - return discountRecord; - } - - static async subscribe( - { - subscriber, - smiID, - smrID = SUBTOPIA_REGISTRY_APP_ID, - expirationType = SubscriptionExpirationType.UNLIMITED, - }: SMISubscribeParams, - { client, sender, signer }: ChainMethodParams - ) { - const smi = new SMI({ - client: client, - sender: sender ?? subscriber.address, - signer: signer ?? subscriber.signer, - appId: smiID, - }); - - const smr = new SMR({ - client: client, - sender: sender ?? subscriber.address, - signer: signer ?? subscriber.signer, - appId: smrID, - }); - - const smiState = await SubtopiaClient.getInfrastructureState( - client, - smi.appId, - false - ); - - const managerLocker = await getLocker( - client, - smiState.manager, - smr.appAddress - ); - - const feeTxn = { - txn: makePaymentTxnWithSuggestedParamsFromObject({ - from: subscriber.address, - to: smi.appAddress, - amount: Number( - 120_000 + 100_000 + 11_300 + (smiState.coinID > 0 ? 100 : 0) - ), - suggestedParams: await getParamsWithFeeCount(client, 5), - }), - signer: subscriber.signer, - }; - - let price = smiState.price * expirationTypeToMonths(expirationType); - - const discount: DiscountRecord | undefined = smiState.discounts.find( - (d) => d.expirationType === expirationType - ); - - if (discount) { - price = - discount.discountType === DiscountType.FIXED - ? price - discount.discountValue - : price - (price * discount.discountValue) / 100; - } - - /* eslint-disable prettier/prettier */ - const subscribePayTxn = { - txn: - smiState.coinID === 0 - ? makePaymentTxnWithSuggestedParamsFromObject({ - from: subscriber.address, - to: managerLocker.lsig.address(), - amount: price, - suggestedParams: await getParamsWithFeeCount(client, 0), - }) - : makeAssetTransferTxnWithSuggestedParamsFromObject({ - from: subscriber.address, - to: managerLocker.lsig.address(), - amount: price, - assetIndex: smiState.coinID, - suggestedParams: await getParamsWithFeeCount(client, 0), - }), - signer: subscriber.signer, - }; - - const result = await smi.subscribe( - { - fee_txn: feeTxn, - subscribe_pay_txn: subscribePayTxn, - subscriber_account: subscriber.address, - expiration_type: BigInt(expirationType), - }, - { - boxes: [ - { - appIndex: smi.appId, - name: encodeUint64(expirationType), - }, - { - appIndex: smi.appId, - name: decodeAddress(subscriber.address).publicKey, - }, - ], - } - ); - - return new ABIResult(result); - } - - static async unsubscribe( - { subscriber, smiID }: SMIUnsubscribeParams, - { client, sender, signer }: ChainMethodParams - ) { - const smi = new SMI({ - client: client, - sender: sender ?? subscriber.address, - signer: signer ?? subscriber.signer, - appId: smiID, - }); - - if (!smi) { - throw new Error("SMI not initialized"); - } - - const subscriptionRecord = - await SubtopiaClient.getSubscriptionRecordForAccount( - client, - subscriber.address, - smiID - ); - - const isOptedToPassId = await client - .accountAssetInformation(subscriber.address, subscriptionRecord.subID) - .do() - .then(() => true) - .catch(() => false); - const sp = await getParamsWithFeeCount(client, isOptedToPassId ? 3 : 2); - - const result = await smi.unsubscribe( - { sub_id: BigInt(subscriptionRecord.subID) }, - { - appAccounts: [subscriber.address], - boxes: [ - { - appIndex: smiID, - name: decodeAddress(subscriber.address).publicKey, - }, - ], - suggestedParams: sp, - } - ); - - return new ABIResult(result); - } - - static async claimSubscriptionPass( - { smiID, subID, subscriber }: SMIClaimSubscriptionParams, - { client, sender, signer }: ChainMethodParams - ) { - const smi = new SMI({ - client: client, - sender: sender ?? subscriber.address, - signer: signer ?? subscriber.signer, - appId: smiID, - }); - - if (!smi) { - throw new Error("SMI not initialized"); - } - const isOptedToPassId = await client - .accountAssetInformation(subscriber.address, subID) - .do() - .then(() => true) - .catch(() => false); - - if (!isOptedToPassId) { - await optInAsset(client, subscriber, subID); - } - - const sp = await getParamsWithFeeCount(client, 3); - - const result = await smi.claim_subscription( - { - subscription_id: BigInt(subID), - }, - { suggestedParams: sp, appForeignAssets: [subID] } - ); - - return new ABIResult(result); - } - - static async claimRevenue( - { - smrID = SUBTOPIA_REGISTRY_APP_ID, - user, - coinID = 0, - }: SMIClaimRevenueParams, - { client, sender, signer }: ChainMethodParams - ) { - const smr = new SMR({ - client: client, - sender: sender ?? user.address, - signer: signer ?? user.signer, - appId: smrID, - }); - - if (!smr) { - throw new Error("SMI not initialized"); - } - - const locker = await getLocker(client, user.address, smr.appAddress); - - const atc = new AtomicTransactionComposer(); - - const sp = await getParamsWithFeeCount(client, 2); - - atc.addTransaction({ - txn: makePaymentTxnWithSuggestedParamsFromObject({ - from: user.address, - suggestedParams: sp, - to: locker.lsig.address(), - amount: 0, - }), - signer: user.signer, - }); - - const app_sp = await getParamsWithFeeCount(client, 0); - const lockerInfo = await client - .accountInformation(locker.lsig.address()) - .do(); - - let withdrawalAmount = - lockerInfo["amount"] - lockerInfo["min-balance"] - 1000; - withdrawalAmount = withdrawalAmount < 0 ? 0 : withdrawalAmount; - - if (coinID > 0) { - const isOptedToCoinID = await client - .accountAssetInformation(user.address, coinID) - .do() - .then(() => true) - .catch(() => false); - if (!isOptedToCoinID) { - await optInAsset(client, user, coinID); - } - - withdrawalAmount = - lockerInfo["assets"].find( - (asset: { [x: string]: number }) => asset["asset-id"] === coinID - )?.amount ?? 0; - - atc.addTransaction({ - txn: makeAssetTransferTxnWithSuggestedParamsFromObject({ - from: locker.lsig.address(), - suggestedParams: app_sp, - to: user.address, - amount: withdrawalAmount, - assetIndex: coinID, - }), - signer: locker.signer, - }); - } else { - atc.addTransaction({ - txn: makePaymentTxnWithSuggestedParamsFromObject({ - from: locker.lsig.address(), - suggestedParams: app_sp, - to: user.address, - amount: withdrawalAmount, - }), - signer: locker.signer, - }); - } - - const response = await atc.execute(client, 4); - - return response.txIDs; - } - - static async transferSubscriptionPass( - { newOwnerAddress, oldOwner, subID, smiID }: SMITransferSubscriptionParams, - { client, sender, signer }: ChainMethodParams - ) { - const smi = new SMI({ - client: client, - sender: sender ?? oldOwner.address, - signer: signer ?? oldOwner.signer, - appId: smiID, - }); - - if (!smi) { - throw new Error("SMI not initialized"); - } - - const result = await smi.transfer_subscription( - { - new_address: newOwnerAddress, - subscription_id: BigInt(subID), - }, - { - appAccounts: [newOwnerAddress], - appForeignAssets: [subID], - suggestedParams: await getParamsWithFeeCount(client, 2), - boxes: [ - { - appIndex: smi.appId, - name: decodeAddress(oldOwner.address).publicKey, - }, - - { - appIndex: smi.appId, - name: decodeAddress(newOwnerAddress).publicKey, - }, - ], - } - ); - - return new ABIResult(result); - } - - static async markForDeletion( - { smiID, user, smrID = SUBTOPIA_REGISTRY_APP_ID }: SMIMarkForDeletionParams, - { client, sender, signer }: ChainMethodParams - ) { - const smi = new SMI({ - client: client, - sender: sender ?? user.address, - signer: signer ?? user.signer, - appId: smiID, - }); - - const smr = new SMR({ - client: client, - sender: sender ?? user.address, - signer: signer ?? user.signer, - appId: smrID, - }); - - if (!smi) { - throw new Error("SMI not initialized"); - } - - const smiState = await SubtopiaClient.getInfrastructureState( - client, - smi.appId, - false - ); - - const sp = await getParamsWithFeeCount(client, 3); - const userLocker = await getLocker(client, user.address, smr.appAddress); - - const result = await smi.mark_for_deletion( - { - locker_fund_txn: { - txn: makePaymentTxnWithSuggestedParamsFromObject({ - from: user.address, - to: userLocker.lsig.address(), - amount: ( - await getParamsWithFeeCount(client, 3 * smiState.activeSubs) - ).fee, - suggestedParams: await getParamsWithFeeCount(client, 2), - }), - signer: user.signer, - }, - }, - { - suggestedParams: sp, - } - ); - - return new ABIResult(result); - } - - static async deleteSubscription( - { - smiID, - user, - smrID = SUBTOPIA_REGISTRY_APP_ID, - }: SMIDeleteSubscriptionParams, - { client, sender, signer }: ChainMethodParams - ) { - const smi = new SMI({ - client: client, - sender: sender ?? user.address, - signer: signer ?? user.signer, - appId: smiID, - }); - - const smr = new SMR({ - client: client, - sender: sender ?? user.address, - signer: signer ?? user.signer, - appId: smrID, - }); - - if (!smi) { - throw new Error("SMI not initialized"); - } - - const smiState = await SubtopiaClient.getInfrastructureState( - client, - smi.appId, - false - ); - - // True if the subscription is marked for deletion, value 1 - if (!smiState.lifecycle) { - await SubtopiaClient.markForDeletion( - { - smiID: smiID, - smrID: smrID, - user: user, - }, - { - client: client, - } - ); - } - - const maxTxnsPerGroup = 16; - const userLocker = await getLocker(client, user.address, smr.appAddress); - const subscribersFromBoxes: string[] = ( - await client.getApplicationBoxes(smiID).do() - )["boxes"].map((item) => { - return encodeAddress(item.name); - }); - - for (let i = 0; i < subscribersFromBoxes.length; i += maxTxnsPerGroup) { - const subscribesSubsetFromBoxes = subscribersFromBoxes.slice( - i, - i + maxTxnsPerGroup - ); - const atc = new AtomicTransactionComposer(); - - const methodCalls = subscribesSubsetFromBoxes.map( - async (subscriber: string, j: number) => { - const subscriberBox = - await SubtopiaClient.getSubscriptionRecordForAccount( - client, - subscriber, - smiID - ); - atc.addMethodCall({ - sender: userLocker.authAddress, - signer: userLocker.signer, - appID: smiID, - method: algosdk.getMethodByName(smi.methods, "delete_subscription"), - methodArgs: [subscriber, subscriberBox.subID], - appForeignAssets: [subscriberBox.subID], - appAccounts: [subscriber], - boxes: [ - { - appIndex: smi.appId, - name: decodeAddress(subscriber).publicKey, - }, - ], - suggestedParams: - j === 0 - ? await getParamsWithFeeCount( - client, - 3 * subscribesSubsetFromBoxes.length - ) - : await getParamsWithFeeCount(client, 0), - }); - } - ); - - await Promise.all(methodCalls); - - await atc.execute(client, DEFAULT_AWAIT_ROUNDS); - } - - if (userLocker.authAddress !== smr.appAddress) { - const response = await rekeyLocker({ - client: client, - locker: userLocker.lsig, - creatorAddress: user.address, - creatorSigner: user.signer, - registryAddress: smr.appAddress, - registrySigner: smr.signer, - rekeyToAddress: smr.appAddress, - }); - console.log("Rekeyed locker", response); - } - - const response = await smr.delete_smi( - { - smi_id: BigInt(smiID), - }, - { - appForeignApps: [smiID], - appAccounts: [userLocker.lsig.address()], - suggestedParams: await getParamsWithFeeCount(client, 4), - } - ); - - return response; - } - - static async createDiscount( - { smiID, creator, discount }: SMICreateDiscountParams, - { client, sender, signer }: ChainMethodParams - ) { - const smi = new SMI({ - client: client, - sender: sender ?? creator.address, - signer: signer ?? creator.signer, - appId: smiID, - }); - - if (!smi) { - throw new Error("SMI not initialized"); - } - - const smiState = await SubtopiaClient.getInfrastructureState( - client, - smi.appId, - false - ); - const asset = await getAssetByID(client, smiState.coinID); - - const result = await smi.create_discount( - { - expiration_type: BigInt(discount.expirationType), - discount_value: BigInt( - discount.discountType === DiscountType.FIXED - ? normalizePrice( - discount.discountValue, - asset.decimals, - PriceNormalizationType.RAW - ) - : discount.discountValue - ), - discount_type: BigInt(discount.discountType), - expires_in: BigInt(discount.expiresIn ?? 0), - fee_txn: { - txn: makePaymentTxnWithSuggestedParamsFromObject({ - from: creator.address, - to: smi.appAddress, - amount: 100_000 + 24900, - suggestedParams: await getParamsWithFeeCount(client, 0), - }), - signer: creator.signer, - }, - }, - { - suggestedParams: await getParamsWithFeeCount(client, 2), - boxes: [ - { - appIndex: smi.appId, - name: encodeUint64(discount.expirationType), - }, - ], - } - ); - - return new ABIResult(result); - } - - static async deleteDiscount( - { smiID, creator, expirationType }: SMIDeleteDiscountParams, - { client, sender, signer }: ChainMethodParams - ) { - const smi = new SMI({ - client: client, - sender: sender ?? creator.address, - signer: signer ?? creator.signer, - appId: smiID, - }); - - if (!smi) { - throw new Error("SMI not initialized"); - } - - const result = await smi.delete_discount( - { - expiration_type: BigInt(expirationType), - }, - { - signer: creator.signer, - suggestedParams: await getParamsWithFeeCount(client, 2), - boxes: [ - { - appIndex: smi.appId, - name: encodeUint64(expirationType), - }, - ], - } - ); - - return new ABIResult(result); - } -} diff --git a/src/clients/SubtopiaInfrastructure.ts b/src/clients/SubtopiaInfrastructure.ts new file mode 100644 index 0000000..c46e254 --- /dev/null +++ b/src/clients/SubtopiaInfrastructure.ts @@ -0,0 +1,590 @@ +// ============================================================================= +// Subtopia JS SDK +// Copyright (C) 2023 Altynbek Orumbayev +// ============================================================================= + +import algosdk, { + ABIMethod, + AtomicTransactionComposer, + algosToMicroalgos, + decodeAddress, + encodeAddress, + encodeUint64, + getApplicationAddress, + makeAssetTransferTxnWithSuggestedParamsFromObject, + makePaymentTxnWithSuggestedParamsFromObject, +} from "algosdk"; +import AlgodClient from "algosdk/dist/types/client/v2/algod/algod"; +import { + normalizePrice, + getParamsWithFeeCount, + calculateSmiCreationMbr, + calculateSmlCreationMbr, + calculateRegistryLockerBoxCreateMbr, + calculateInfrastructureDiscountBoxCreateMbr, + calculateInfrastructureSubscriptionBoxCreateMbr, +} from "../utils"; +import { getAssetByID } from "../utils"; +import { + MIN_APP_OPTIN_MBR, + MIN_APP_BALANCE_MBR, + MIN_ASA_OPTIN_MBR, + SUBSCRIPTION_PLATFORM_FEE_CENTS, + TESTNET_SUBTOPIA_REGISTRY_ID, +} from "../constants"; +import { + PriceNormalizationType, + SubscriptionExpirationType, + DiscountType, + Duration, +} from "../enums"; + +import { + getAppById, + getAppGlobalState, +} from "@algorandfoundation/algokit-utils"; +import { TransactionSignerAccount } from "@algorandfoundation/algokit-utils/types/account"; +import { SubtopiaRegistry } from "./SubtopiaRegistry"; +import { + ApplicationSpec, + AssetMetadata, + RawDiscount, + SubscriptionRecord, +} from "interfaces"; + +const encoder = new TextEncoder(); + +export class SubtopiaInfrastructure { + algodClient: algosdk.Algodv2; + creator: TransactionSignerAccount; + price: number; + coin: AssetMetadata; + oracleID: number; + version: string; + appID: number; + appAddress: string; + appSpec: ApplicationSpec; + + private constructor({ + algodClient, + creator, + appID, + appAddress, + appSpec, + oracleID, + price, + coin, + version, + }: { + algodClient: AlgodClient; + creator: TransactionSignerAccount; + appSpec: ApplicationSpec; + appID: number; + appAddress: string; + oracleID: number; + price: number; + coin: AssetMetadata; + version: string; + }) { + this.algodClient = algodClient; + this.creator = creator; + this.appID = appID; + this.appAddress = appAddress; + this.appSpec = appSpec; + this.oracleID = oracleID; + this.price = price; + this.coin = coin; + this.version = version; + } + + public static async init( + algodClient: AlgodClient, + productID: number, + creator: TransactionSignerAccount + ): Promise { + const productGlobalState = await getAppGlobalState( + productID, + algodClient + ).catch((error) => { + throw new Error(error); + }); + + if ( + !productGlobalState.price || + !productGlobalState.oracle_id || + !productGlobalState.coin_id + ) { + throw new Error("SMR is not initialized"); + } + + const oracleID = productGlobalState.oracle_id.value as number; + const productAddress = getApplicationAddress(productID); + const productPrice = productGlobalState.price.value as number; + const productSpec = await getAppById(productID, algodClient); + + const versionAtc = new AtomicTransactionComposer(); + versionAtc.addMethodCall({ + appID: productID, + method: new ABIMethod({ + name: "get_version", + args: [], + returns: { type: "string" }, + }), + sender: creator.addr, + signer: creator.signer, + suggestedParams: await getParamsWithFeeCount(algodClient, 1), + }); + const response = await versionAtc.simulate(algodClient); + const version = response.methodResults[0].returnValue as string; + const coin = await getAssetByID( + algodClient, + productGlobalState.coin_id.value as number + ); + + return new SubtopiaInfrastructure({ + algodClient, + creator, + appID: productID, + appAddress: productAddress, + appSpec: { + approval: productSpec.params.approvalProgram, + clear: productSpec.params.clearStateProgram, + globalNumUint: + Number(productSpec.params.globalStateSchema?.numUint) || 0, + globalNumByteSlice: + Number(productSpec.params.globalStateSchema?.numByteSlice) || 0, + localNumUint: Number(productSpec.params.localStateSchema?.numUint) || 0, + localNumByteSlice: + Number(productSpec.params.localStateSchema?.numByteSlice) || 0, + }, + oracleID, + price: productPrice, + coin, + version, + }); + } + + public async getSubscriptionPrice(coinID = 0): Promise { + return ( + algosToMicroalgos(MIN_APP_OPTIN_MBR) + + algosToMicroalgos(MIN_APP_BALANCE_MBR) + + (await calculateSmiCreationMbr(this.appSpec)) + + (coinID > 0 ? algosToMicroalgos(MIN_ASA_OPTIN_MBR) : 0) + ); + } + + public async getSubscriptionPlatformFee( + priceInCents: number + ): Promise { + const computePlatformFeeAtc = new AtomicTransactionComposer(); + computePlatformFeeAtc.addMethodCall({ + appID: this.oracleID, + method: new ABIMethod({ + name: "compute_platform_fee", + args: [ + { + type: "uint64", + name: "whole_usd", + desc: "Amount of USD in whole numbers (CENTS)", + }, + ], + returns: { type: "uint64" }, + }), + methodArgs: [priceInCents], + sender: this.creator.addr, + signer: this.creator.signer, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 1), + }); + + const response = await computePlatformFeeAtc.simulate(this.algodClient); + + return Number(response.methodResults[0].returnValue); + } + + public async getLockerCreationFee(creatorAddress: string): Promise { + return ( + algosToMicroalgos(MIN_APP_OPTIN_MBR) + + (await calculateSmlCreationMbr(this.appSpec)) + + calculateRegistryLockerBoxCreateMbr(creatorAddress) + ); + } + + public async transferOwnership({ + newOwnerAddress, + }: { + newOwnerAddress: string; + }): Promise<{ + txId: string; + }> { + const updateManagerAtc = new AtomicTransactionComposer(); + updateManagerAtc.addMethodCall({ + appID: this.appID, + method: new ABIMethod({ + name: "update_manager", + args: [ + { + type: "address", + name: "new_manager_account", + desc: "The new manager account address.", + }, + ], + returns: { type: "void" }, + }), + methodArgs: [newOwnerAddress], + sender: this.creator.addr, + signer: this.creator.signer, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 1), + }); + + const response = await updateManagerAtc.execute(this.algodClient, 10); + + return { + txId: response.txIDs.pop() as string, + }; + } + + public async getDiscount({ + expirationType, + }: { + expirationType: SubscriptionExpirationType; + }): Promise { + const getDiscountAtc = new AtomicTransactionComposer(); + getDiscountAtc.addMethodCall({ + appID: this.appID, + method: new ABIMethod({ + name: "get_discount", + args: [ + { + type: "uint64", + name: "duration", + desc: "The duration of the discount.", + }, + ], + returns: { type: "uint64" }, + }), + methodArgs: [expirationType.valueOf()], + sender: this.creator.addr, + signer: this.creator.signer, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 1), + }); + + const response = await getDiscountAtc.simulate(this.algodClient); + + return response.methodResults[0].returnValue?.valueOf() as RawDiscount; + } + + public async createDiscount({ + duration, + discountType, + discountValue, + expiresIn, + }: { + duration: Duration; + discountType: DiscountType; + discountValue: number; + expiresIn: number; + }): Promise<{ + txId: string; + }> { + const createDiscountAtc = new AtomicTransactionComposer(); + createDiscountAtc.addMethodCall({ + appID: this.appID, + method: new ABIMethod({ + name: "create_discount", + args: [ + { + type: "uint64", + name: "duration", + desc: "The duration of the discount.", + }, + { + type: "uint64", + name: "discount_type", + desc: "The type of discount (percentage or amount).", + }, + { + type: "uint64", + name: "discount_value", + desc: "The discount value in micro ALGOs.", + }, + { + type: "uint64", + name: "expires_in", + desc: "The number of seconds to append to creation date", + }, + { + type: "pay", + name: "fee_txn", + desc: "The transaction fee.", + }, + ], + returns: { type: "void" }, + }), + methodArgs: [ + duration.valueOf(), + discountType.valueOf(), + discountValue, + expiresIn, + { + txn: makePaymentTxnWithSuggestedParamsFromObject({ + from: this.creator.addr, + to: this.appAddress, + amount: calculateInfrastructureDiscountBoxCreateMbr(), + suggestedParams: await getParamsWithFeeCount(this.algodClient, 0), + }), + signer: this.creator.signer, + }, + ], + boxes: [ + { + appIndex: this.appID, + name: encoder.encode(duration.valueOf().toString()), + }, + ], + sender: this.creator.addr, + signer: this.creator.signer, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 1), + }); + + const response = await createDiscountAtc.execute(this.algodClient, 10); + + return { + txId: response.txIDs.pop() as string, + }; + } + + public async createSubscription({ + subscriber, + expirationType, + }: { + subscriber: TransactionSignerAccount; + expirationType: SubscriptionExpirationType; + }): Promise<{ + txId: string; + subscriptionId: number; + }> { + const oracleAdminState = ( + await getAppGlobalState(this.oracleID, this.algodClient) + ).admin; + const adminAddress = encodeAddress( + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + oracleAdminState.valueRaw + ); + const platformFeeAmount = await this.getSubscriptionPlatformFee( + SUBSCRIPTION_PLATFORM_FEE_CENTS + ); + const creatorLockerId = await SubtopiaRegistry.getLocker({ + registryID: TESTNET_SUBTOPIA_REGISTRY_ID, + algodClient: this.algodClient, + ownerAddress: this.creator.addr, + }); + + if (!creatorLockerId) { + throw new Error("Creator locker is not initialized"); + } + + const lockerAddress = getApplicationAddress(creatorLockerId); + + const createSubscriptionAtc = new AtomicTransactionComposer(); + createSubscriptionAtc.addMethodCall({ + appID: this.appID, + method: new ABIMethod({ + name: "create_subscription", + args: [ + { + type: "address", + name: "subscriber", + desc: "The subscriber's address.", + }, + { + type: "uint64", + name: "duration", + desc: "The duration of the subscription.", + }, + { + type: "application", + name: "creator_locker", + desc: "The locker of creator", + }, + { + type: "application", + name: "oracle_id", + desc: "The oracle app used.", + }, + { + type: "pay", + name: "fee_txn", + desc: "The transaction fee paid to the app.", + }, + { + type: "pay", + name: "platform_fee_txn", + desc: "The platform fee paid.", + }, + { + type: "txn", + name: "pay_txn", + desc: "The payment transaction to fund the subscription.", + }, + ], + returns: { type: "uint64" }, + }), + methodArgs: [ + subscriber.addr, + expirationType.valueOf(), + creatorLockerId, + this.oracleID, + { + txn: makePaymentTxnWithSuggestedParamsFromObject({ + from: subscriber.addr, + to: this.appAddress, + amount: + calculateInfrastructureSubscriptionBoxCreateMbr(subscriber.addr) + + algosToMicroalgos(MIN_APP_OPTIN_MBR), + suggestedParams: await getParamsWithFeeCount(this.algodClient, 0), + }), + signer: subscriber.signer, + }, + { + txn: makePaymentTxnWithSuggestedParamsFromObject({ + from: subscriber.addr, + to: adminAddress, + amount: platformFeeAmount, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 0), + }), + signer: subscriber.signer, + }, + this.coin.index === 0 + ? { + txn: makePaymentTxnWithSuggestedParamsFromObject({ + from: subscriber.addr, + to: lockerAddress, + amount: this.price, + suggestedParams: await getParamsWithFeeCount( + this.algodClient, + 0 + ), + }), + signer: subscriber.signer, + } + : { + txn: makeAssetTransferTxnWithSuggestedParamsFromObject({ + from: subscriber.addr, + to: lockerAddress, + amount: normalizePrice( + this.price, + this.coin.decimals, + PriceNormalizationType.RAW + ), + assetIndex: this.coin.index, + suggestedParams: await getParamsWithFeeCount( + this.algodClient, + 0 + ), + }), + signer: subscriber.signer, + }, + ], + boxes: [ + { + appIndex: this.appID, + name: decodeAddress(subscriber.addr).publicKey, + }, + { + appIndex: this.appID, + name: encodeUint64(expirationType.valueOf()), + }, + ], + sender: subscriber.addr, + signer: subscriber.signer, + suggestedParams: await getParamsWithFeeCount( + this.algodClient, + this.coin.index > 0 ? 6 : 5 + ), + }); + + const response = await createSubscriptionAtc.execute(this.algodClient, 10); + + return { + txId: response.txIDs.pop() as string, + subscriptionId: Number(response.methodResults[0].returnValue), + }; + } + + public async deleteSubscription({ + subscriber, + subscriptionID, + }: { + subscriber: TransactionSignerAccount; + subscriptionID: number; + }): Promise<{ + txId: string; + }> { + const deleteSubscriptionAtc = new AtomicTransactionComposer(); + deleteSubscriptionAtc.addMethodCall({ + appID: this.appID, + method: new ABIMethod({ + name: "delete_subscription", + args: [ + { + type: "asset", + name: "subscription", + desc: "The subscription ASA ID.", + }, + ], + returns: { type: "uint64" }, + }), + methodArgs: [subscriptionID], + boxes: [ + { + appIndex: this.appID, + name: decodeAddress(subscriber.addr).publicKey, + }, + ], + sender: subscriber.addr, + signer: subscriber.signer, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 3), + }); + + const response = await deleteSubscriptionAtc.execute(this.algodClient, 10); + + return { + txId: response.txIDs.pop() as string, + }; + } + + public async getSubscription({ + algodClient, + productID, + subscriberAddress, + }: { + algodClient: AlgodClient; + productID: number; + subscriberAddress: string; + }): Promise { + const getSubscriptionAtc = new AtomicTransactionComposer(); + getSubscriptionAtc.addMethodCall({ + appID: productID, + method: new ABIMethod({ + name: "get_subscription", + args: [ + { + type: "address", + name: "subscriber", + desc: "The subscriber address.", + }, + ], + returns: { type: "uint64" }, + }), + methodArgs: [subscriberAddress], + sender: subscriberAddress, + signer: this.creator.signer, + suggestedParams: await getParamsWithFeeCount(algodClient, 1), + }); + + const response = await getSubscriptionAtc.simulate(algodClient); + + return response.methodResults[0].returnValue?.valueOf() as SubscriptionRecord; + } +} diff --git a/src/clients/SubtopiaRegistry.ts b/src/clients/SubtopiaRegistry.ts index 0125081..98a5881 100644 --- a/src/clients/SubtopiaRegistry.ts +++ b/src/clients/SubtopiaRegistry.ts @@ -4,84 +4,48 @@ // ============================================================================= import algosdk, { - ABIStringType, - ABIType, - AtomicTransactionComposer, - TransactionSigner, algosToMicroalgos, decodeAddress, + decodeUint64, encodeAddress, - encodeUint64, - makeAssetTransferTxnWithSuggestedParamsFromObject, + AtomicTransactionComposer, makePaymentTxnWithSuggestedParamsFromObject, + ABIMethod, + getApplicationAddress, } from "algosdk"; import AlgodClient from "algosdk/dist/types/client/v2/algod/algod"; import { - loadApplicationState, - getLocker, normalizePrice, - optInAsset, getParamsWithFeeCount, - rekeyLocker, - expirationTypeToMonths, calculateSmiCreationMbr, - convertCentsToAlgos, calculateSmlCreationMbr, calculateRegistryLockerBoxCreateMbr, - getTxnFeeCount, } from "../utils"; -import { Discount, SMI, Subscription } from "../contracts/smi_client"; -import { SmrClient } from "../contracts/SMR"; import { getAssetByID } from "../utils"; import { - SUBTOPIA_REGISTRY_APP_ID, - DEFAULT_AWAIT_ROUNDS, SMI_APPROVAL_KEY, SMI_CLEAR_KEY, MIN_APP_OPTIN_MBR, MIN_APP_BALANCE_MBR, MIN_ASA_OPTIN_MBR, SMI_CREATION_PLATFORM_FEE_CENTS, - SMI_VERSION, - SMR_VERSION, SML_APPROVAL_KEY, SML_CLEAR_KEY, + SUBTOPIA_REGISTRY_ID, } from "../constants"; import { SubscriptionType, - SubscriptionExpirationType, PriceNormalizationType, - DiscountType, + ChainType, + LockerType, } from "../enums"; -import { - SMIState, - SubscriptionRecord, - DiscountRecord, - SMISubscribeParams, - ChainMethodParams, - SMIUnsubscribeParams, - SMIClaimSubscriptionParams, - SMIClaimRevenueParams, - SMITransferSubscriptionParams, - SMIMarkForDeletionParams, - SMIDeleteSubscriptionParams, - SMICreateDiscountParams, - SMIDeleteDiscountParams, - SMRAddInfrastructureParams, -} from "../interfaces"; import { - getAppClient, - microAlgos, - transactionFees, + getAppById, + getAppGlobalState, } from "@algorandfoundation/algokit-utils"; -import { ApplicationClient } from "@algorandfoundation/algokit-utils/types/app-client"; import { TransactionSignerAccount } from "@algorandfoundation/algokit-utils/types/account"; -import { SmaClient } from "../contracts/SMA"; -import { - AppCallTransactionResultOfType, - AppReference, -} from "@algorandfoundation/algokit-utils/types/app"; +import { ApplicationSpec } from "interfaces"; const STP_IMAGE_URL = "ipfs://bafybeicddz7kbuxajj6bob5bjqtweq6wchkdkiq4vvhwrwrne7iz4f25xi"; @@ -90,285 +54,521 @@ const encoder = new TextEncoder(); export class SubtopiaRegistry { algodClient: algosdk.Algodv2; - registryClient: SmrClient; - smaClient: SmaClient; creator: TransactionSignerAccount; version: string; - appId: number; - appAddress; + appID: number; + appAddress: string; + appSpec: ApplicationSpec; + oracleID: number; - private constructor( - algodClient: AlgodClient, - creator: TransactionSignerAccount, - registryClient: SmrClient, - appReference: AppReference, - smaClient: SmaClient, - version: string - ) { + private constructor({ + algodClient, + creator, + appID, + appAddress, + appSpec, + oracleID, + version, + }: { + algodClient: AlgodClient; + creator: TransactionSignerAccount; + appID: number; + appAddress: string; + appSpec: ApplicationSpec; + oracleID: number; + version: string; + }) { this.algodClient = algodClient; this.creator = creator; - this.registryClient = registryClient; - this.appAddress = appReference.appAddress; - this.appId = Number(appReference.appId); - this.smaClient = smaClient; + this.appAddress = appAddress; + this.appID = appID; + this.appSpec = appSpec; + this.oracleID = oracleID; this.version = version; } public static async init( algodClient: AlgodClient, creator: TransactionSignerAccount, - smrId: number = SUBTOPIA_REGISTRY_APP_ID + chainType: ChainType ): Promise { - const registryClient = new SmrClient( - { - resolveBy: "id", - sender: creator, - id: smrId, - }, - algodClient - ); + const registryID = SUBTOPIA_REGISTRY_ID(chainType); + const registryAddress = getApplicationAddress(registryID); + const registrySpec = await getAppById(registryID, algodClient); - const state = (await registryClient.getGlobalState()).sma_id; - - if (!state) { - throw new Error("SMR is not initialized"); - } - - const smaClient = new SmaClient( - { - resolveBy: "id", - sender: creator, - id: state.asNumber(), - }, + const registryGlobalState = await getAppGlobalState( + registryID, algodClient ); + const oracleID = registryGlobalState.oracle_id.value as number; - const versionAtc = await registryClient.compose().getVersion({}).atc(); + const versionAtc = new AtomicTransactionComposer(); + versionAtc.addMethodCall({ + appID: registryID, + method: new ABIMethod({ + name: "get_version", + args: [], + returns: { type: "string" }, + }), + sender: creator.addr, + signer: creator.signer, + suggestedParams: await getParamsWithFeeCount(algodClient, 1), + }); const response = await versionAtc.simulate(algodClient); const version = response.methodResults[0].returnValue as string; - const appReference = - (await registryClient.appClient.getAppReference()) as AppReference; - - return new SubtopiaRegistry( - algodClient, - creator, - registryClient, - appReference, - smaClient, - version - ); - } - public async getAddress(): Promise { - const reference = await this.registryClient.appClient.getAppReference(); - return reference.appAddress; + return new SubtopiaRegistry({ + algodClient: algodClient, + creator: creator, + appID: registryID, + appAddress: registryAddress, + appSpec: { + approval: registrySpec.params.approvalProgram, + clear: registrySpec.params.clearStateProgram, + globalNumUint: + Number(registrySpec.params.globalStateSchema?.numUint) || 0, + globalNumByteSlice: + Number(registrySpec.params.globalStateSchema?.numByteSlice) || 0, + localNumUint: + Number(registrySpec.params.localStateSchema?.numUint) || 0, + localNumByteSlice: + Number(registrySpec.params.localStateSchema?.numByteSlice) || 0, + }, + oracleID: oracleID, + version: version, + }); } public async getInfrastructureCreationFee(coinID = 0): Promise { return ( algosToMicroalgos(MIN_APP_OPTIN_MBR) + algosToMicroalgos(MIN_APP_BALANCE_MBR) + - (await calculateSmiCreationMbr(this.algodClient)) + + (await calculateSmiCreationMbr(this.appSpec)) + (coinID > 0 ? algosToMicroalgos(MIN_ASA_OPTIN_MBR) : 0) ); } - public async getInfrastructureCreationPlatformFee(): Promise { - const currentPrice = (await this.smaClient.getGlobalState()).price; - if (!currentPrice) { - throw new Error("SMA is not initialized"); - } + public async getInfrastructureCreationPlatformFee( + priceInCents: number + ): Promise { + const computePlatformFeeAtc = new AtomicTransactionComposer(); + computePlatformFeeAtc.addMethodCall({ + appID: this.oracleID, + method: new ABIMethod({ + name: "compute_platform_fee", + args: [ + { + type: "uint64", + name: "whole_usd", + desc: "Amount of USD in whole numbers (CENTS)", + }, + ], + returns: { type: "uint64" }, + }), + methodArgs: [priceInCents], + sender: this.creator.addr, + signer: this.creator.signer, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 1), + }); - return convertCentsToAlgos( - SMI_CREATION_PLATFORM_FEE_CENTS, - currentPrice.asNumber() - ); + const response = await computePlatformFeeAtc.simulate(this.algodClient); + + return Number(response.methodResults[0].returnValue); } public async getLockerCreationFee(creatorAddress: string): Promise { return ( algosToMicroalgos(MIN_APP_OPTIN_MBR) + - (await calculateSmlCreationMbr(this.algodClient)) + + (await calculateSmlCreationMbr(this.appSpec)) + calculateRegistryLockerBoxCreateMbr(creatorAddress) ); } public async createLocker({ creator, + lockerType, }: { creator: TransactionSignerAccount; + lockerType: LockerType; }): Promise<{ - txId: string; - lockerId: number; + txID: string; + lockerID: number; }> { - const feeAmount = await this.getLockerCreationFee(creator.addr); + const feeAmount = (await this.getLockerCreationFee(creator.addr)) + 10000; - const response = await this.registryClient - .compose() - .createSml( + const createLockerAtc = new AtomicTransactionComposer(); + createLockerAtc.addMethodCall({ + appID: this.appID, + method: new ABIMethod({ + name: "create_locker", + args: [ + { + name: "manager", + type: "address", + }, + { + name: "locker_type", + type: "uint64", + }, + { + name: "fee_txn", + type: "pay", + }, + ], + returns: { type: "uint64" }, + }), + methodArgs: [ + creator.addr, + lockerType.valueOf(), { - manager: creator.addr, - fee_txn: makePaymentTxnWithSuggestedParamsFromObject({ + txn: makePaymentTxnWithSuggestedParamsFromObject({ from: creator.addr, to: this.appAddress, amount: feeAmount, suggestedParams: await getParamsWithFeeCount(this.algodClient, 0), }), + signer: creator.signer, }, + ], + boxes: [ { - sendParams: { - fee: transactionFees(4), - }, - boxes: [ - { - appIndex: this.appId, - name: decodeAddress(creator.addr).publicKey, - }, - { - appIndex: this.appId, - name: encoder.encode(SML_APPROVAL_KEY), - }, - { - appIndex: this.appId, - name: encoder.encode(SML_CLEAR_KEY), - }, - ], - } - ) - .execute(); + appIndex: this.appID, + name: new Uint8Array([ + ...Buffer.from("cl-"), + ...decodeAddress(creator.addr).publicKey, + ]), + }, + { + appIndex: this.appID, + name: encoder.encode(SML_APPROVAL_KEY), + }, + { + appIndex: this.appID, + name: encoder.encode(SML_CLEAR_KEY), + }, + ], + sender: creator.addr, + signer: creator.signer, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 4), + }); + + const response = await createLockerAtc.execute(this.algodClient, 10); return { - txId: response.txIds.pop() as string, - lockerId: Number(response.returns[0]), + txID: response.txIDs.pop() as string, + lockerID: Number(response.methodResults[0].returnValue), }; } - public async getLocker(creatorAddress: string): Promise { - const atc = await this.registryClient - .compose() - .getSml( + public static async getLocker({ + registryID, + algodClient, + ownerAddress, + }: { + registryID: number; + algodClient: AlgodClient; + ownerAddress: string; + }): Promise { + const boxValue = await algodClient + .getApplicationBoxByName( + registryID, + new Uint8Array([ + ...Buffer.from("cl-"), + ...decodeAddress(ownerAddress).publicKey, + ]) + ) + .do() + .catch(() => undefined); + + return boxValue ? decodeUint64(boxValue.value, "safe") : undefined; + } + + public async transferInfrastructure({ + infrastructureID, + newOwnerAddress, + }: { + infrastructureID: number; + newOwnerAddress: string; + }): Promise<{ + txID: string; + }> { + const oldOwnerLockerId = await SubtopiaRegistry.getLocker({ + registryID: this.appID, + algodClient: this.algodClient, + ownerAddress: this.creator.addr, + }); + const newOwnerLockerId = await SubtopiaRegistry.getLocker({ + registryID: this.appID, + algodClient: this.algodClient, + ownerAddress: newOwnerAddress, + }); + + if (!oldOwnerLockerId) { + throw new Error("Locker not found"); + } + + const boxes = [ + { + appIndex: this.appID, + name: decodeAddress(this.creator.addr).publicKey, + }, + { + appIndex: this.appID, + name: decodeAddress(newOwnerAddress).publicKey, + }, + ]; + + if (!newOwnerLockerId) { + boxes.push.apply(boxes, [ { - manager: creatorAddress, + appIndex: this.appID, + name: encoder.encode(SML_APPROVAL_KEY), }, { - boxes: [ - { - appIndex: this.appId, - name: decodeAddress(creatorAddress).publicKey, - }, - ], - } - ) - .atc(); + appIndex: this.appID, + name: encoder.encode(SML_CLEAR_KEY), + }, + ]); + } - const response = await atc.simulate(this.algodClient); - const lockerId = Number(response.methodResults[0].returnValue); - return lockerId > 0 ? lockerId : undefined; + const transferInfraAtc = new AtomicTransactionComposer(); + transferInfraAtc.addMethodCall({ + appID: this.appID, + method: new ABIMethod({ + name: "transfer_infrastructure", + args: [ + { + name: "infrastructure", + type: "uint64", + }, + { + name: "old_locker", + type: "uint64", + }, + { + name: "new_manager", + type: "address", + }, + { + name: "transfer_fee_txn", + type: "pay", + }, + ], + returns: { type: "uint64" }, + }), + methodArgs: [ + infrastructureID, + oldOwnerLockerId, + newOwnerAddress, + { + txn: makePaymentTxnWithSuggestedParamsFromObject({ + from: this.creator.addr, + to: this.appAddress, + amount: algosToMicroalgos(newOwnerLockerId ? 0 : 0.4), + suggestedParams: await getParamsWithFeeCount(this.algodClient, 0), + }), + signer: this.creator.signer, + }, + ], + boxes: boxes, + sender: this.creator.addr, + signer: this.creator.signer, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 8), + }); + + const response = await transferInfraAtc.execute(this.algodClient, 10); + + return { + txID: response.txIDs.pop() as string, + }; } public async createInfrastructure({ - name, + productName, + subscriptionName, price, - lockerId, + lockerID, subType = SubscriptionType.UNLIMITED, maxSubs = 0, coinID = 0, unitName = STP_UNIT_NAME, imageUrl = STP_IMAGE_URL, }: { - name: string; + productName: string; + subscriptionName: string; price: number; - lockerId: number; + lockerID: number; subType?: SubscriptionType; maxSubs?: number; coinID?: number; unitName?: string; imageUrl?: string; }): Promise<{ - txId: string; - infrastructureId: number; + txID: string; + infrastructureID: number; }> { const asset = await getAssetByID(this.algodClient, coinID); - const smaID = (await this.registryClient.getGlobalState()).sma_id; - if (!smaID) { + if (!this.oracleID) { throw new Error("SMR is not initialized"); } - + const oracleAdminState = ( + await getAppGlobalState(this.oracleID, this.algodClient) + ).admin; const adminAddress = encodeAddress( - (await this.smaClient.getGlobalState()).admin?.asByteArray() as Uint8Array + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + oracleAdminState.valueRaw ); const feeAmount = await this.getInfrastructureCreationFee(coinID); - const platformFeeAmount = await this.getInfrastructureCreationPlatformFee(); + const platformFeeAmount = await this.getInfrastructureCreationPlatformFee( + SMI_CREATION_PLATFORM_FEE_CENTS + ); - const response = await this.registryClient - .compose() - .createSmi( + const createInfraAtc = new AtomicTransactionComposer(); + createInfraAtc.addMethodCall({ + appID: this.appID, + method: new ABIMethod({ + name: "create_infrastructure", + args: [ + { + type: "string", + name: "product_name", + desc: "The name of the product (subtopia, netflix, etc)", + }, + { + type: "string", + name: "subscription_name", + desc: "The subscription name of the product (pro, etc)", + }, + { + type: "uint64", + name: "sub_type", + desc: "The sub type of the INFRASTRUCTURE.", + }, + { + type: "uint64", + name: "price", + desc: "The price of the INFRASTRUCTURE.", + }, + { + type: "uint64", + name: "max_subs", + desc: "The maximum number of subscriptions.", + }, + { + type: "asset", + name: "coin", + desc: "The coin of the INFRASTRUCTURE.", + }, + { + type: "string", + name: "unit_name", + desc: "The unit name of the INFRASTRUCTURE.", + }, + { + type: "string", + name: "image_url", + desc: "The image URL of the INFRASTRUCTURE.", + }, + { + type: "address", + name: "manager", + desc: "The manager address.", + }, + { + type: "application", + name: "locker", + desc: "The locker.", + }, + { + type: "application", + name: "oracle", + desc: "The oracle.", + }, + { + type: "pay", + name: "fee_txn", + desc: "The fee transaction.", + }, + { + type: "pay", + name: "platform_fee_txn", + desc: "The platform fee transaction.", + }, + ], + returns: { type: "uint64" }, + }), + methodArgs: [ + productName, + subscriptionName, + subType.valueOf(), + normalizePrice( + price, + asset.decimals, + PriceNormalizationType.RAW + ).valueOf(), + maxSubs, + asset.index, + unitName, + imageUrl, + this.creator.addr, + lockerID, + this.oracleID, { - name: name, - manager: this.creator.addr, - sub_type: Number(subType), - price: normalizePrice( - price, - asset.decimals, - PriceNormalizationType.RAW - ), - max_subs: maxSubs, - coin: coinID, - unit_name: unitName, - image_url: imageUrl, - fee_txn: makePaymentTxnWithSuggestedParamsFromObject({ + txn: makePaymentTxnWithSuggestedParamsFromObject({ from: this.creator.addr, to: this.appAddress, amount: feeAmount, suggestedParams: await getParamsWithFeeCount(this.algodClient, 0), }), - platform_fee_txn: makePaymentTxnWithSuggestedParamsFromObject({ + signer: this.creator.signer, + }, + { + txn: makePaymentTxnWithSuggestedParamsFromObject({ from: this.creator.addr, to: adminAddress, amount: platformFeeAmount, suggestedParams: await getParamsWithFeeCount(this.algodClient, 0), }), - sma: smaID.asNumber(), - locker: lockerId, + signer: this.creator.signer, }, + ], + boxes: [ { - sendParams: { - fee: transactionFees(8), - }, - boxes: [ - { - appIndex: this.appId, - name: decodeAddress(this.creator.addr).publicKey, - }, - { - appIndex: this.appId, - name: encoder.encode(SMI_APPROVAL_KEY), - }, - { - appIndex: this.appId, - name: encoder.encode(SMI_APPROVAL_KEY), - }, - { - appIndex: this.appId, - name: encoder.encode(SMI_APPROVAL_KEY), - }, - { - appIndex: this.appId, - name: encoder.encode(SMI_CLEAR_KEY), - }, - ], - } - ) - .execute() - .catch((e) => { - console.log(e); - throw e; - }); + appIndex: this.appID, + name: new Uint8Array([ + ...Buffer.from("cl-"), + ...decodeAddress(this.creator.addr).publicKey, + ]), + }, + { + appIndex: this.appID, + name: encoder.encode(SMI_APPROVAL_KEY), + }, + { + appIndex: this.appID, + name: encoder.encode(SMI_APPROVAL_KEY), + }, + { + appIndex: this.appID, + name: encoder.encode(SMI_APPROVAL_KEY), + }, + { + appIndex: this.appID, + name: encoder.encode(SMI_CLEAR_KEY), + }, + ], + sender: this.creator.addr, + signer: this.creator.signer, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 8), + }); + + const response = await createInfraAtc.execute(this.algodClient, 10); return { - txId: response.txIds.pop() as string, - infrastructureId: Number(response.returns[0]), + txID: response.txIDs.pop() as string, + infrastructureID: Number(response.methodResults[0].returnValue), }; } } diff --git a/src/constants/index.ts b/src/constants/index.ts index 62df7bb..12d4cb3 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -3,10 +3,20 @@ // Copyright (C) 2023 Altynbek Orumbayev // ============================================================================= +import { ChainType } from "../enums"; import { AssetMetadata } from "../interfaces"; export const DEFAULT_AWAIT_ROUNDS = 10; export const SUBTOPIA_CONTRACTS_VERSION = "0.3.0"; +export const TESTNET_SUBTOPIA_REGISTRY_ID = 269954941; +export const MAINNET_SUBTOPIA_REGISTRY_ID = 269954941; +export const SUBTOPIA_REGISTRY_ID = (chainType: ChainType) => { + if (chainType === ChainType.MAINNET) { + return TESTNET_SUBTOPIA_REGISTRY_ID; + } else { + return MAINNET_SUBTOPIA_REGISTRY_ID; + } +}; export const ALGO_ASSET = { index: 0, @@ -17,14 +27,15 @@ export const ALGO_ASSET = { } as AssetMetadata; export const SMI_STATE_MANAGER_KEY = "manager"; -export const SMI_APPROVAL_KEY = "smi_approval"; -export const SMI_CLEAR_KEY = "smi_clear"; -export const SML_APPROVAL_KEY = "sml_approval"; -export const SML_CLEAR_KEY = "sml_clear"; +export const SMI_APPROVAL_KEY = "infrastructure_approval"; +export const SMI_CLEAR_KEY = "infrastructure_clear"; +export const SML_APPROVAL_KEY = "locker_approval"; +export const SML_CLEAR_KEY = "locker_clear"; export const MIN_APP_BALANCE_MBR = 0.1; // ALGO export const MIN_APP_OPTIN_MBR = 0.1; // ALGO export const MIN_ASA_OPTIN_MBR = 0.1; // ALGO +export const MIN_ASA_CREATE_MBR = 0.1; // ALGO // Platform fees export const SUBSCRIPTION_PLATFORM_FEE_CENTS = 10; diff --git a/src/contracts/SMA.ts b/src/contracts/SMA.ts deleted file mode 100644 index e452ba2..0000000 --- a/src/contracts/SMA.ts +++ /dev/null @@ -1,719 +0,0 @@ -/* eslint-disable */ -/** - * This file was automatically generated by @algorandfoundation/algokit-client-generator. - * DO NOT MODIFY IT BY HAND. - * requires: @algorandfoundation/algokit-utils: ^2 - */ -import * as algokit from '@algorandfoundation/algokit-utils' -import { - AppCallTransactionResult, - AppCallTransactionResultOfType, - CoreAppCallArgs, - RawAppCallArgs, - AppState, - TealTemplateParams, - ABIAppCallArg, -} from '@algorandfoundation/algokit-utils/types/app' -import { - AppClientCallCoreParams, - AppClientCompilationParams, - AppClientDeployCoreParams, - AppDetails, - ApplicationClient, -} from '@algorandfoundation/algokit-utils/types/app-client' -import { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' -import { SendTransactionResult, TransactionToSign, SendTransactionFrom } from '@algorandfoundation/algokit-utils/types/transaction' -import { Algodv2, OnApplicationComplete, Transaction, TransactionWithSigner, AtomicTransactionComposer } from 'algosdk' -export const APP_SPEC: AppSpec = { - "hints": { - "update_price(uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "update_admin(address)void": { - "call_config": { - "no_op": "CALL" - } - }, - "get_version()string": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMQpieXRlY2Jsb2NrIDB4NjE2NDZkNjk2ZSAweCAweDY0NjU2MzY5NmQ2MTZjNzMgMHg3MDcyNjk2MzY1IDB4NzU3MDY0NjE3NDY1NjQ1ZjYxNzQKdHhuIE51bUFwcEFyZ3MKaW50Y18wIC8vIDAKPT0KYm56IG1haW5fbDgKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhhNTc4MTgxOCAvLyAidXBkYXRlX3ByaWNlKHVpbnQ2NCl2b2lkIgo9PQpibnogbWFpbl9sNwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDRhMTY1ZWU3IC8vICJ1cGRhdGVfYWRtaW4oYWRkcmVzcyl2b2lkIgo9PQpibnogbWFpbl9sNgp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDJmYmE1YTFiIC8vICJnZXRfdmVyc2lvbigpc3RyaW5nIgo9PQpibnogbWFpbl9sNQplcnIKbWFpbl9sNToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBnZXR2ZXJzaW9uY2FzdGVyXzcKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDY6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgdXBkYXRlYWRtaW5jYXN0ZXJfNgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sNzoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiB1cGRhdGVwcmljZWNhc3Rlcl81CmludGNfMSAvLyAxCnJldHVybgptYWluX2w4Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CmJueiBtYWluX2wxMgp0eG4gT25Db21wbGV0aW9uCnB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgo9PQpibnogbWFpbl9sMTEKZXJyCm1haW5fbDExOgp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQphc3NlcnQKY2FsbHN1YiB1cGRhdGVfMQppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTI6CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCj09CmFzc2VydApjYWxsc3ViIGNyZWF0ZV8wCmludGNfMSAvLyAxCnJldHVybgoKLy8gY3JlYXRlCmNyZWF0ZV8wOgpwcm90byAwIDAKYnl0ZWNfMCAvLyAiYWRtaW4iCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwphcHBfZ2xvYmFsX3B1dAppbnRjXzAgLy8gMApieXRlY18yIC8vICJkZWNpbWFscyIKYXBwX2dsb2JhbF9nZXRfZXgKc3RvcmUgMQpzdG9yZSAwCmxvYWQgMQohCmFzc2VydApieXRlY18yIC8vICJkZWNpbWFscyIKcHVzaGludCAyIC8vIDIKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMyAvLyAicHJpY2UiCnB1c2hpbnQgMzAgLy8gMzAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNCAvLyAidXBkYXRlZF9hdCIKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIHVwZGF0ZQp1cGRhdGVfMToKcHJvdG8gMCAwCnR4biBTZW5kZXIKYnl0ZWNfMCAvLyAiYWRtaW4iCmFwcF9nbG9iYWxfZ2V0Cj09CmFzc2VydApyZXRzdWIKCi8vIHVwZGF0ZV9wcmljZQp1cGRhdGVwcmljZV8yOgpwcm90byAxIDAKdHhuIFNlbmRlcgpieXRlY18wIC8vICJhZG1pbiIKYXBwX2dsb2JhbF9nZXQKPT0KLy8gT25seSBtYW5hZ2VyIGNhbiB1cGRhdGUgcHJpY2UKYXNzZXJ0CmZyYW1lX2RpZyAtMQppbnRjXzAgLy8gMAo+Ci8vIFByaWNlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAKYXNzZXJ0CmJ5dGVjXzMgLy8gInByaWNlIgpmcmFtZV9kaWcgLTEKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNCAvLyAidXBkYXRlZF9hdCIKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIHVwZGF0ZV9hZG1pbgp1cGRhdGVhZG1pbl8zOgpwcm90byAxIDAKdHhuIFNlbmRlcgpieXRlY18wIC8vICJhZG1pbiIKYXBwX2dsb2JhbF9nZXQKPT0KLy8gT25seSBhZG1pbiBjYW4gc2V0IG5ldyBhZG1pbgphc3NlcnQKYnl0ZWNfMCAvLyAiYWRtaW4iCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIGdldF92ZXJzaW9uCmdldHZlcnNpb25fNDoKcHJvdG8gMCAxCmJ5dGVjXzEgLy8gIiIKZHVwCnB1c2hieXRlcyAweDMxMmUzMCAvLyAiMS4wIgpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDEKY29uY2F0CmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpleHRyYWN0IDIgMApmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDAKY29uY2F0CmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIHVwZGF0ZV9wcmljZV9jYXN0ZXIKdXBkYXRlcHJpY2VjYXN0ZXJfNToKcHJvdG8gMCAwCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKY2FsbHN1YiB1cGRhdGVwcmljZV8yCnJldHN1YgoKLy8gdXBkYXRlX2FkbWluX2Nhc3Rlcgp1cGRhdGVhZG1pbmNhc3Rlcl82Ogpwcm90byAwIDAKYnl0ZWNfMSAvLyAiIgp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMApjYWxsc3ViIHVwZGF0ZWFkbWluXzMKcmV0c3ViCgovLyBnZXRfdmVyc2lvbl9jYXN0ZXIKZ2V0dmVyc2lvbmNhc3Rlcl83Ogpwcm90byAwIDAKYnl0ZWNfMSAvLyAiIgpjYWxsc3ViIGdldHZlcnNpb25fNApmcmFtZV9idXJ5IDAKcHVzaGJ5dGVzIDB4MTUxZjdjNzUgLy8gMHgxNTFmN2M3NQpmcmFtZV9kaWcgMApjb25jYXQKbG9nCnJldHN1Yg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu" - }, - "state": { - "global": { - "num_byte_slices": 1, - "num_uints": 3 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": { - "admin": { - "type": "bytes", - "key": "admin", - "descr": "Address address" - }, - "decimals": { - "type": "uint64", - "key": "decimals", - "descr": "Number of decimals in USD" - }, - "price": { - "type": "uint64", - "key": "price", - "descr": "Price of 1 Algo in USD" - }, - "updated_at": { - "type": "uint64", - "key": "updated_at", - "descr": "Last time the price was updated" - } - }, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "SMA", - "methods": [ - { - "name": "update_price", - "args": [ - { - "type": "uint64", - "name": "price" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "update_admin", - "args": [ - { - "type": "address", - "name": "admin" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "get_version", - "args": [], - "returns": { - "type": "string" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "no_op": "CREATE", - "update_application": "CALL" - } -} - -/** - * Defines an onCompletionAction of 'no_op' - */ -export type OnCompleteNoOp = { onCompleteAction?: 'no_op' | OnApplicationComplete.NoOpOC } -/** - * Defines an onCompletionAction of 'opt_in' - */ -export type OnCompleteOptIn = { onCompleteAction: 'opt_in' | OnApplicationComplete.OptInOC } -/** - * Defines an onCompletionAction of 'close_out' - */ -export type OnCompleteCloseOut = { onCompleteAction: 'close_out' | OnApplicationComplete.CloseOutOC } -/** - * Defines an onCompletionAction of 'delete_application' - */ -export type OnCompleteDelApp = { onCompleteAction: 'delete_application' | OnApplicationComplete.DeleteApplicationOC } -/** - * Defines an onCompletionAction of 'update_application' - */ -export type OnCompleteUpdApp = { onCompleteAction: 'update_application' | OnApplicationComplete.UpdateApplicationOC } -/** - * A state record containing a single unsigned integer - */ -export type IntegerState = { - /** - * Gets the state value as a BigInt - */ - asBigInt(): bigint - /** - * Gets the state value as a number. - */ - asNumber(): number -} -/** - * A state record containing binary data - */ -export type BinaryState = { - /** - * Gets the state value as a Uint8Array - */ - asByteArray(): Uint8Array - /** - * Gets the state value as a string - */ - asString(): string -} - -/** - * Defines the types of available calls and state of the Sma smart contract. - */ -export type Sma = { - /** - * Maps method signatures / names to their argument and return types. - */ - methods: - & Record<'update_price(uint64)void' | 'update_price', { - argsObj: { - price: bigint | number - } - argsTuple: [price: bigint | number] - returns: void - }> - & Record<'update_admin(address)void' | 'update_admin', { - argsObj: { - admin: string - } - argsTuple: [admin: string] - returns: void - }> - & Record<'get_version()string' | 'get_version', { - argsObj: { - } - argsTuple: [] - returns: string - }> - /** - * Defines the shape of the global and local state of the application. - */ - state: { - global: { - /** - * Address address - */ - 'admin'?: BinaryState - /** - * Number of decimals in USD - */ - 'decimals'?: IntegerState - /** - * Price of 1 Algo in USD - */ - 'price'?: IntegerState - /** - * Last time the price was updated - */ - 'updated_at'?: IntegerState - } - } -} -/** - * Defines the possible abi call signatures - */ -export type SmaSig = keyof Sma['methods'] -/** - * Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a bare call is made - */ -export type TypedCallParams = { - method: TSignature - methodArgs: TSignature extends undefined ? undefined : Array -} & AppClientCallCoreParams & CoreAppCallArgs -/** - * Defines the arguments required for a bare call - */ -export type BareCallArgs = Omit -/** - * Maps a method signature from the Sma smart contract to the method's arguments in either tuple of struct form - */ -export type MethodArgs = Sma['methods'][TSignature]['argsObj' | 'argsTuple'] -/** - * Maps a method signature from the Sma smart contract to the method's return type - */ -export type MethodReturn = Sma['methods'][TSignature]['returns'] - -/** - * A factory for available 'create' calls - */ -export type SmaCreateCalls = (typeof SmaCallFactory)['create'] -/** - * Defines supported create methods for this smart contract - */ -export type SmaCreateCallParams = - | (TypedCallParams & (OnCompleteNoOp)) -/** - * A factory for available 'update' calls - */ -export type SmaUpdateCalls = (typeof SmaCallFactory)['update'] -/** - * Defines supported update methods for this smart contract - */ -export type SmaUpdateCallParams = - | TypedCallParams -/** - * Defines arguments required for the deploy method. - */ -export type SmaDeployArgs = { - deployTimeParams?: TealTemplateParams - /** - * A delegate which takes a create call factory and returns the create call params for this smart contract - */ - createCall?: (callFactory: SmaCreateCalls) => SmaCreateCallParams - /** - * A delegate which takes a update call factory and returns the update call params for this smart contract - */ - updateCall?: (callFactory: SmaUpdateCalls) => SmaUpdateCallParams -} - - -/** - * Exposes methods for constructing all available smart contract calls - */ -export abstract class SmaCallFactory { - /** - * Gets available create call factories - */ - static get create() { - return { - /** - * Constructs a create call for the SMA smart contract using a bare call - * - * @param params Any parameters for the call - * @returns A TypedCallParams object for the call - */ - bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams & (OnCompleteNoOp) = {}) { - return { - method: undefined, - methodArgs: undefined, - ...params, - } - }, - } - } - - /** - * Gets available update call factories - */ - static get update() { - return { - /** - * Constructs an update call for the SMA smart contract using a bare call - * - * @param params Any parameters for the call - * @returns A TypedCallParams object for the call - */ - bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams = {}) { - return { - method: undefined, - methodArgs: undefined, - ...params, - } - }, - } - } - - /** - * Constructs a no op call for the update_price(uint64)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static updatePrice(args: MethodArgs<'update_price(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'update_price(uint64)void' as const, - methodArgs: Array.isArray(args) ? args : [args.price], - ...params, - } - } - /** - * Constructs a no op call for the update_admin(address)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static updateAdmin(args: MethodArgs<'update_admin(address)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'update_admin(address)void' as const, - methodArgs: Array.isArray(args) ? args : [args.admin], - ...params, - } - } - /** - * Constructs a no op call for the get_version()string ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'get_version()string' as const, - methodArgs: Array.isArray(args) ? args : [], - ...params, - } - } -} - -/** - * A client to make calls to the SMA smart contract - */ -export class SmaClient { - /** - * The underlying `ApplicationClient` for when you want to have more flexibility - */ - public readonly appClient: ApplicationClient - - private readonly sender: SendTransactionFrom | undefined - - /** - * Creates a new instance of `SmaClient` - * - * @param appDetails appDetails The details to identify the app to deploy - * @param algod An algod client instance - */ - constructor(appDetails: AppDetails, private algod: Algodv2) { - this.sender = appDetails.sender - this.appClient = algokit.getAppClient({ - ...appDetails, - app: APP_SPEC - }, algod) - } - - /** - * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type - * - * @param result The AppCallTransactionResult to be mapped - * @param returnValueFormatter An optional delegate to format the return value if required - * @returns The smart contract response with an updated return value - */ - protected mapReturnValue(result: AppCallTransactionResult, returnValueFormatter?: (value: any) => TReturn): AppCallTransactionResultOfType { - if(result.return?.decodeError) { - throw result.return.decodeError - } - const returnValue = result.return?.returnValue !== undefined && returnValueFormatter !== undefined - ? returnValueFormatter(result.return.returnValue) - : result.return?.returnValue as TReturn | undefined - return { ...result, return: returnValue } - } - - /** - * Calls the ABI method with the matching signature using an onCompletion code of NO_OP - * - * @param typedCallParams An object containing the method signature, args, and any other relevant parameters - * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type - * @returns The result of the smart contract call - */ - public async call(typedCallParams: TypedCallParams, returnValueFormatter?: (value: any) => MethodReturn) { - return this.mapReturnValue>(await this.appClient.call(typedCallParams), returnValueFormatter) - } - - /** - * Idempotently deploys the SMA smart contract. - * - * @param params The arguments for the contract calls and any additional parameters for the call - * @returns The deployment result - */ - public deploy(params: SmaDeployArgs & AppClientDeployCoreParams = {}): ReturnType { - const createArgs = params.createCall?.(SmaCallFactory.create) - const updateArgs = params.updateCall?.(SmaCallFactory.update) - return this.appClient.deploy({ - ...params, - updateArgs, - createArgs, - createOnCompleteAction: createArgs?.onCompleteAction, - }) - } - - /** - * Gets available create methods - */ - public get create() { - const $this = this - return { - /** - * Creates a new instance of the SMA smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The create result - */ - bare(args: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs & (OnCompleteNoOp) = {}): Promise> { - return $this.appClient.create(args) as unknown as Promise> - }, - } - } - - /** - * Gets available update methods - */ - public get update() { - const $this = this - return { - /** - * Updates an existing instance of the SMA smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The update result - */ - bare(args: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs = {}): Promise> { - return $this.appClient.update(args) as unknown as Promise> - }, - } - } - - /** - * Makes a clear_state call to an existing instance of the SMA smart contract. - * - * @param args The arguments for the bare call - * @returns The clear_state result - */ - public clearState(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.appClient.clearState(args) - } - - /** - * Calls the update_price(uint64)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public updatePrice(args: MethodArgs<'update_price(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmaCallFactory.updatePrice(args, params)) - } - - /** - * Calls the update_admin(address)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public updateAdmin(args: MethodArgs<'update_admin(address)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmaCallFactory.updateAdmin(args, params)) - } - - /** - * Calls the get_version()string ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmaCallFactory.getVersion(args, params)) - } - - /** - * Extracts a binary state value out of an AppState dictionary - * - * @param state The state dictionary containing the state value - * @param key The key of the state value - * @returns A BinaryState instance containing the state value, or undefined if the key was not found - */ - private static getBinaryState(state: AppState, key: string): BinaryState | undefined { - const value = state[key] - if (!value) return undefined - if (!('valueRaw' in value)) - throw new Error(`Failed to parse state value for ${key}; received an int when expected a byte array`) - return { - asString(): string { - return value.value - }, - asByteArray(): Uint8Array { - return value.valueRaw - } - } - } - - /** - * Extracts a integer state value out of an AppState dictionary - * - * @param state The state dictionary containing the state value - * @param key The key of the state value - * @returns An IntegerState instance containing the state value, or undefined if the key was not found - */ - private static getIntegerState(state: AppState, key: string): IntegerState | undefined { - const value = state[key] - if (!value) return undefined - if ('valueRaw' in value) - throw new Error(`Failed to parse state value for ${key}; received a byte array when expected a number`) - return { - asBigInt() { - return typeof value.value === 'bigint' ? value.value : BigInt(value.value) - }, - asNumber(): number { - return typeof value.value === 'bigint' ? Number(value.value) : value.value - }, - } - } - - /** - * Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value - */ - public async getGlobalState(): Promise { - const state = await this.appClient.getGlobalState() - return { - get admin() { - return SmaClient.getBinaryState(state, 'admin') - }, - get decimals() { - return SmaClient.getIntegerState(state, 'decimals') - }, - get price() { - return SmaClient.getIntegerState(state, 'price') - }, - get updated_at() { - return SmaClient.getIntegerState(state, 'updated_at') - }, - } - } - - public compose(): SmaComposer { - const client = this - const atc = new AtomicTransactionComposer() - let promiseChain:Promise = Promise.resolve() - const resultMappers: Array any)> = [] - return { - updatePrice(args: MethodArgs<'update_price(uint64)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.updatePrice(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - updateAdmin(args: MethodArgs<'update_admin(address)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.updateAdmin(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.getVersion(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - get update() { - const $this = this - return { - bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.update.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return $this - }, - } - }, - clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.clearState({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom) { - promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit.getTransactionWithSigner(txn, defaultSender ?? client.sender))) - return this - }, - async atc() { - await promiseChain - return atc - }, - async execute() { - await promiseChain - const result = await algokit.sendAtomicTransactionComposer({ atc, sendParams: {} }, client.algod) - return { - ...result, - returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue) - } - } - } as unknown as SmaComposer - } -} -export type SmaComposer = { - /** - * Calls the update_price(uint64)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - updatePrice(args: MethodArgs<'update_price(uint64)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmaComposer<[...TReturns, MethodReturn<'update_price(uint64)void'>]> - - /** - * Calls the update_admin(address)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - updateAdmin(args: MethodArgs<'update_admin(address)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmaComposer<[...TReturns, MethodReturn<'update_admin(address)void'>]> - - /** - * Calls the get_version()string ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmaComposer<[...TReturns, MethodReturn<'get_version()string'>]> - - /** - * Gets available update methods - */ - readonly update: { - /** - * Updates an existing instance of the SMA smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs): SmaComposer<[...TReturns, undefined]> - } - - /** - * Makes a clear_state call to an existing instance of the SMA smart contract. - * - * @param args The arguments for the bare call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmaComposer<[...TReturns, undefined]> - - /** - * Adds a transaction to the composer - * - * @param txn One of: A TransactionWithSigner object (returned as is), a TransactionToSign object (signer is obtained from the signer property), a Transaction object (signer is extracted from the defaultSender parameter), an async SendTransactionResult returned by one of algokit utils helpers (signer is obtained from the defaultSender parameter) - * @param defaultSender The default sender to be used to obtain a signer where the object provided to the transaction parameter does not include a signer. - */ - addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom): SmaComposer - /** - * Returns the underlying AtomicTransactionComposer instance - */ - atc(): Promise - /** - * Executes the transaction group and returns an array of results - */ - execute(): Promise> -} -export type SmaComposerResults = { - returns: TReturns - groupId: string - txIds: string[] - transactions: Transaction[] -} diff --git a/src/contracts/SMI.ts b/src/contracts/SMI.ts deleted file mode 100644 index d320f9b..0000000 --- a/src/contracts/SMI.ts +++ /dev/null @@ -1,2354 +0,0 @@ -/* eslint-disable */ -/** - * This file was automatically generated by @algorandfoundation/algokit-client-generator. - * DO NOT MODIFY IT BY HAND. - * requires: @algorandfoundation/algokit-utils: ^2 - */ -import * as algokit from '@algorandfoundation/algokit-utils' -import { - AppCallTransactionResult, - AppCallTransactionResultOfType, - CoreAppCallArgs, - RawAppCallArgs, - AppState, - TealTemplateParams, - ABIAppCallArg, -} from '@algorandfoundation/algokit-utils/types/app' -import { - AppClientCallCoreParams, - AppClientCompilationParams, - AppClientDeployCoreParams, - AppDetails, - ApplicationClient, -} from '@algorandfoundation/algokit-utils/types/app-client' -import { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' -import { SendTransactionResult, TransactionToSign, SendTransactionFrom } from '@algorandfoundation/algokit-utils/types/transaction' -import { Algodv2, OnApplicationComplete, Transaction, TransactionWithSigner, AtomicTransactionComposer } from 'algosdk' -export const APP_SPEC: AppSpec = { - "hints": { - "create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void": { - "call_config": { - "no_op": "CREATE" - } - }, - "get_version()string": { - "call_config": { - "no_op": "CALL" - } - }, - "update_manager(address)void": { - "call_config": { - "no_op": "CALL" - } - }, - "update_sma_id(uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)": { - "structs": { - "output": { - "name": "Discount", - "elements": [ - [ - "expiration_type", - "uint64" - ], - [ - "discount_type", - "uint64" - ], - [ - "discount_value", - "uint64" - ], - [ - "expires_at", - "uint64" - ], - [ - "created_at", - "uint64" - ], - [ - "total_claims", - "uint64" - ] - ] - } - }, - "call_config": { - "no_op": "CALL" - } - }, - "is_discount_expired(uint64)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "create_discount(uint64,uint64,uint64,uint64,pay)void": { - "call_config": { - "no_op": "CALL" - } - }, - "delete_discount(uint64)void": { - "call_config": { - "no_op": "CALL" - } - }, - "compute_price(uint64,bool)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "compute_platform_fee(uint64,application)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "create_subscription(address,uint64,pay,pay,txn,application,application)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "get_subscription(address)(uint64,uint64,uint64,uint64,uint64)": { - "structs": { - "output": { - "name": "Subscription", - "elements": [ - [ - "sub_type", - "uint64" - ], - [ - "sub_id", - "uint64" - ], - [ - "created_at", - "uint64" - ], - [ - "expires_at", - "uint64" - ], - [ - "expiration_type", - "uint64" - ] - ] - } - }, - "call_config": { - "no_op": "CALL" - } - }, - "is_subscriber(address)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "claim_subscription(asset)void": { - "call_config": { - "no_op": "CALL" - } - }, - "transfer_subscription(address,asset)void": { - "call_config": { - "no_op": "CALL" - } - }, - "delete_subscription(asset)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "enable()void": { - "call_config": { - "no_op": "CALL" - } - }, - "disable()void": { - "call_config": { - "no_op": "CALL" - } - }, - "delete()void": { - "call_config": { - "delete_application": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSAzIDIgMTAwMDAwIDEwMDAwIDI0OTAwIDMxMzAwCmJ5dGVjYmxvY2sgMHggMHg2ZDYxNmU2MTY3NjU3MiAweDc0NmY3NDYxNmM1ZjczNzU2MjczIDB4MTUxZjdjNzUgMHg3MzZkNjE1ZjY5NjQgMHg2YzY5NjY2NTYzNzk2MzZjNjUgMHg3MDcyNjk2MzY1IDB4NzM3NTYyNWY3NDc5NzA2NSAweDZkNjE3ODVmNzM3NTYyNzMgMHg2OTZkNjE2NzY1NWY3NTcyNmMgMHg2ZTYxNmQ2NSAweDc1NmU2OTc0NWY2ZTYxNmQ2NSAweDYzNmY2OTZlNWY2OTY0IDB4NjM3MjY1NjE3NDY1NjQ1ZjYxNzQKdHhuIE51bUFwcEFyZ3MKaW50Y18wIC8vIDAKPT0KYm56IG1haW5fbDQwCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4YTY1OTJhZjggLy8gImNyZWF0ZShzdHJpbmcsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHN0cmluZyxzdHJpbmcpdm9pZCIKPT0KYm56IG1haW5fbDM5CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MmZiYTVhMWIgLy8gImdldF92ZXJzaW9uKClzdHJpbmciCj09CmJueiBtYWluX2wzOAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGM4NmZkYjAxIC8vICJ1cGRhdGVfbWFuYWdlcihhZGRyZXNzKXZvaWQiCj09CmJueiBtYWluX2wzNwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDM2NmJmZGNiIC8vICJ1cGRhdGVfc21hX2lkKHVpbnQ2NCl2b2lkIgo9PQpibnogbWFpbl9sMzYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgwOTFlMTMyZiAvLyAiZ2V0X2Rpc2NvdW50KHVpbnQ2NCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgo9PQpibnogbWFpbl9sMzUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhjMzc2MDljMCAvLyAiaXNfZGlzY291bnRfZXhwaXJlZCh1aW50NjQpdWludDY0Igo9PQpibnogbWFpbl9sMzQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg3NGViYWEwYiAvLyAiY3JlYXRlX2Rpc2NvdW50KHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxwYXkpdm9pZCIKPT0KYm56IG1haW5fbDMzCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4YTljMGVjYzAgLy8gImRlbGV0ZV9kaXNjb3VudCh1aW50NjQpdm9pZCIKPT0KYm56IG1haW5fbDMyCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4ZTZhNmJhMzQgLy8gImNvbXB1dGVfcHJpY2UodWludDY0LGJvb2wpdWludDY0Igo9PQpibnogbWFpbl9sMzEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg2NTQ5NWM4YyAvLyAiY29tcHV0ZV9wbGF0Zm9ybV9mZWUodWludDY0LGFwcGxpY2F0aW9uKXVpbnQ2NCIKPT0KYm56IG1haW5fbDMwCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4YzliMWZhMzMgLy8gImNyZWF0ZV9zdWJzY3JpcHRpb24oYWRkcmVzcyx1aW50NjQscGF5LHBheSx0eG4sYXBwbGljYXRpb24sYXBwbGljYXRpb24pdWludDY0Igo9PQpibnogbWFpbl9sMjkKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhjMTY4NmZlZCAvLyAiZ2V0X3N1YnNjcmlwdGlvbihhZGRyZXNzKSh1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKPT0KYm56IG1haW5fbDI4CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MWVjNWU5OGEgLy8gImlzX3N1YnNjcmliZXIoYWRkcmVzcyl1aW50NjQiCj09CmJueiBtYWluX2wyNwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDk4ZjQzMmMwIC8vICJjbGFpbV9zdWJzY3JpcHRpb24oYXNzZXQpdm9pZCIKPT0KYm56IG1haW5fbDI2CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4M2IzOTVhNzQgLy8gInRyYW5zZmVyX3N1YnNjcmlwdGlvbihhZGRyZXNzLGFzc2V0KXZvaWQiCj09CmJueiBtYWluX2wyNQp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDViMWMwOTFkIC8vICJkZWxldGVfc3Vic2NyaXB0aW9uKGFzc2V0KXVpbnQ2NCIKPT0KYm56IG1haW5fbDI0CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4NTg1N2Q1NDggLy8gImVuYWJsZSgpdm9pZCIKPT0KYm56IG1haW5fbDIzCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4ZjQwMmM5YTMgLy8gImRpc2FibGUoKXZvaWQiCj09CmJueiBtYWluX2wyMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vICJkZWxldGUoKXZvaWQiCj09CmJueiBtYWluX2wyMQplcnIKbWFpbl9sMjE6CnR4biBPbkNvbXBsZXRpb24KcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGRlbGV0ZWNhc3Rlcl81MgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjI6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgZGlzYWJsZWNhc3Rlcl81MQppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjM6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgZW5hYmxlY2FzdGVyXzUwCmludGNfMSAvLyAxCnJldHVybgptYWluX2wyNDoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBkZWxldGVzdWJzY3JpcHRpb25jYXN0ZXJfNDkKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDI1Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHRyYW5zZmVyc3Vic2NyaXB0aW9uY2FzdGVyXzQ4CmludGNfMSAvLyAxCnJldHVybgptYWluX2wyNjoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBjbGFpbXN1YnNjcmlwdGlvbmNhc3Rlcl80NwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjc6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgaXNzdWJzY3JpYmVyY2FzdGVyXzQ2CmludGNfMSAvLyAxCnJldHVybgptYWluX2wyODoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBnZXRzdWJzY3JpcHRpb25jYXN0ZXJfNDUKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDI5Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGNyZWF0ZXN1YnNjcmlwdGlvbmNhc3Rlcl80NAppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMzA6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgY29tcHV0ZXBsYXRmb3JtZmVlY2FzdGVyXzQzCmludGNfMSAvLyAxCnJldHVybgptYWluX2wzMToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBjb21wdXRlcHJpY2VjYXN0ZXJfNDIKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDMyOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGRlbGV0ZWRpc2NvdW50Y2FzdGVyXzQxCmludGNfMSAvLyAxCnJldHVybgptYWluX2wzMzoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBjcmVhdGVkaXNjb3VudGNhc3Rlcl80MAppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMzQ6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgaXNkaXNjb3VudGV4cGlyZWRjYXN0ZXJfMzkKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDM1Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGdldGRpc2NvdW50Y2FzdGVyXzM4CmludGNfMSAvLyAxCnJldHVybgptYWluX2wzNjoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiB1cGRhdGVzbWFpZGNhc3Rlcl8zNwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMzc6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgdXBkYXRlbWFuYWdlcmNhc3Rlcl8zNgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMzg6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgZ2V0dmVyc2lvbmNhc3Rlcl8zNQppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMzk6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKPT0KJiYKYXNzZXJ0CmNhbGxzdWIgY3JlYXRlY2FzdGVyXzM0CmludGNfMSAvLyAxCnJldHVybgptYWluX2w0MDoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzEgLy8gT3B0SW4KPT0KYm56IG1haW5fbDQ2CnR4biBPbkNvbXBsZXRpb24KaW50Y18zIC8vIENsb3NlT3V0Cj09CmJueiBtYWluX2w0NQp0eG4gT25Db21wbGV0aW9uCnB1c2hpbnQgNCAvLyBVcGRhdGVBcHBsaWNhdGlvbgo9PQpibnogbWFpbl9sNDQKZXJyCm1haW5fbDQ0Ogp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQphc3NlcnQKY2FsbHN1YiB1cGRhdGVfMTMKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDQ1Ogp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQphc3NlcnQKY2FsbHN1YiBjbG9zZW91dF8xNQppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sNDY6CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CmFzc2VydApjYWxsc3ViIG9wdGluXzE0CmludGNfMSAvLyAxCnJldHVybgoKLy8gaW50X3RvX2FzY2lpCmludHRvYXNjaWlfMDoKcHJvdG8gMSAxCnB1c2hieXRlcyAweDMwMzEzMjMzMzQzNTM2MzczODM5IC8vICIwMTIzNDU2Nzg5IgpmcmFtZV9kaWcgLTEKaW50Y18xIC8vIDEKZXh0cmFjdDMKcmV0c3ViCgovLyBpdG9hCml0b2FfMToKcHJvdG8gMSAxCmZyYW1lX2RpZyAtMQppbnRjXzAgLy8gMAo9PQpibnogaXRvYV8xX2w1CmZyYW1lX2RpZyAtMQpwdXNoaW50IDEwIC8vIDEwCi8KaW50Y18wIC8vIDAKPgpibnogaXRvYV8xX2w0CmJ5dGVjXzAgLy8gIiIKaXRvYV8xX2wzOgpmcmFtZV9kaWcgLTEKcHVzaGludCAxMCAvLyAxMAolCmNhbGxzdWIgaW50dG9hc2NpaV8wCmNvbmNhdApiIGl0b2FfMV9sNgppdG9hXzFfbDQ6CmZyYW1lX2RpZyAtMQpwdXNoaW50IDEwIC8vIDEwCi8KY2FsbHN1YiBpdG9hXzEKYiBpdG9hXzFfbDMKaXRvYV8xX2w1OgpwdXNoYnl0ZXMgMHgzMCAvLyAiMCIKaXRvYV8xX2w2OgpyZXRzdWIKCi8vIGlubmVyX3VzZF9pbl9taWNyb2FsZ28KaW5uZXJ1c2Rpbm1pY3JvYWxnb18yOgpwcm90byAyIDEKZnJhbWVfZGlnIC0yCnB1c2hieXRlcyAweDc1NzA2NDYxNzQ2NTY0NWY2MTc0IC8vICJ1cGRhdGVkX2F0IgphcHBfZ2xvYmFsX2dldF9leApzdG9yZSAyNQpzdG9yZSAyNApmcmFtZV9kaWcgLTIKcHVzaGJ5dGVzIDB4NjQ2NTYzNjk2ZDYxNmM3MyAvLyAiZGVjaW1hbHMiCmFwcF9nbG9iYWxfZ2V0X2V4CnN0b3JlIDI3CnN0b3JlIDI2CmZyYW1lX2RpZyAtMgpieXRlYyA2IC8vICJwcmljZSIKYXBwX2dsb2JhbF9nZXRfZXgKc3RvcmUgMjkKc3RvcmUgMjgKbG9hZCAyNApzdG9yZSAyMApsb2FkIDI2CnN0b3JlIDIxCmxvYWQgMjgKc3RvcmUgMjIKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcApsb2FkIDIwCi0KcHVzaGludCA4NjQwMCAvLyA4NjQwMAo+CmJueiBpbm5lcnVzZGlubWljcm9hbGdvXzJfbDMKaW5uZXJ1c2Rpbm1pY3JvYWxnb18yX2wxOgpmcmFtZV9kaWcgLTEKaW50YyA1IC8vIDEwMDAwCioKcHVzaGludCAxMCAvLyAxMApsb2FkIDIxCmV4cAoqCmxvYWQgMjIKLwppbnRjIDUgLy8gMTAwMDAKLwppbnRjIDUgLy8gMTAwMDAKKgpzdG9yZSAyMwpsb2FkIDIzCmludGMgNCAvLyAxMDAwMDAKPApieiBpbm5lcnVzZGlubWljcm9hbGdvXzJfbDQKaW50YyA0IC8vIDEwMDAwMApyZXRzdWIKaW5uZXJ1c2Rpbm1pY3JvYWxnb18yX2wzOgppbnRjXzMgLy8gMgpzdG9yZSAyMQpwdXNoaW50IDMwIC8vIDMwCnN0b3JlIDIyCmIgaW5uZXJ1c2Rpbm1pY3JvYWxnb18yX2wxCmlubmVydXNkaW5taWNyb2FsZ29fMl9sNDoKbG9hZCAyMwpyZXRzdWIKCi8vIGlubmVyX2NyZWF0ZV9uZnQKaW5uZXJjcmVhdGVuZnRfMzoKcHJvdG8gMyAxCml0eG5fYmVnaW4KaW50Y18yIC8vIGFjZmcKaXR4bl9maWVsZCBUeXBlRW51bQppbnRjXzEgLy8gMQppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCmludGNfMSAvLyAxCml0eG5fZmllbGQgQ29uZmlnQXNzZXREZWZhdWx0RnJvemVuCmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKZnJhbWVfZGlnIC0zCml0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCmdsb2JhbCBaZXJvQWRkcmVzcwppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RnJlZXplCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRDbGF3YmFjawppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdAppdHhuIENyZWF0ZWRBc3NldElECnJldHN1YgoKLy8gaW5uZXJfdHJhbnNmZXJfbmZ0CmlubmVydHJhbnNmZXJuZnRfNDoKcHJvdG8gMyAwCml0eG5fYmVnaW4KcHVzaGludCA0IC8vIGF4ZmVyCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC0zCml0eG5fZmllbGQgWGZlckFzc2V0CmludGNfMSAvLyAxCml0eG5fZmllbGQgQXNzZXRBbW91bnQKZnJhbWVfZGlnIC0yCml0eG5fZmllbGQgQXNzZXRTZW5kZXIKZnJhbWVfZGlnIC0xCml0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIGlubmVyX2RlbGV0ZV9uZnQKaW5uZXJkZWxldGVuZnRfNToKcHJvdG8gMSAwCml0eG5fYmVnaW4KaW50Y18yIC8vIGFjZmcKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTEKaXR4bl9maWVsZCBDb25maWdBc3NldAppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIGlubmVyX2RlbGV0ZV9zdWJzY3JpcHRpb24KaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fNjoKcHJvdG8gMiAwCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTEKYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCnN0b3JlIDU2CnN0b3JlIDU1CmxvYWQgNTYKbG9hZCA1NQppbnRjXzAgLy8gMAo+CiYmCmJueiBpbm5lcmRlbGV0ZXN1YnNjcmlwdGlvbl82X2wzCmlubmVyZGVsZXRlc3Vic2NyaXB0aW9uXzZfbDE6CmZyYW1lX2RpZyAtMQpjYWxsc3ViIGlubmVyZGVsZXRlbmZ0XzUKYnl0ZWNfMiAvLyAidG90YWxfc3VicyIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKIT0KYnogaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fNl9sNApieXRlY18yIC8vICJ0b3RhbF9zdWJzIgpieXRlY18yIC8vICJ0b3RhbF9zdWJzIgphcHBfZ2xvYmFsX2dldAppbnRjXzEgLy8gMQotCmFwcF9nbG9iYWxfcHV0CmIgaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fNl9sNAppbm5lcmRlbGV0ZXN1YnNjcmlwdGlvbl82X2wzOgpmcmFtZV9kaWcgLTEKZnJhbWVfZGlnIC0yCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmNhbGxzdWIgaW5uZXJ0cmFuc2Zlcm5mdF80CmIgaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fNl9sMQppbm5lcmRlbGV0ZXN1YnNjcmlwdGlvbl82X2w0OgpmcmFtZV9kaWcgLTIKYm94X2RlbApwb3AKcmV0c3ViCgovLyBpbm5lcl9jb21wdXRlX2V4cGlyYXRpb24KaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83Ogpwcm90byAyIDEKZnJhbWVfZGlnIC0yCmludGNfMCAvLyAwCj09CmJueiBpbm5lcmNvbXB1dGVleHBpcmF0aW9uXzdfbDEwCmZyYW1lX2RpZyAtMQppbnRjXzEgLy8gMQo9PQpibnogaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2w5CmZyYW1lX2RpZyAtMQppbnRjXzMgLy8gMgo9PQpibnogaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2w4CmZyYW1lX2RpZyAtMQppbnRjXzIgLy8gMwo9PQpibnogaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2w3CmZyYW1lX2RpZyAtMQpwdXNoaW50IDQgLy8gNAo9PQpibnogaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2w2CmVycgppbm5lcmNvbXB1dGVleHBpcmF0aW9uXzdfbDY6Cmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKcHVzaGludCAzMTUzNjAwMCAvLyAzMTUzNjAwMAorCmIgaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2wxMQppbm5lcmNvbXB1dGVleHBpcmF0aW9uXzdfbDc6Cmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKcHVzaGludCAxNTU1MjAwMCAvLyAxNTU1MjAwMAorCmIgaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2wxMQppbm5lcmNvbXB1dGVleHBpcmF0aW9uXzdfbDg6Cmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKcHVzaGludCA3Nzc2MDAwIC8vIDc3NzYwMDAKKwpiIGlubmVyY29tcHV0ZWV4cGlyYXRpb25fN19sMTEKaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2w5OgpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCnB1c2hpbnQgMjU5MjAwMCAvLyAyNTkyMDAwCisKYiBpbm5lcmNvbXB1dGVleHBpcmF0aW9uXzdfbDExCmlubmVyY29tcHV0ZWV4cGlyYXRpb25fN19sMTA6CmludGNfMCAvLyAwCmlubmVyY29tcHV0ZWV4cGlyYXRpb25fN19sMTE6CnJldHN1YgoKLy8gaW5jcmVtZW50X2Rpc2NvdW50X3RvdGFsX2NsYWltcwppbmNyZW1lbnRkaXNjb3VudHRvdGFsY2xhaW1zXzg6CnByb3RvIDEgMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCmR1cG4gNQpieXRlY18wIC8vICIiCmludGNfMCAvLyAwCmR1cApieXRlY18wIC8vICIiCmR1cApmcmFtZV9kaWcgLTEKaXRvYgpib3hfbGVuCnN0b3JlIDE3CnN0b3JlIDE2CmxvYWQgMTcKYnogaW5jcmVtZW50ZGlzY291bnR0b3RhbGNsYWltc184X2wyCmZyYW1lX2RpZyAtMQppdG9iCmJveF9nZXQKc3RvcmUgMTkKc3RvcmUgMTgKbG9hZCAxOQphc3NlcnQKbG9hZCAxOApmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKcHVzaGludCA4IC8vIDgKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAxCmluY3JlbWVudGRpc2NvdW50dG90YWxjbGFpbXNfOF9sMjoKZnJhbWVfZGlnIDAKcHVzaGludCAxNiAvLyAxNgpleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIDAKcHVzaGludCAyNCAvLyAyNApleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDMKZnJhbWVfZGlnIDAKcHVzaGludCAzMiAvLyAzMgpleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDQKZnJhbWVfZGlnIDAKcHVzaGludCA0MCAvLyA0MApleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDUKZnJhbWVfZGlnIDUKaW50Y18xIC8vIDEKKwpmcmFtZV9idXJ5IDYKZnJhbWVfZGlnIC0xCml0b2IKZnJhbWVfZGlnIDEKaXRvYgpjb25jYXQKZnJhbWVfZGlnIDIKaXRvYgpjb25jYXQKZnJhbWVfZGlnIDMKaXRvYgpjb25jYXQKZnJhbWVfZGlnIDQKaXRvYgpjb25jYXQKZnJhbWVfZGlnIDYKaXRvYgpjb25jYXQKZnJhbWVfYnVyeSA3CmZyYW1lX2RpZyAtMQppdG9iCmJveF9kZWwKcG9wCmZyYW1lX2RpZyAtMQppdG9iCmZyYW1lX2RpZyA3CmJveF9wdXQKcmV0c3ViCgovLyBpbm5lcl9jb21wdXRlX2Rpc2NvdW50X3ByaWNlCmlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOToKcHJvdG8gMiAxCmJ5dGVjXzAgLy8gIiIKaW50Y18wIC8vIDAKZHVwbiAyCmZyYW1lX2RpZyAtMgppdG9iCmJveF9sZW4Kc3RvcmUgMTMKc3RvcmUgMTIKbG9hZCAxMwpibnogaW5uZXJjb21wdXRlZGlzY291bnRwcmljZV85X2wyCmZyYW1lX2RpZyAtMQpiIGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOV9sOQppbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDI6CmZyYW1lX2RpZyAtMgppdG9iCmJveF9nZXQKc3RvcmUgMTUKc3RvcmUgMTQKbG9hZCAxNQphc3NlcnQKbG9hZCAxNApmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKcHVzaGludCA4IC8vIDgKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAwCnB1c2hpbnQgMTYgLy8gMTYKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAwCnB1c2hpbnQgMjQgLy8gMjQKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAzCmZyYW1lX2RpZyAzCmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKPApmcmFtZV9kaWcgMwppbnRjXzAgLy8gMAo+CiYmCmJueiBpbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDgKZnJhbWVfZGlnIDEKaW50Y18wIC8vIDAKPT0KYm56IGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOV9sNwpmcmFtZV9kaWcgMQppbnRjXzEgLy8gMQo9PQpibnogaW5uZXJjb21wdXRlZGlzY291bnRwcmljZV85X2w2CmZyYW1lX2RpZyAtMQpiIGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOV9sOQppbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDY6CmZyYW1lX2RpZyAtMgpjYWxsc3ViIGluY3JlbWVudGRpc2NvdW50dG90YWxjbGFpbXNfOApmcmFtZV9kaWcgLTEKZnJhbWVfZGlnIDIKLQpiIGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOV9sOQppbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDc6CmZyYW1lX2RpZyAtMgpjYWxsc3ViIGluY3JlbWVudGRpc2NvdW50dG90YWxjbGFpbXNfOApmcmFtZV9kaWcgLTEKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAyCioKcHVzaGludCAxMDAgLy8gMTAwCi8KLQpiIGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOV9sOQppbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDg6CmZyYW1lX2RpZyAtMQppbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDk6CmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIGlubmVyX2NvbXB1dGVfcHJpY2UKaW5uZXJjb21wdXRlcHJpY2VfMTA6CnByb3RvIDEgMQppbnRjXzAgLy8gMApieXRlYyA2IC8vICJwcmljZSIKYXBwX2dsb2JhbF9nZXQKZnJhbWVfZGlnIC0xCmludGNfMCAvLyAwCj09CmJueiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sMTAKZnJhbWVfZGlnIC0xCmludGNfMSAvLyAxCj09CmJueiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sOQpmcmFtZV9kaWcgLTEKaW50Y18zIC8vIDIKPT0KYm56IGlubmVyY29tcHV0ZXByaWNlXzEwX2w4CmZyYW1lX2RpZyAtMQppbnRjXzIgLy8gMwo9PQpibnogaW5uZXJjb21wdXRlcHJpY2VfMTBfbDcKZnJhbWVfZGlnIC0xCnB1c2hpbnQgNCAvLyA0Cj09CmJueiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sNgplcnIKaW5uZXJjb21wdXRlcHJpY2VfMTBfbDY6CnB1c2hpbnQgMTIgLy8gMTIKYiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sMTEKaW5uZXJjb21wdXRlcHJpY2VfMTBfbDc6CnB1c2hpbnQgNiAvLyA2CmIgaW5uZXJjb21wdXRlcHJpY2VfMTBfbDExCmlubmVyY29tcHV0ZXByaWNlXzEwX2w4OgppbnRjXzIgLy8gMwpiIGlubmVyY29tcHV0ZXByaWNlXzEwX2wxMQppbm5lcmNvbXB1dGVwcmljZV8xMF9sOToKaW50Y18xIC8vIDEKYiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sMTEKaW5uZXJjb21wdXRlcHJpY2VfMTBfbDEwOgppbnRjXzEgLy8gMQppbm5lcmNvbXB1dGVwcmljZV8xMF9sMTE6CioKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgMApjYWxsc3ViIGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOQpmcmFtZV9idXJ5IDAKcmV0c3ViCgovLyBpbm5lcl92ZXJpZnlfZXhwaXJhdGlvbl90eXBlCmlubmVydmVyaWZ5ZXhwaXJhdGlvbnR5cGVfMTE6CnByb3RvIDEgMApieXRlYyA3IC8vICJzdWJfdHlwZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPT0KZnJhbWVfZGlnIC0xCmludGNfMSAvLyAxCj09Cnx8CmZyYW1lX2RpZyAtMQppbnRjXzMgLy8gMgo9PQp8fApmcmFtZV9kaWcgLTEKaW50Y18yIC8vIDMKPT0KfHwKZnJhbWVfZGlnIC0xCnB1c2hpbnQgNCAvLyA0Cj09Cnx8Ci8vIEV4cGlyYXRpb24gdHlwZSBpcyBpbnZhbGlkCmFzc2VydApyZXRzdWIKCi8vIGNyZWF0ZQpjcmVhdGVfMTI6CnByb3RvIDkgMApieXRlYyAxMiAvLyAiY29pbl9pZCIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTMgLy8gImNyZWF0ZWRfYXQiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDkgLy8gImltYWdlX3VybCIKcHVzaGJ5dGVzIDB4Njk3MDY2NzMzYTJmMmY2MjYxNjY3OTYyNjU2OTYzNjQ2NDdhMzc2YjYyNzU3ODYxNmE2YTM2NjI2ZjYyMzU2MjZhNzE3NDc3NjU3MTM2Nzc2MzY4NmI2NDZiNjk3MTM0NzY3NjY4Nzc3Mjc3NzI2ZTY1Mzc2OTdhMzQ2NjMyMzU3ODY5IC8vICJpcGZzOi8vYmFmeWJlaWNkZHo3a2J1eGFqajZib2I1YmpxdHdlcTZ3Y2hrZGtpcTR2dmh3cndybmU3aXo0ZjI1eGkiCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDUgLy8gImxpZmVjeWNsZSIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMSAvLyAibWFuYWdlciIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDggLy8gIm1heF9zdWJzIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyAxMCAvLyAibmFtZSIKcHVzaGJ5dGVzIDB4NjQ2NTY2NjE3NTZjNzQgLy8gImRlZmF1bHQiCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDYgLy8gInByaWNlIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyA0IC8vICJzbWFfaWQiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDcgLy8gInN1Yl90eXBlIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlY18yIC8vICJ0b3RhbF9zdWJzIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyAxMSAvLyAidW5pdF9uYW1lIgpwdXNoYnl0ZXMgMHg1MzU0NTAgLy8gIlNUUCIKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTAgLy8gIm5hbWUiCmZyYW1lX2RpZyAtOQpleHRyYWN0IDIgMAphcHBfZ2xvYmFsX3B1dApieXRlY18xIC8vICJtYW5hZ2VyIgpmcmFtZV9kaWcgLTgKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNyAvLyAic3ViX3R5cGUiCmZyYW1lX2RpZyAtNwphcHBfZ2xvYmFsX3B1dApieXRlYyA2IC8vICJwcmljZSIKZnJhbWVfZGlnIC02CmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDggLy8gIm1heF9zdWJzIgpmcmFtZV9kaWcgLTUKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTIgLy8gImNvaW5faWQiCmZyYW1lX2RpZyAtNAphcHBfZ2xvYmFsX3B1dApieXRlYyA0IC8vICJzbWFfaWQiCmZyYW1lX2RpZyAtMwphcHBfZ2xvYmFsX3B1dApieXRlYyAxMSAvLyAidW5pdF9uYW1lIgpmcmFtZV9kaWcgLTIKZXh0cmFjdCAyIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgOSAvLyAiaW1hZ2VfdXJsIgpmcmFtZV9kaWcgLTEKZXh0cmFjdCAyIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTMgLy8gImNyZWF0ZWRfYXQiCmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKYXBwX2dsb2JhbF9wdXQKcmV0c3ViCgovLyB1cGRhdGUKdXBkYXRlXzEzOgpwcm90byAwIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KYXNzZXJ0CnJldHN1YgoKLy8gb3B0aW4Kb3B0aW5fMTQ6CnByb3RvIDAgMApnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRApieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldF9leApzdG9yZSAwCmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0Cj09Ci8vIE9ubHkgc2FtZSBtYW5hZ2VyIGNhbiBvcHQtaW4KYXNzZXJ0CnJldHN1YgoKLy8gY2xvc2VvdXQKY2xvc2VvdXRfMTU6CnByb3RvIDAgMApnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRApieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldF9leApzdG9yZSAxCmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0Cj09Ci8vIE9ubHkgc2FtZSBtYW5hZ2VyIGNhbiBvcHQtb3V0CmFzc2VydApyZXRzdWIKCi8vIGdldF92ZXJzaW9uCmdldHZlcnNpb25fMTY6CnByb3RvIDAgMQpieXRlY18wIC8vICIiCmR1cApwdXNoYnl0ZXMgMHgzMTJlMzAgLy8gIjEuMCIKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmxlbgppdG9iCmV4dHJhY3QgNiAwCmZyYW1lX2RpZyAxCmNvbmNhdApmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKZXh0cmFjdCAyIDAKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmxlbgppdG9iCmV4dHJhY3QgNiAwCmZyYW1lX2RpZyAwCmNvbmNhdApmcmFtZV9idXJ5IDAKcmV0c3ViCgovLyB1cGRhdGVfbWFuYWdlcgp1cGRhdGVtYW5hZ2VyXzE3Ogpwcm90byAxIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydApieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTEKIT0KLy8gTmV3IG1hbmFnZXIgY2Fubm90IGJlIHRoZSBzYW1lIGFzIHRoZSBvbGQgbWFuYWdlcgphc3NlcnQKYnl0ZWNfMSAvLyAibWFuYWdlciIKZnJhbWVfZGlnIC0xCmFwcF9nbG9iYWxfcHV0CnJldHN1YgoKLy8gdXBkYXRlX3NtYV9pZAp1cGRhdGVzbWFpZF8xODoKcHJvdG8gMSAwCnR4biBTZW5kZXIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCj09Ci8vIHVuYXV0aG9yaXplZAphc3NlcnQKYnl0ZWMgNCAvLyAic21hX2lkIgpmcmFtZV9kaWcgLTEKYXBwX2dsb2JhbF9wdXQKcmV0c3ViCgovLyBnZXRfZGlzY291bnQKZ2V0ZGlzY291bnRfMTk6CnByb3RvIDEgMQpieXRlY18wIC8vICIiCmZyYW1lX2RpZyAtMQppdG9iCmJveF9nZXQKc3RvcmUgMwpzdG9yZSAyCmxvYWQgMwphc3NlcnQKbG9hZCAyCmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIGlzX2Rpc2NvdW50X2V4cGlyZWQKaXNkaXNjb3VudGV4cGlyZWRfMjA6CnByb3RvIDEgMQppbnRjXzAgLy8gMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCmZyYW1lX2RpZyAtMQppdG9iCmJveF9sZW4Kc3RvcmUgNQpzdG9yZSA0CmxvYWQgNQpibnogaXNkaXNjb3VudGV4cGlyZWRfMjBfbDIKaW50Y18xIC8vIDEKZnJhbWVfYnVyeSAwCmIgaXNkaXNjb3VudGV4cGlyZWRfMjBfbDcKaXNkaXNjb3VudGV4cGlyZWRfMjBfbDI6CmZyYW1lX2RpZyAtMQppdG9iCmJveF9nZXQKc3RvcmUgNwpzdG9yZSA2CmxvYWQgNwphc3NlcnQKbG9hZCA2CmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpwdXNoaW50IDI0IC8vIDI0CmV4dHJhY3RfdWludDY0CmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgMgppbnRjXzAgLy8gMAo9PQpibnogaXNkaXNjb3VudGV4cGlyZWRfMjBfbDYKZnJhbWVfZGlnIDIKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAo+CmJueiBpc2Rpc2NvdW50ZXhwaXJlZF8yMF9sNQppbnRjXzEgLy8gMQpmcmFtZV9idXJ5IDAKYiBpc2Rpc2NvdW50ZXhwaXJlZF8yMF9sNwppc2Rpc2NvdW50ZXhwaXJlZF8yMF9sNToKaW50Y18wIC8vIDAKZnJhbWVfYnVyeSAwCmIgaXNkaXNjb3VudGV4cGlyZWRfMjBfbDcKaXNkaXNjb3VudGV4cGlyZWRfMjBfbDY6CmludGNfMCAvLyAwCmZyYW1lX2J1cnkgMAppc2Rpc2NvdW50ZXhwaXJlZF8yMF9sNzoKcmV0c3ViCgovLyBjcmVhdGVfZGlzY291bnQKY3JlYXRlZGlzY291bnRfMjE6CnByb3RvIDUgMAppbnRjXzAgLy8gMApkdXBuIDIKYnl0ZWNfMCAvLyAiIgppbnRjXzAgLy8gMApkdXAKYnl0ZWNfMCAvLyAiIgpkdXAKdHhuIFNlbmRlcgpieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldAo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmZyYW1lX2RpZyAtMQpndHhucyBTZW5kZXIKYnl0ZWNfMSAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKPT0KLy8gRmVlIHR4biBzZW50IGJ5IHRoZSBtYW5hZ2VyIG11c3QgYmUgb2YgdGhlIHJpZ2h0IGFtb3VudAphc3NlcnQKZnJhbWVfZGlnIC0xCmd0eG5zIEFtb3VudAppbnRjIDYgLy8gMjQ5MDAKPT0KLy8gRmVlIHR4biBzZW50IGJ5IHRoZSBtYW5hZ2VyIG11c3QgYmUgb2YgdGhlIHJpZ2h0IGFtb3VudAphc3NlcnQKZnJhbWVfZGlnIC00CmludGNfMCAvLyAwCj09CmZyYW1lX2RpZyAtNAppbnRjXzEgLy8gMQo9PQp8fAovLyBEaXNjb3VudCB0eXBlIG11c3QgYmUgZWl0aGVyIHBlcmNlbnRhZ2Ugb3IgYW1vdW50CmFzc2VydApmcmFtZV9kaWcgLTUKaXRvYgpib3hfbGVuCnN0b3JlIDkKc3RvcmUgOApsb2FkIDkKaW50Y18xIC8vIDEKIT0KLy8gRGlzY291bnQgYWxyZWFkeSBleGlzdHMsIGRlbGV0ZSBvbmUgZmlyc3QKYXNzZXJ0Cmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAtMgppbnRjXzAgLy8gMAo+CmJueiBjcmVhdGVkaXNjb3VudF8yMV9sMgppbnRjXzAgLy8gMApiIGNyZWF0ZWRpc2NvdW50XzIxX2wzCmNyZWF0ZWRpc2NvdW50XzIxX2wyOgpmcmFtZV9kaWcgMApmcmFtZV9kaWcgLTIKKwpjcmVhdGVkaXNjb3VudF8yMV9sMzoKZnJhbWVfYnVyeSAxCmludGNfMCAvLyAwCmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgLTUKaXRvYgpmcmFtZV9kaWcgLTQKaXRvYgpjb25jYXQKZnJhbWVfZGlnIC0zCml0b2IKY29uY2F0CmZyYW1lX2RpZyAxCml0b2IKY29uY2F0CmZyYW1lX2RpZyAwCml0b2IKY29uY2F0CmZyYW1lX2RpZyAyCml0b2IKY29uY2F0CmZyYW1lX2J1cnkgMwpmcmFtZV9kaWcgLTUKaXRvYgpib3hfZGVsCnBvcApmcmFtZV9kaWcgLTUKaXRvYgpmcmFtZV9kaWcgMwpib3hfcHV0CnJldHN1YgoKLy8gZGVsZXRlX2Rpc2NvdW50CmRlbGV0ZWRpc2NvdW50XzIyOgpwcm90byAxIDAKdHhuIFNlbmRlcgpieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldAo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmZyYW1lX2RpZyAtMQppdG9iCmJveF9sZW4Kc3RvcmUgMTEKc3RvcmUgMTAKbG9hZCAxMQppbnRjXzEgLy8gMQo9PQovLyBEaXNjb3VudCBkb2VzIG5vdCBleGlzdAphc3NlcnQKaXR4bl9iZWdpbgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwppdHhuX2ZpZWxkIFNlbmRlcgppbnRjXzEgLy8gcGF5Cml0eG5fZmllbGQgVHlwZUVudW0KdHhuIFNlbmRlcgppdHhuX2ZpZWxkIFJlY2VpdmVyCmludGMgNiAvLyAyNDkwMAppdHhuX2ZpZWxkIEFtb3VudAppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdApmcmFtZV9kaWcgLTEKaXRvYgpib3hfZGVsCnBvcApyZXRzdWIKCi8vIGNvbXB1dGVfcHJpY2UKY29tcHV0ZXByaWNlXzIzOgpwcm90byAyIDEKaW50Y18wIC8vIDAKZnJhbWVfZGlnIC0xCmludGNfMSAvLyAxCj09CmJueiBjb21wdXRlcHJpY2VfMjNfbDIKYnl0ZWMgNiAvLyAicHJpY2UiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2J1cnkgMApiIGNvbXB1dGVwcmljZV8yM19sMwpjb21wdXRlcHJpY2VfMjNfbDI6CmZyYW1lX2RpZyAtMgpjYWxsc3ViIGlubmVyY29tcHV0ZXByaWNlXzEwCmZyYW1lX2J1cnkgMApjb21wdXRlcHJpY2VfMjNfbDM6CnJldHN1YgoKLy8gY29tcHV0ZV9wbGF0Zm9ybV9mZWUKY29tcHV0ZXBsYXRmb3JtZmVlXzI0Ogpwcm90byAyIDEKaW50Y18wIC8vIDAKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyA0IC8vICJzbWFfaWQiCmFwcF9nbG9iYWxfZ2V0Cj09CmFzc2VydApieXRlYyA0IC8vICJzbWFfaWQiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2RpZyAtMgpjYWxsc3ViIGlubmVydXNkaW5taWNyb2FsZ29fMgpmcmFtZV9idXJ5IDAKcmV0c3ViCgovLyBjcmVhdGVfc3Vic2NyaXB0aW9uCmNyZWF0ZXN1YnNjcmlwdGlvbl8yNToKcHJvdG8gNyAxCmludGNfMCAvLyAwCmR1cG4gNQpieXRlY18wIC8vICIiCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIiIKaW50Y18wIC8vIDAKZHVwCmJ5dGVjXzAgLy8gIiIKZHVwCmJ5dGVjIDUgLy8gImxpZmVjeWNsZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPT0KLy8gU3Vic2NyaXB0aW9uIGluZnJhc3RydWN0dXJlIGlzIGRpc2FibGVkCmFzc2VydApmcmFtZV9kaWcgLTYKY2FsbHN1YiBpbm5lcnZlcmlmeWV4cGlyYXRpb250eXBlXzExCmJ5dGVjIDcgLy8gInN1Yl90eXBlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTYKY2FsbHN1YiBpbm5lcmNvbXB1dGVleHBpcmF0aW9uXzcKZnJhbWVfYnVyeSAxCmJ5dGVjIDcgLy8gInN1Yl90eXBlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9idXJ5IDIKaW50Y18wIC8vIDAKZnJhbWVfYnVyeSAzCmludGNfMCAvLyAwCmZyYW1lX2J1cnkgNApmcmFtZV9kaWcgLTYKY2FsbHN1YiBpbm5lcmNvbXB1dGVwcmljZV8xMApmcmFtZV9idXJ5IDUKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlYyA0IC8vICJzbWFfaWQiCmFwcF9nbG9iYWxfZ2V0Cj09Ci8vIFNNQSBJRCBtdXN0IG1hdGNoCmFzc2VydApmcmFtZV9kaWcgLTUKZ3R4bnMgU2VuZGVyCmZyYW1lX2RpZyAtNApndHhucyBTZW5kZXIKPT0KLy8gU3Vic2NyaWJlciBhY2NvdW50IG11c3QgbWF0Y2ggZmVlIGFuZCBwYXkgdHhuIHNlbmRlcgphc3NlcnQKYnl0ZWMgNCAvLyAic21hX2lkIgphcHBfZ2xvYmFsX2dldApwdXNoYnl0ZXMgMHg2MTY0NmQ2OTZlIC8vICJhZG1pbiIKYXBwX2dsb2JhbF9nZXRfZXgKc3RvcmUgMzEKc3RvcmUgMzAKZnJhbWVfZGlnIC00Cmd0eG5zIEFtb3VudApieXRlYyA0IC8vICJzbWFfaWQiCmFwcF9nbG9iYWxfZ2V0CnB1c2hpbnQgMTAgLy8gMTAKY2FsbHN1YiBpbm5lcnVzZGlubWljcm9hbGdvXzIKPT0KLy8gUGxhdGZvcm0gZmVlIHBhcmFtcyBtaXNtYXRjaAphc3NlcnQKZnJhbWVfZGlnIC00Cmd0eG5zIFJlY2VpdmVyCmxvYWQgMzAKPT0KLy8gUGxhdGZvcm0gZmVlIHBhcmFtcyBtaXNtYXRjaAphc3NlcnQKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldF9leApzdG9yZSAzMgpieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldAo9PQovLyBMb2NrZXIgZG9lcyBub3QgYmVsb25nIHRvIG1hbmFnZXIgb2YgdGhpcyBTTUkKYXNzZXJ0CmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwpzdG9yZSAzNApzdG9yZSAzMwpmcmFtZV9kaWcgLTMKZ3R4bnMgVHlwZUVudW0KaW50Y18xIC8vIHBheQo9PQpmcmFtZV9kaWcgLTMKZ3R4bnMgQW1vdW50CmZyYW1lX2RpZyA1Cj09CiYmCmZyYW1lX2RpZyAtMwpndHhucyBSZWNlaXZlcgpsb2FkIDMzCj09CiYmCmZyYW1lX2RpZyAtMwpndHhucyBUeXBlRW51bQpwdXNoaW50IDQgLy8gYXhmZXIKPT0KZnJhbWVfZGlnIC0zCmd0eG5zIEFzc2V0QW1vdW50CmZyYW1lX2RpZyA1Cj09CiYmCmZyYW1lX2RpZyAtMwpndHhucyBBc3NldFJlY2VpdmVyCmxvYWQgMzMKPT0KJiYKfHwKLy8gU3Vic2NyaXB0aW9uIHBheW1lbnQgbXVzdCBiZSBzZW5kIHRvIGxvY2tlciB3aXRoIHJpZ2h0IHBheQphc3NlcnQKYnl0ZWMgOCAvLyAibWF4X3N1YnMiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj4KYm56IGNyZWF0ZXN1YnNjcmlwdGlvbl8yNV9sNgpjcmVhdGVzdWJzY3JpcHRpb25fMjVfbDE6CmZyYW1lX2RpZyAtNwpib3hfbGVuCnN0b3JlIDM2CnN0b3JlIDM1CmxvYWQgMzYKYm56IGNyZWF0ZXN1YnNjcmlwdGlvbl8yNV9sMwpmcmFtZV9kaWcgLTUKZ3R4bnMgQW1vdW50CmludGMgNyAvLyAzMTMwMAppbnRjIDQgLy8gMTAwMDAwCisKPT0KLy8gRmVlIHR4biBtdXN0IGJlIG9mIHRoZSByaWdodCBhbW91bnQKYXNzZXJ0CmJ5dGVjXzIgLy8gInRvdGFsX3N1YnMiCmJ5dGVjXzIgLy8gInRvdGFsX3N1YnMiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCisKYXBwX2dsb2JhbF9wdXQKcHVzaGJ5dGVzIDB4MjMgLy8gIiMiCmJ5dGVjXzIgLy8gInRvdGFsX3N1YnMiCmFwcF9nbG9iYWxfZ2V0CmNhbGxzdWIgaXRvYV8xCmNvbmNhdApwdXNoYnl0ZXMgMHgyMDJkMjAgLy8gIiAtICIKY29uY2F0CmJ5dGVjIDEwIC8vICJuYW1lIgphcHBfZ2xvYmFsX2dldApjb25jYXQKYnl0ZWMgMTEgLy8gInVuaXRfbmFtZSIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgOSAvLyAiaW1hZ2VfdXJsIgphcHBfZ2xvYmFsX2dldApjYWxsc3ViIGlubmVyY3JlYXRlbmZ0XzMKZnJhbWVfYnVyeSAzCmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKZnJhbWVfYnVyeSA0CmIgY3JlYXRlc3Vic2NyaXB0aW9uXzI1X2w3CmNyZWF0ZXN1YnNjcmlwdGlvbl8yNV9sMzoKZnJhbWVfZGlnIC01Cmd0eG5zIEFtb3VudAppbnRjXzAgLy8gMAo9PQovLyBGZWUgdHhuIG11c3QgYmUgb2YgdGhlIHJpZ2h0IGFtb3VudAphc3NlcnQKZnJhbWVfZGlnIC03CmJveF9nZXQKc3RvcmUgMzgKc3RvcmUgMzcKbG9hZCAzOAphc3NlcnQKbG9hZCAzNwpmcmFtZV9idXJ5IDYKZnJhbWVfZGlnIDYKcHVzaGludCAyNCAvLyAyNApleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDcKZnJhbWVfZGlnIDcKaW50Y18wIC8vIDAKIT0KYm56IGNyZWF0ZXN1YnNjcmlwdGlvbl8yNV9sNQppbnRjXzAgLy8gMApyZXR1cm4KY3JlYXRlc3Vic2NyaXB0aW9uXzI1X2w1OgpmcmFtZV9kaWcgNwpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCjwKLy8gU3Vic2NyaXB0aW9uIHN0aWxsIGFjdGl2ZQphc3NlcnQKZnJhbWVfZGlnIDYKcHVzaGludCA4IC8vIDgKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAzCmZyYW1lX2RpZyA2CnB1c2hpbnQgMTYgLy8gMTYKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSA0CmIgY3JlYXRlc3Vic2NyaXB0aW9uXzI1X2w3CmNyZWF0ZXN1YnNjcmlwdGlvbl8yNV9sNjoKYnl0ZWNfMiAvLyAidG90YWxfc3VicyIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDEKKwpieXRlYyA4IC8vICJtYXhfc3VicyIKYXBwX2dsb2JhbF9nZXQKPD0KLy8gTWF4IGl0ZW1zIHJlYWNoZWQKYXNzZXJ0CmIgY3JlYXRlc3Vic2NyaXB0aW9uXzI1X2wxCmNyZWF0ZXN1YnNjcmlwdGlvbl8yNV9sNzoKZnJhbWVfZGlnIDIKaXRvYgpmcmFtZV9kaWcgMwppdG9iCmNvbmNhdApmcmFtZV9kaWcgNAppdG9iCmNvbmNhdApmcmFtZV9kaWcgMQppdG9iCmNvbmNhdApmcmFtZV9kaWcgLTYKaXRvYgpjb25jYXQKZnJhbWVfYnVyeSA4CmZyYW1lX2RpZyAtNwpib3hfZGVsCnBvcApmcmFtZV9kaWcgLTcKZnJhbWVfZGlnIDgKYm94X3B1dApmcmFtZV9kaWcgMwpmcmFtZV9idXJ5IDAKcmV0c3ViCgovLyBnZXRfc3Vic2NyaXB0aW9uCmdldHN1YnNjcmlwdGlvbl8yNjoKcHJvdG8gMSAxCmJ5dGVjXzAgLy8gIiIKZnJhbWVfZGlnIC0xCmJveF9nZXQKc3RvcmUgNDAKc3RvcmUgMzkKbG9hZCA0MAphc3NlcnQKbG9hZCAzOQpmcmFtZV9idXJ5IDAKcmV0c3ViCgovLyBpc19zdWJzY3JpYmVyCmlzc3Vic2NyaWJlcl8yNzoKcHJvdG8gMSAxCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIiIKaW50Y18wIC8vIDAKZHVwCmZyYW1lX2RpZyAtMQpib3hfbGVuCnN0b3JlIDQyCnN0b3JlIDQxCmxvYWQgNDIKYm56IGlzc3Vic2NyaWJlcl8yN19sMgppbnRjXzAgLy8gMApmcmFtZV9idXJ5IDAKYiBpc3N1YnNjcmliZXJfMjdfbDYKaXNzdWJzY3JpYmVyXzI3X2wyOgpmcmFtZV9kaWcgLTEKYm94X2dldApzdG9yZSA0NApzdG9yZSA0Mwpsb2FkIDQ0CmFzc2VydApsb2FkIDQzCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpwdXNoaW50IDI0IC8vIDI0CmV4dHJhY3RfdWludDY0CmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgMQppbnRjXzAgLy8gMApleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDMKZnJhbWVfZGlnIDMKaW50Y18wIC8vIDAKPT0KYm56IGlzc3Vic2NyaWJlcl8yN19sNQpmcmFtZV9kaWcgMwppbnRjXzEgLy8gMQo9PQpieiBpc3N1YnNjcmliZXJfMjdfbDYKZnJhbWVfZGlnIDIKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAo+CmZyYW1lX2J1cnkgMApiIGlzc3Vic2NyaWJlcl8yN19sNgppc3N1YnNjcmliZXJfMjdfbDU6CmludGNfMSAvLyAxCmZyYW1lX2J1cnkgMAppc3N1YnNjcmliZXJfMjdfbDY6CnJldHN1YgoKLy8gY2xhaW1fc3Vic2NyaXB0aW9uCmNsYWltc3Vic2NyaXB0aW9uXzI4Ogpwcm90byAxIDAKaW50Y18wIC8vIDAKZnJhbWVfZGlnIC0xCnR4bmFzIEFzc2V0cwpmcmFtZV9idXJ5IDAKdHhuIFNlbmRlcgpmcmFtZV9kaWcgMAphc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKc3RvcmUgNDYKc3RvcmUgNDUKbG9hZCA0NgovLyBTdWJzY3JpYmVyIG5vdCBvcHRlZC1pbiBmb3IgU3Vic2NyaXB0aW9uIE5GVAphc3NlcnQKZnJhbWVfZGlnIDAKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKdHhuIFNlbmRlcgpjYWxsc3ViIGlubmVydHJhbnNmZXJuZnRfNApyZXRzdWIKCi8vIHRyYW5zZmVyX3N1YnNjcmlwdGlvbgp0cmFuc2ZlcnN1YnNjcmlwdGlvbl8yOToKcHJvdG8gMiAwCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIiIKdHhuIFNlbmRlcgpib3hfbGVuCnN0b3JlIDQ4CnN0b3JlIDQ3CmxvYWQgNDgKLy8gQ3VycmVudCBhZGRyZXNzIG5vdCBzdWJzY3JpYmVkCmFzc2VydApmcmFtZV9kaWcgLTEKdHhuYXMgQXNzZXRzCmZyYW1lX2J1cnkgMAp0eG4gU2VuZGVyCmZyYW1lX2RpZyAwCmFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQpzdG9yZSA1MApzdG9yZSA0OQpsb2FkIDUwCmxvYWQgNDkKaW50Y18wIC8vIDAKPgomJgpieiB0cmFuc2ZlcnN1YnNjcmlwdGlvbl8yOV9sMgpmcmFtZV9kaWcgMAp0eG4gU2VuZGVyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmNhbGxzdWIgaW5uZXJ0cmFuc2Zlcm5mdF80CnRyYW5zZmVyc3Vic2NyaXB0aW9uXzI5X2wyOgp0eG4gU2VuZGVyCmJveF9nZXQKc3RvcmUgNTIKc3RvcmUgNTEKbG9hZCA1Mgphc3NlcnQKbG9hZCA1MQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIC0yCmJveF9kZWwKcG9wCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgMQpib3hfcHV0CnR4biBTZW5kZXIKYm94X2RlbApwb3AKcmV0c3ViCgovLyBkZWxldGVfc3Vic2NyaXB0aW9uCmRlbGV0ZXN1YnNjcmlwdGlvbl8zMDoKcHJvdG8gMSAxCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIiIKaW50Y18wIC8vIDAKdHhuIFNlbmRlcgpib3hfbGVuCnN0b3JlIDU0CnN0b3JlIDUzCmxvYWQgNTQKLy8gTm90IHN1YnNjcmliZWQKYXNzZXJ0CnR4biBTZW5kZXIKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmxlbgpwdXNoaW50IDMyIC8vIDMyCj09CmFzc2VydApmcmFtZV9kaWcgLTEKdHhuYXMgQXNzZXRzCmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgMQpmcmFtZV9kaWcgMgpjYWxsc3ViIGlubmVyZGVsZXRlc3Vic2NyaXB0aW9uXzYKaXR4bl9iZWdpbgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwppdHhuX2ZpZWxkIFNlbmRlcgppbnRjXzEgLy8gcGF5Cml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIDEKaXR4bl9maWVsZCBSZWNlaXZlcgppbnRjIDcgLy8gMzEzMDAKaW50YyA0IC8vIDEwMDAwMAorCml0eG5fZmllbGQgQW1vdW50CmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CmZyYW1lX2RpZyAtMQp0eG5hcyBBc3NldHMKZnJhbWVfYnVyeSAwCnJldHN1YgoKLy8gZW5hYmxlCmVuYWJsZV8zMToKcHJvdG8gMCAwCnR4biBTZW5kZXIKYnl0ZWNfMSAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydApieXRlYyA1IC8vICJsaWZlY3ljbGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09Ci8vIFN1YnNjcmlwdGlvbiBpbmZyYXN0cnVjdHVyZSBpcyBhbHJlYWR5IGVuYWJsZWQKYXNzZXJ0CmJ5dGVjIDUgLy8gImxpZmVjeWNsZSIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKcmV0c3ViCgovLyBkaXNhYmxlCmRpc2FibGVfMzI6CnByb3RvIDAgMAp0eG4gU2VuZGVyCmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0Cj09Ci8vIHVuYXV0aG9yaXplZAphc3NlcnQKYnl0ZWMgNSAvLyAibGlmZWN5Y2xlIgphcHBfZ2xvYmFsX2dldAppbnRjXzAgLy8gMAo9PQovLyBTdWJzY3JpcHRpb24gaW5mcmFzdHJ1Y3R1cmUgaXMgYWxyZWFkeSBkaXNhYmxlZAphc3NlcnQKYnl0ZWMgNSAvLyAibGlmZWN5Y2xlIgppbnRjXzEgLy8gMQphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIGRlbGV0ZQpkZWxldGVfMzM6CnByb3RvIDAgMAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmJ5dGVjIDUgLy8gImxpZmVjeWNsZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDEKPT0KLy8gQXBwIHN0aWxsIGhhcyBhY3RpdmUgc3Vic2NyaWJlcnMgb3IgYWN0aXZlIGxpZmVjeWNsZSBzdGF0ZQphc3NlcnQKYnl0ZWNfMiAvLyAidG90YWxfc3VicyIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPT0KLy8gQXBwIHN0aWxsIGhhcyBhY3RpdmUgc3Vic2NyaWJlcnMgb3IgYWN0aXZlIGxpZmVjeWNsZSBzdGF0ZQphc3NlcnQKcmV0c3ViCgovLyBjcmVhdGVfY2FzdGVyCmNyZWF0ZWNhc3Rlcl8zNDoKcHJvdG8gMCAwCmJ5dGVjXzAgLy8gIiIKZHVwCmludGNfMCAvLyAwCmR1cG4gNApieXRlY18wIC8vICIiCmR1cAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmJ0b2kKZnJhbWVfYnVyeSAyCnR4bmEgQXBwbGljYXRpb25BcmdzIDQKYnRvaQpmcmFtZV9idXJ5IDMKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQpidG9pCmZyYW1lX2J1cnkgNAp0eG5hIEFwcGxpY2F0aW9uQXJncyA2CmJ0b2kKZnJhbWVfYnVyeSA1CnR4bmEgQXBwbGljYXRpb25BcmdzIDcKYnRvaQpmcmFtZV9idXJ5IDYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOApmcmFtZV9idXJ5IDcKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOQpmcmFtZV9idXJ5IDgKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIDEKZnJhbWVfZGlnIDIKZnJhbWVfZGlnIDMKZnJhbWVfZGlnIDQKZnJhbWVfZGlnIDUKZnJhbWVfZGlnIDYKZnJhbWVfZGlnIDcKZnJhbWVfZGlnIDgKY2FsbHN1YiBjcmVhdGVfMTIKcmV0c3ViCgovLyBnZXRfdmVyc2lvbl9jYXN0ZXIKZ2V0dmVyc2lvbmNhc3Rlcl8zNToKcHJvdG8gMCAwCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBnZXR2ZXJzaW9uXzE2CmZyYW1lX2J1cnkgMApieXRlY18zIC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKY29uY2F0CmxvZwpyZXRzdWIKCi8vIHVwZGF0ZV9tYW5hZ2VyX2Nhc3Rlcgp1cGRhdGVtYW5hZ2VyY2FzdGVyXzM2Ogpwcm90byAwIDAKYnl0ZWNfMCAvLyAiIgp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMApjYWxsc3ViIHVwZGF0ZW1hbmFnZXJfMTcKcmV0c3ViCgovLyB1cGRhdGVfc21hX2lkX2Nhc3Rlcgp1cGRhdGVzbWFpZGNhc3Rlcl8zNzoKcHJvdG8gMCAwCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKY2FsbHN1YiB1cGRhdGVzbWFpZF8xOApyZXRzdWIKCi8vIGdldF9kaXNjb3VudF9jYXN0ZXIKZ2V0ZGlzY291bnRjYXN0ZXJfMzg6CnByb3RvIDAgMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKY2FsbHN1YiBnZXRkaXNjb3VudF8xOQpmcmFtZV9idXJ5IDAKYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCmNvbmNhdApsb2cKcmV0c3ViCgovLyBpc19kaXNjb3VudF9leHBpcmVkX2Nhc3Rlcgppc2Rpc2NvdW50ZXhwaXJlZGNhc3Rlcl8zOToKcHJvdG8gMCAwCmludGNfMCAvLyAwCmR1cAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmJ0b2kKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmNhbGxzdWIgaXNkaXNjb3VudGV4cGlyZWRfMjAKZnJhbWVfYnVyeSAwCmJ5dGVjXzMgLy8gMHgxNTFmN2M3NQpmcmFtZV9kaWcgMAppdG9iCmNvbmNhdApsb2cKcmV0c3ViCgovLyBjcmVhdGVfZGlzY291bnRfY2FzdGVyCmNyZWF0ZWRpc2NvdW50Y2FzdGVyXzQwOgpwcm90byAwIDAKaW50Y18wIC8vIDAKZHVwbiA0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmJ0b2kKZnJhbWVfYnVyeSAyCnR4bmEgQXBwbGljYXRpb25BcmdzIDQKYnRvaQpmcmFtZV9idXJ5IDMKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpmcmFtZV9idXJ5IDQKZnJhbWVfZGlnIDQKZ3R4bnMgVHlwZUVudW0KaW50Y18xIC8vIHBheQo9PQphc3NlcnQKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIDEKZnJhbWVfZGlnIDIKZnJhbWVfZGlnIDMKZnJhbWVfZGlnIDQKY2FsbHN1YiBjcmVhdGVkaXNjb3VudF8yMQpyZXRzdWIKCi8vIGRlbGV0ZV9kaXNjb3VudF9jYXN0ZXIKZGVsZXRlZGlzY291bnRjYXN0ZXJfNDE6CnByb3RvIDAgMAppbnRjXzAgLy8gMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmJ0b2kKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmNhbGxzdWIgZGVsZXRlZGlzY291bnRfMjIKcmV0c3ViCgovLyBjb21wdXRlX3ByaWNlX2Nhc3Rlcgpjb21wdXRlcHJpY2VjYXN0ZXJfNDI6CnByb3RvIDAgMAppbnRjXzAgLy8gMApkdXBuIDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpidG9pCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmludGNfMCAvLyAwCnB1c2hpbnQgOCAvLyA4CioKZ2V0Yml0CmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgMQpmcmFtZV9kaWcgMgpjYWxsc3ViIGNvbXB1dGVwcmljZV8yMwpmcmFtZV9idXJ5IDAKYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCml0b2IKY29uY2F0CmxvZwpyZXRzdWIKCi8vIGNvbXB1dGVfcGxhdGZvcm1fZmVlX2Nhc3Rlcgpjb21wdXRlcGxhdGZvcm1mZWVjYXN0ZXJfNDM6CnByb3RvIDAgMAppbnRjXzAgLy8gMApkdXBuIDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpidG9pCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmludGNfMCAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmNhbGxzdWIgY29tcHV0ZXBsYXRmb3JtZmVlXzI0CmZyYW1lX2J1cnkgMApieXRlY18zIC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKaXRvYgpjb25jYXQKbG9nCnJldHN1YgoKLy8gY3JlYXRlX3N1YnNjcmlwdGlvbl9jYXN0ZXIKY3JlYXRlc3Vic2NyaXB0aW9uY2FzdGVyXzQ0Ogpwcm90byAwIDAKaW50Y18wIC8vIDAKYnl0ZWNfMCAvLyAiIgppbnRjXzAgLy8gMApkdXBuIDUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpmcmFtZV9idXJ5IDEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmZyYW1lX2J1cnkgMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmludGNfMCAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSA2CnR4bmEgQXBwbGljYXRpb25BcmdzIDQKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDcKdHhuIEdyb3VwSW5kZXgKaW50Y18yIC8vIDMKLQpmcmFtZV9idXJ5IDMKZnJhbWVfZGlnIDMKZ3R4bnMgVHlwZUVudW0KaW50Y18xIC8vIHBheQo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18zIC8vIDIKLQpmcmFtZV9idXJ5IDQKZnJhbWVfZGlnIDQKZ3R4bnMgVHlwZUVudW0KaW50Y18xIC8vIHBheQo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpmcmFtZV9idXJ5IDUKZnJhbWVfZGlnIDEKZnJhbWVfZGlnIDIKZnJhbWVfZGlnIDMKZnJhbWVfZGlnIDQKZnJhbWVfZGlnIDUKZnJhbWVfZGlnIDYKZnJhbWVfZGlnIDcKY2FsbHN1YiBjcmVhdGVzdWJzY3JpcHRpb25fMjUKZnJhbWVfYnVyeSAwCmJ5dGVjXzMgLy8gMHgxNTFmN2M3NQpmcmFtZV9kaWcgMAppdG9iCmNvbmNhdApsb2cKcmV0c3ViCgovLyBnZXRfc3Vic2NyaXB0aW9uX2Nhc3RlcgpnZXRzdWJzY3JpcHRpb25jYXN0ZXJfNDU6CnByb3RvIDAgMApieXRlY18wIC8vICIiCmR1cAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpjYWxsc3ViIGdldHN1YnNjcmlwdGlvbl8yNgpmcmFtZV9idXJ5IDAKYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCmNvbmNhdApsb2cKcmV0c3ViCgovLyBpc19zdWJzY3JpYmVyX2Nhc3Rlcgppc3N1YnNjcmliZXJjYXN0ZXJfNDY6CnByb3RvIDAgMAppbnRjXzAgLy8gMApieXRlY18wIC8vICIiCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmNhbGxzdWIgaXNzdWJzY3JpYmVyXzI3CmZyYW1lX2J1cnkgMApieXRlY18zIC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKaXRvYgpjb25jYXQKbG9nCnJldHN1YgoKLy8gY2xhaW1fc3Vic2NyaXB0aW9uX2Nhc3RlcgpjbGFpbXN1YnNjcmlwdGlvbmNhc3Rlcl80NzoKcHJvdG8gMCAwCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKY2FsbHN1YiBjbGFpbXN1YnNjcmlwdGlvbl8yOApyZXRzdWIKCi8vIHRyYW5zZmVyX3N1YnNjcmlwdGlvbl9jYXN0ZXIKdHJhbnNmZXJzdWJzY3JpcHRpb25jYXN0ZXJfNDg6CnByb3RvIDAgMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIDEKY2FsbHN1YiB0cmFuc2ZlcnN1YnNjcmlwdGlvbl8yOQpyZXRzdWIKCi8vIGRlbGV0ZV9zdWJzY3JpcHRpb25fY2FzdGVyCmRlbGV0ZXN1YnNjcmlwdGlvbmNhc3Rlcl80OToKcHJvdG8gMCAwCmludGNfMCAvLyAwCmR1cAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmludGNfMCAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmNhbGxzdWIgZGVsZXRlc3Vic2NyaXB0aW9uXzMwCmZyYW1lX2J1cnkgMApieXRlY18zIC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKaXRvYgpjb25jYXQKbG9nCnJldHN1YgoKLy8gZW5hYmxlX2Nhc3RlcgplbmFibGVjYXN0ZXJfNTA6CnByb3RvIDAgMApjYWxsc3ViIGVuYWJsZV8zMQpyZXRzdWIKCi8vIGRpc2FibGVfY2FzdGVyCmRpc2FibGVjYXN0ZXJfNTE6CnByb3RvIDAgMApjYWxsc3ViIGRpc2FibGVfMzIKcmV0c3ViCgovLyBkZWxldGVfY2FzdGVyCmRlbGV0ZWNhc3Rlcl81MjoKcHJvdG8gMCAwCmNhbGxzdWIgZGVsZXRlXzMzCnJldHN1Yg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu" - }, - "state": { - "global": { - "num_byte_slices": 4, - "num_uints": 8 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": { - "coin_id": { - "type": "uint64", - "key": "coin_id", - "descr": "ASA ID of the subscription, default is ALGO" - }, - "created_at": { - "type": "uint64", - "key": "created_at", - "descr": "Timestamp of the subscription service creation" - }, - "image_url": { - "type": "bytes", - "key": "image_url", - "descr": "Image URL of the subscription NFT" - }, - "lifecycle": { - "type": "uint64", - "key": "lifecycle", - "descr": "Lifecycle state of the subscription service" - }, - "manager": { - "type": "bytes", - "key": "manager", - "descr": "Address of the manager of the subscription" - }, - "max_subs": { - "type": "uint64", - "key": "max_subs", - "descr": "Max subscriptions to be sold" - }, - "name": { - "type": "bytes", - "key": "name", - "descr": "Name of the service providing subscription" - }, - "price": { - "type": "uint64", - "key": "price", - "descr": "Price of the subscription" - }, - "sma_id": { - "type": "uint64", - "key": "sma_id", - "descr": "ID of Subtopia Admin Oracle contract" - }, - "sub_type": { - "type": "uint64", - "key": "sub_type", - "descr": "Type of the subscription" - }, - "total_subs": { - "type": "uint64", - "key": "total_subs", - "descr": "Total subscriptions sold" - }, - "unit_name": { - "type": "bytes", - "key": "unit_name", - "descr": "Unit name of the subscription NFT" - } - }, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "SMI", - "methods": [ - { - "name": "create", - "args": [ - { - "type": "string", - "name": "name", - "desc": "The name of the subscription service." - }, - { - "type": "address", - "name": "manager", - "desc": "The address of the manager of the subscription service." - }, - { - "type": "uint64", - "name": "sub_type", - "desc": "The type of the subscription service." - }, - { - "type": "uint64", - "name": "price", - "desc": "The price of the subscription service." - }, - { - "type": "uint64", - "name": "max_subs", - "desc": "The maximum number of subscriptions to be sold." - }, - { - "type": "uint64", - "name": "coin_id", - "desc": "The ASA ID of the subscription service." - }, - { - "type": "uint64", - "name": "sma_id", - "desc": "The ID of the Subtopia Price Oracle contract." - }, - { - "type": "string", - "name": "unit_name" - }, - { - "type": "string", - "name": "image_url" - } - ], - "returns": { - "type": "void" - }, - "desc": "Creates a new instance of the subscription service with the provided parameters." - }, - { - "name": "get_version", - "args": [], - "returns": { - "type": "string" - } - }, - { - "name": "update_manager", - "args": [ - { - "type": "address", - "name": "new_manager_account", - "desc": "The new manager account address." - } - ], - "returns": { - "type": "void" - }, - "desc": "Updates the manager account of the subscription service." - }, - { - "name": "update_sma_id", - "args": [ - { - "type": "uint64", - "name": "new_sma_id", - "desc": "The new ID of the Subtopia Price Oracle contract." - } - ], - "returns": { - "type": "void" - }, - "desc": "Updates the ID of the Subtopia Price Oracle contract." - }, - { - "name": "get_discount", - "args": [ - { - "type": "uint64", - "name": "expiration_type", - "desc": "The expiration type of the discount." - } - ], - "returns": { - "type": "(uint64,uint64,uint64,uint64,uint64,uint64)", - "desc": "An expression that returns the discount." - }, - "desc": "Returns the discount for the specified expiration type." - }, - { - "name": "is_discount_expired", - "args": [ - { - "type": "uint64", - "name": "expiration_type", - "desc": "The expiration type of the discount." - } - ], - "returns": { - "type": "uint64", - "desc": "An expression that checks if the discount is expired." - }, - "desc": "Checks if the discount for the specified expiration type is expired." - }, - { - "name": "create_discount", - "args": [ - { - "type": "uint64", - "name": "expiration_type" - }, - { - "type": "uint64", - "name": "discount_type" - }, - { - "type": "uint64", - "name": "discount_value" - }, - { - "type": "uint64", - "name": "expires_in" - }, - { - "type": "pay", - "name": "fee_txn" - } - ], - "returns": { - "type": "void" - }, - "desc": "Creates a new discount for the subscription service." - }, - { - "name": "delete_discount", - "args": [ - { - "type": "uint64", - "name": "expiration_type" - } - ], - "returns": { - "type": "void" - }, - "desc": "Deletes a discount for the subscription service." - }, - { - "name": "compute_price", - "args": [ - { - "type": "uint64", - "name": "expiration_type", - "desc": "The expiration type of the subscription." - }, - { - "type": "bool", - "name": "with_discount" - } - ], - "returns": { - "type": "uint64", - "desc": "An expression that computes the price of the subscription." - }, - "desc": "Computes the price of the subscription for the given expiration type." - }, - { - "name": "compute_platform_fee", - "args": [ - { - "type": "uint64", - "name": "whole_usd" - }, - { - "type": "application", - "name": "sma_id" - } - ], - "returns": { - "type": "uint64" - } - }, - { - "name": "create_subscription", - "args": [ - { - "type": "address", - "name": "subscriber", - "desc": "The subscriber address." - }, - { - "type": "uint64", - "name": "expiration_type", - "desc": "The expiration type of the subscription." - }, - { - "type": "pay", - "name": "fee_txn", - "desc": "The fee transaction." - }, - { - "type": "pay", - "name": "platform_fee_txn" - }, - { - "type": "txn", - "name": "pay_txn", - "desc": "The payment transaction." - }, - { - "type": "application", - "name": "locker", - "desc": "The locker application." - }, - { - "type": "application", - "name": "sma_id" - } - ], - "returns": { - "type": "uint64", - "desc": "An expression that subscribes the user and creates a new subscription." - }, - "desc": "Subscribes a user to the subscription service and creates a new\nsubscription." - }, - { - "name": "get_subscription", - "args": [ - { - "type": "address", - "name": "subscriber", - "desc": "The subscriber address." - } - ], - "returns": { - "type": "(uint64,uint64,uint64,uint64,uint64)", - "desc": "An expression that retrieves the subscription details." - }, - "desc": "Retrieves the subscription details of a given subscriber." - }, - { - "name": "is_subscriber", - "args": [ - { - "type": "address", - "name": "subscriber", - "desc": "The subscriber address." - } - ], - "returns": { - "type": "uint64", - "desc": "An expression that checks if the address is a subscriber." - }, - "desc": "Checks if a given address is a subscriber of the subscription service." - }, - { - "name": "claim_subscription", - "args": [ - { - "type": "asset", - "name": "subscription" - } - ], - "returns": { - "type": "void" - }, - "desc": "Allows a subscriber to claim their subscription." - }, - { - "name": "transfer_subscription", - "args": [ - { - "type": "address", - "name": "new_address", - "desc": "The new address to transfer the subscription to." - }, - { - "type": "asset", - "name": "subscription" - } - ], - "returns": { - "type": "void" - }, - "desc": "Transfers a subscription from the sender's address to a new address." - }, - { - "name": "delete_subscription", - "args": [ - { - "type": "asset", - "name": "sub_id", - "desc": "The subscription ASA ID." - } - ], - "returns": { - "type": "uint64", - "desc": "An expression that unsubscribes the user and deletes the subscription." - }, - "desc": "Unsubscribes a user from the subscription service and deletes the\nsubscription." - }, - { - "name": "enable", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "disable", - "args": [], - "returns": { - "type": "void" - } - }, - { - "name": "delete", - "args": [], - "returns": { - "type": "void" - }, - "desc": "Deletes the subscription service. Can only be called by the manager account\nwhen there are no active subscriptions or the lifecycle state is not active." - } - ], - "networks": {} - }, - "bare_call_config": { - "close_out": "CALL", - "opt_in": "CALL", - "update_application": "CALL" - } -} - -/** - * Defines an onCompletionAction of 'no_op' - */ -export type OnCompleteNoOp = { onCompleteAction?: 'no_op' | OnApplicationComplete.NoOpOC } -/** - * Defines an onCompletionAction of 'opt_in' - */ -export type OnCompleteOptIn = { onCompleteAction: 'opt_in' | OnApplicationComplete.OptInOC } -/** - * Defines an onCompletionAction of 'close_out' - */ -export type OnCompleteCloseOut = { onCompleteAction: 'close_out' | OnApplicationComplete.CloseOutOC } -/** - * Defines an onCompletionAction of 'delete_application' - */ -export type OnCompleteDelApp = { onCompleteAction: 'delete_application' | OnApplicationComplete.DeleteApplicationOC } -/** - * Defines an onCompletionAction of 'update_application' - */ -export type OnCompleteUpdApp = { onCompleteAction: 'update_application' | OnApplicationComplete.UpdateApplicationOC } -/** - * A state record containing a single unsigned integer - */ -export type IntegerState = { - /** - * Gets the state value as a BigInt - */ - asBigInt(): bigint - /** - * Gets the state value as a number. - */ - asNumber(): number -} -/** - * A state record containing binary data - */ -export type BinaryState = { - /** - * Gets the state value as a Uint8Array - */ - asByteArray(): Uint8Array - /** - * Gets the state value as a string - */ - asString(): string -} - -/** - * Defines the types of available calls and state of the Smi smart contract. - */ -export type Smi = { - /** - * Maps method signatures / names to their argument and return types. - */ - methods: - & Record<'create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void' | 'create', { - argsObj: { - /** - * The name of the subscription service. - */ - name: string - /** - * The address of the manager of the subscription service. - */ - manager: string - /** - * The type of the subscription service. - */ - sub_type: bigint | number - /** - * The price of the subscription service. - */ - price: bigint | number - /** - * The maximum number of subscriptions to be sold. - */ - max_subs: bigint | number - /** - * The ASA ID of the subscription service. - */ - coin_id: bigint | number - /** - * The ID of the Subtopia Price Oracle contract. - */ - sma_id: bigint | number - unit_name: string - image_url: string - } - argsTuple: [name: string, manager: string, sub_type: bigint | number, price: bigint | number, max_subs: bigint | number, coin_id: bigint | number, sma_id: bigint | number, unit_name: string, image_url: string] - returns: void - }> - & Record<'get_version()string' | 'get_version', { - argsObj: { - } - argsTuple: [] - returns: string - }> - & Record<'update_manager(address)void' | 'update_manager', { - argsObj: { - /** - * The new manager account address. - */ - new_manager_account: string - } - argsTuple: [new_manager_account: string] - returns: void - }> - & Record<'update_sma_id(uint64)void' | 'update_sma_id', { - argsObj: { - /** - * The new ID of the Subtopia Price Oracle contract. - */ - new_sma_id: bigint | number - } - argsTuple: [new_sma_id: bigint | number] - returns: void - }> - & Record<'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)' | 'get_discount', { - argsObj: { - /** - * The expiration type of the discount. - */ - expiration_type: bigint | number - } - argsTuple: [expiration_type: bigint | number] - /** - * An expression that returns the discount. - */ - returns: Discount - }> - & Record<'is_discount_expired(uint64)uint64' | 'is_discount_expired', { - argsObj: { - /** - * The expiration type of the discount. - */ - expiration_type: bigint | number - } - argsTuple: [expiration_type: bigint | number] - /** - * An expression that checks if the discount is expired. - */ - returns: bigint - }> - & Record<'create_discount(uint64,uint64,uint64,uint64,pay)void' | 'create_discount', { - argsObj: { - expiration_type: bigint | number - discount_type: bigint | number - discount_value: bigint | number - expires_in: bigint | number - fee_txn: TransactionToSign | Transaction | Promise - } - argsTuple: [expiration_type: bigint | number, discount_type: bigint | number, discount_value: bigint | number, expires_in: bigint | number, fee_txn: TransactionToSign | Transaction | Promise] - returns: void - }> - & Record<'delete_discount(uint64)void' | 'delete_discount', { - argsObj: { - expiration_type: bigint | number - } - argsTuple: [expiration_type: bigint | number] - returns: void - }> - & Record<'compute_price(uint64,bool)uint64' | 'compute_price', { - argsObj: { - /** - * The expiration type of the subscription. - */ - expiration_type: bigint | number - with_discount: boolean - } - argsTuple: [expiration_type: bigint | number, with_discount: boolean] - /** - * An expression that computes the price of the subscription. - */ - returns: bigint - }> - & Record<'compute_platform_fee(uint64,application)uint64' | 'compute_platform_fee', { - argsObj: { - whole_usd: bigint | number - sma_id: number | bigint - } - argsTuple: [whole_usd: bigint | number, sma_id: number | bigint] - returns: bigint - }> - & Record<'create_subscription(address,uint64,pay,pay,txn,application,application)uint64' | 'create_subscription', { - argsObj: { - /** - * The subscriber address. - */ - subscriber: string - /** - * The expiration type of the subscription. - */ - expiration_type: bigint | number - /** - * The fee transaction. - */ - fee_txn: TransactionToSign | Transaction | Promise - platform_fee_txn: TransactionToSign | Transaction | Promise - /** - * The payment transaction. - */ - pay_txn: TransactionToSign | Transaction | Promise - /** - * The locker application. - */ - locker: number | bigint - sma_id: number | bigint - } - argsTuple: [subscriber: string, expiration_type: bigint | number, fee_txn: TransactionToSign | Transaction | Promise, platform_fee_txn: TransactionToSign | Transaction | Promise, pay_txn: TransactionToSign | Transaction | Promise, locker: number | bigint, sma_id: number | bigint] - /** - * An expression that subscribes the user and creates a new subscription. - */ - returns: bigint - }> - & Record<'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)' | 'get_subscription', { - argsObj: { - /** - * The subscriber address. - */ - subscriber: string - } - argsTuple: [subscriber: string] - /** - * An expression that retrieves the subscription details. - */ - returns: Subscription - }> - & Record<'is_subscriber(address)uint64' | 'is_subscriber', { - argsObj: { - /** - * The subscriber address. - */ - subscriber: string - } - argsTuple: [subscriber: string] - /** - * An expression that checks if the address is a subscriber. - */ - returns: bigint - }> - & Record<'claim_subscription(asset)void' | 'claim_subscription', { - argsObj: { - subscription: number | bigint - } - argsTuple: [subscription: number | bigint] - returns: void - }> - & Record<'transfer_subscription(address,asset)void' | 'transfer_subscription', { - argsObj: { - /** - * The new address to transfer the subscription to. - */ - new_address: string - subscription: number | bigint - } - argsTuple: [new_address: string, subscription: number | bigint] - returns: void - }> - & Record<'delete_subscription(asset)uint64' | 'delete_subscription', { - argsObj: { - /** - * The subscription ASA ID. - */ - sub_id: number | bigint - } - argsTuple: [sub_id: number | bigint] - /** - * An expression that unsubscribes the user and deletes the subscription. - */ - returns: bigint - }> - & Record<'enable()void' | 'enable', { - argsObj: { - } - argsTuple: [] - returns: void - }> - & Record<'disable()void' | 'disable', { - argsObj: { - } - argsTuple: [] - returns: void - }> - & Record<'delete()void' | 'delete', { - argsObj: { - } - argsTuple: [] - returns: void - }> - /** - * Defines the shape of the global and local state of the application. - */ - state: { - global: { - /** - * ASA ID of the subscription, default is ALGO - */ - 'coin_id'?: IntegerState - /** - * Timestamp of the subscription service creation - */ - 'created_at'?: IntegerState - /** - * Image URL of the subscription NFT - */ - 'image_url'?: BinaryState - /** - * Lifecycle state of the subscription service - */ - 'lifecycle'?: IntegerState - /** - * Address of the manager of the subscription - */ - 'manager'?: BinaryState - /** - * Max subscriptions to be sold - */ - 'max_subs'?: IntegerState - /** - * Name of the service providing subscription - */ - 'name'?: BinaryState - /** - * Price of the subscription - */ - 'price'?: IntegerState - /** - * ID of Subtopia Admin Oracle contract - */ - 'sma_id'?: IntegerState - /** - * Type of the subscription - */ - 'sub_type'?: IntegerState - /** - * Total subscriptions sold - */ - 'total_subs'?: IntegerState - /** - * Unit name of the subscription NFT - */ - 'unit_name'?: BinaryState - } - } -} -/** - * Defines the possible abi call signatures - */ -export type SmiSig = keyof Smi['methods'] -/** - * Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a bare call is made - */ -export type TypedCallParams = { - method: TSignature - methodArgs: TSignature extends undefined ? undefined : Array -} & AppClientCallCoreParams & CoreAppCallArgs -/** - * Defines the arguments required for a bare call - */ -export type BareCallArgs = Omit -/** - * Represents a Discount result as a struct - */ -export type Discount = { - expiration_type: bigint - discount_type: bigint - discount_value: bigint - expires_at: bigint - created_at: bigint - total_claims: bigint -} -/** - * Converts the tuple representation of a Discount to the struct representation - */ -export function Discount([expiration_type, discount_type, discount_value, expires_at, created_at, total_claims]: [bigint, bigint, bigint, bigint, bigint, bigint] ) { - return { - expiration_type, - discount_type, - discount_value, - expires_at, - created_at, - total_claims, - } -} -/** - * Represents a Subscription result as a struct - */ -export type Subscription = { - sub_type: bigint - sub_id: bigint - created_at: bigint - expires_at: bigint - expiration_type: bigint -} -/** - * Converts the tuple representation of a Subscription to the struct representation - */ -export function Subscription([sub_type, sub_id, created_at, expires_at, expiration_type]: [bigint, bigint, bigint, bigint, bigint] ) { - return { - sub_type, - sub_id, - created_at, - expires_at, - expiration_type, - } -} -/** - * Maps a method signature from the Smi smart contract to the method's arguments in either tuple of struct form - */ -export type MethodArgs = Smi['methods'][TSignature]['argsObj' | 'argsTuple'] -/** - * Maps a method signature from the Smi smart contract to the method's return type - */ -export type MethodReturn = Smi['methods'][TSignature]['returns'] - -/** - * A factory for available 'create' calls - */ -export type SmiCreateCalls = (typeof SmiCallFactory)['create'] -/** - * Defines supported create methods for this smart contract - */ -export type SmiCreateCallParams = - | (TypedCallParams<'create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void'> & (OnCompleteNoOp)) -/** - * A factory for available 'update' calls - */ -export type SmiUpdateCalls = (typeof SmiCallFactory)['update'] -/** - * Defines supported update methods for this smart contract - */ -export type SmiUpdateCallParams = - | TypedCallParams -/** - * A factory for available 'delete' calls - */ -export type SmiDeleteCalls = (typeof SmiCallFactory)['delete'] -/** - * Defines supported delete methods for this smart contract - */ -export type SmiDeleteCallParams = - | TypedCallParams<'delete()void'> -/** - * Defines arguments required for the deploy method. - */ -export type SmiDeployArgs = { - deployTimeParams?: TealTemplateParams - /** - * A delegate which takes a create call factory and returns the create call params for this smart contract - */ - createCall?: (callFactory: SmiCreateCalls) => SmiCreateCallParams - /** - * A delegate which takes a update call factory and returns the update call params for this smart contract - */ - updateCall?: (callFactory: SmiUpdateCalls) => SmiUpdateCallParams - /** - * A delegate which takes a delete call factory and returns the delete call params for this smart contract - */ - deleteCall?: (callFactory: SmiDeleteCalls) => SmiDeleteCallParams -} - - -/** - * Exposes methods for constructing all available smart contract calls - */ -export abstract class SmiCallFactory { - /** - * Gets available create call factories - */ - static get create() { - return { - /** - * Constructs a create call for the SMI smart contract using the create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - create(args: MethodArgs<'create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void'>, params: AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams & (OnCompleteNoOp) = {}) { - return { - method: 'create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void' as const, - methodArgs: Array.isArray(args) ? args : [args.name, args.manager, args.sub_type, args.price, args.max_subs, args.coin_id, args.sma_id, args.unit_name, args.image_url], - ...params, - } - }, - } - } - - /** - * Gets available update call factories - */ - static get update() { - return { - /** - * Constructs an update call for the SMI smart contract using a bare call - * - * @param params Any parameters for the call - * @returns A TypedCallParams object for the call - */ - bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams = {}) { - return { - method: undefined, - methodArgs: undefined, - ...params, - } - }, - } - } - - /** - * Gets available delete call factories - */ - static get delete() { - return { - /** - * Constructs a delete call for the SMI smart contract using the delete()void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - delete(args: MethodArgs<'delete()void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return { - method: 'delete()void' as const, - methodArgs: Array.isArray(args) ? args : [], - ...params, - } - }, - } - } - - /** - * Gets available optIn call factories - */ - static get optIn() { - return { - /** - * Constructs an opt in call for the SMI smart contract using a bare call - * - * @param params Any parameters for the call - * @returns A TypedCallParams object for the call - */ - bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { - return { - method: undefined, - methodArgs: undefined, - ...params, - } - }, - } - } - - /** - * Gets available closeOut call factories - */ - static get closeOut() { - return { - /** - * Constructs a close out call for the SMI smart contract using a bare call - * - * @param params Any parameters for the call - * @returns A TypedCallParams object for the call - */ - bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { - return { - method: undefined, - methodArgs: undefined, - ...params, - } - }, - } - } - - /** - * Constructs a no op call for the get_version()string ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'get_version()string' as const, - methodArgs: Array.isArray(args) ? args : [], - ...params, - } - } - /** - * Constructs a no op call for the update_manager(address)void ABI method - * - * Updates the manager account of the subscription service. - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static updateManager(args: MethodArgs<'update_manager(address)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'update_manager(address)void' as const, - methodArgs: Array.isArray(args) ? args : [args.new_manager_account], - ...params, - } - } - /** - * Constructs a no op call for the update_sma_id(uint64)void ABI method - * - * Updates the ID of the Subtopia Price Oracle contract. - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static updateSmaId(args: MethodArgs<'update_sma_id(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'update_sma_id(uint64)void' as const, - methodArgs: Array.isArray(args) ? args : [args.new_sma_id], - ...params, - } - } - /** - * Constructs a no op call for the get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64) ABI method - * - * Returns the discount for the specified expiration type. - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static getDiscount(args: MethodArgs<'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)' as const, - methodArgs: Array.isArray(args) ? args : [args.expiration_type], - ...params, - } - } - /** - * Constructs a no op call for the is_discount_expired(uint64)uint64 ABI method - * - * Checks if the discount for the specified expiration type is expired. - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static isDiscountExpired(args: MethodArgs<'is_discount_expired(uint64)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'is_discount_expired(uint64)uint64' as const, - methodArgs: Array.isArray(args) ? args : [args.expiration_type], - ...params, - } - } - /** - * Constructs a no op call for the create_discount(uint64,uint64,uint64,uint64,pay)void ABI method - * - * Creates a new discount for the subscription service. - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static createDiscount(args: MethodArgs<'create_discount(uint64,uint64,uint64,uint64,pay)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'create_discount(uint64,uint64,uint64,uint64,pay)void' as const, - methodArgs: Array.isArray(args) ? args : [args.expiration_type, args.discount_type, args.discount_value, args.expires_in, args.fee_txn], - ...params, - } - } - /** - * Constructs a no op call for the delete_discount(uint64)void ABI method - * - * Deletes a discount for the subscription service. - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static deleteDiscount(args: MethodArgs<'delete_discount(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'delete_discount(uint64)void' as const, - methodArgs: Array.isArray(args) ? args : [args.expiration_type], - ...params, - } - } - /** - * Constructs a no op call for the compute_price(uint64,bool)uint64 ABI method - * - * Computes the price of the subscription for the given expiration type. - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static computePrice(args: MethodArgs<'compute_price(uint64,bool)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'compute_price(uint64,bool)uint64' as const, - methodArgs: Array.isArray(args) ? args : [args.expiration_type, args.with_discount], - ...params, - } - } - /** - * Constructs a no op call for the compute_platform_fee(uint64,application)uint64 ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static computePlatformFee(args: MethodArgs<'compute_platform_fee(uint64,application)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'compute_platform_fee(uint64,application)uint64' as const, - methodArgs: Array.isArray(args) ? args : [args.whole_usd, args.sma_id], - ...params, - } - } - /** - * Constructs a no op call for the create_subscription(address,uint64,pay,pay,txn,application,application)uint64 ABI method - * - * Subscribes a user to the subscription service and creates a new -subscription. - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static createSubscription(args: MethodArgs<'create_subscription(address,uint64,pay,pay,txn,application,application)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'create_subscription(address,uint64,pay,pay,txn,application,application)uint64' as const, - methodArgs: Array.isArray(args) ? args : [args.subscriber, args.expiration_type, args.fee_txn, args.platform_fee_txn, args.pay_txn, args.locker, args.sma_id], - ...params, - } - } - /** - * Constructs a no op call for the get_subscription(address)(uint64,uint64,uint64,uint64,uint64) ABI method - * - * Retrieves the subscription details of a given subscriber. - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static getSubscription(args: MethodArgs<'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)' as const, - methodArgs: Array.isArray(args) ? args : [args.subscriber], - ...params, - } - } - /** - * Constructs a no op call for the is_subscriber(address)uint64 ABI method - * - * Checks if a given address is a subscriber of the subscription service. - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static isSubscriber(args: MethodArgs<'is_subscriber(address)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'is_subscriber(address)uint64' as const, - methodArgs: Array.isArray(args) ? args : [args.subscriber], - ...params, - } - } - /** - * Constructs a no op call for the claim_subscription(asset)void ABI method - * - * Allows a subscriber to claim their subscription. - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static claimSubscription(args: MethodArgs<'claim_subscription(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'claim_subscription(asset)void' as const, - methodArgs: Array.isArray(args) ? args : [args.subscription], - ...params, - } - } - /** - * Constructs a no op call for the transfer_subscription(address,asset)void ABI method - * - * Transfers a subscription from the sender's address to a new address. - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static transferSubscription(args: MethodArgs<'transfer_subscription(address,asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'transfer_subscription(address,asset)void' as const, - methodArgs: Array.isArray(args) ? args : [args.new_address, args.subscription], - ...params, - } - } - /** - * Constructs a no op call for the delete_subscription(asset)uint64 ABI method - * - * Unsubscribes a user from the subscription service and deletes the -subscription. - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static deleteSubscription(args: MethodArgs<'delete_subscription(asset)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'delete_subscription(asset)uint64' as const, - methodArgs: Array.isArray(args) ? args : [args.sub_id], - ...params, - } - } - /** - * Constructs a no op call for the enable()void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static enable(args: MethodArgs<'enable()void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'enable()void' as const, - methodArgs: Array.isArray(args) ? args : [], - ...params, - } - } - /** - * Constructs a no op call for the disable()void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static disable(args: MethodArgs<'disable()void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'disable()void' as const, - methodArgs: Array.isArray(args) ? args : [], - ...params, - } - } -} - -/** - * A client to make calls to the SMI smart contract - */ -export class SmiClient { - /** - * The underlying `ApplicationClient` for when you want to have more flexibility - */ - public readonly appClient: ApplicationClient - - private readonly sender: SendTransactionFrom | undefined - - /** - * Creates a new instance of `SmiClient` - * - * @param appDetails appDetails The details to identify the app to deploy - * @param algod An algod client instance - */ - constructor(appDetails: AppDetails, private algod: Algodv2) { - this.sender = appDetails.sender - this.appClient = algokit.getAppClient({ - ...appDetails, - app: APP_SPEC - }, algod) - } - - /** - * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type - * - * @param result The AppCallTransactionResult to be mapped - * @param returnValueFormatter An optional delegate to format the return value if required - * @returns The smart contract response with an updated return value - */ - protected mapReturnValue(result: AppCallTransactionResult, returnValueFormatter?: (value: any) => TReturn): AppCallTransactionResultOfType { - if(result.return?.decodeError) { - throw result.return.decodeError - } - const returnValue = result.return?.returnValue !== undefined && returnValueFormatter !== undefined - ? returnValueFormatter(result.return.returnValue) - : result.return?.returnValue as TReturn | undefined - return { ...result, return: returnValue } - } - - /** - * Calls the ABI method with the matching signature using an onCompletion code of NO_OP - * - * @param typedCallParams An object containing the method signature, args, and any other relevant parameters - * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type - * @returns The result of the smart contract call - */ - public async call(typedCallParams: TypedCallParams, returnValueFormatter?: (value: any) => MethodReturn) { - return this.mapReturnValue>(await this.appClient.call(typedCallParams), returnValueFormatter) - } - - /** - * Idempotently deploys the SMI smart contract. - * - * @param params The arguments for the contract calls and any additional parameters for the call - * @returns The deployment result - */ - public deploy(params: SmiDeployArgs & AppClientDeployCoreParams = {}): ReturnType { - const createArgs = params.createCall?.(SmiCallFactory.create) - const updateArgs = params.updateCall?.(SmiCallFactory.update) - const deleteArgs = params.deleteCall?.(SmiCallFactory.delete) - return this.appClient.deploy({ - ...params, - updateArgs, - deleteArgs, - createArgs, - createOnCompleteAction: createArgs?.onCompleteAction, - }) - } - - /** - * Gets available create methods - */ - public get create() { - const $this = this - return { - /** - * Creates a new instance of the SMI smart contract using the create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void ABI method. - * - * @param args The arguments for the smart contract call - * @param params Any additional parameters for the call - * @returns The create result - */ - async create(args: MethodArgs<'create(string,address,uint64,uint64,uint64,uint64,uint64,string,string)void'>, params: AppClientCallCoreParams & AppClientCompilationParams & (OnCompleteNoOp) = {}): Promise>> { - return $this.mapReturnValue(await $this.appClient.create(SmiCallFactory.create.create(args, params))) - }, - } - } - - /** - * Gets available update methods - */ - public get update() { - const $this = this - return { - /** - * Updates an existing instance of the SMI smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The update result - */ - bare(args: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs = {}): Promise> { - return $this.appClient.update(args) as unknown as Promise> - }, - } - } - - /** - * Gets available delete methods - */ - public get delete() { - const $this = this - return { - /** - * Deletes an existing instance of the SMI smart contract using the delete()void ABI method. - * - * @param args The arguments for the smart contract call - * @param params Any additional parameters for the call - * @returns The delete result - */ - async delete(args: MethodArgs<'delete()void'>, params: AppClientCallCoreParams = {}): Promise>> { - return $this.mapReturnValue(await $this.appClient.delete(SmiCallFactory.delete.delete(args, params))) - }, - } - } - - /** - * Gets available optIn methods - */ - public get optIn() { - const $this = this - return { - /** - * Opts the user into an existing instance of the SMI smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The optIn result - */ - bare(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}): Promise> { - return $this.appClient.optIn(args) as unknown as Promise> - }, - } - } - - /** - * Gets available closeOut methods - */ - public get closeOut() { - const $this = this - return { - /** - * Makes a close out call to an existing instance of the SMI smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The closeOut result - */ - bare(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}): Promise> { - return $this.appClient.closeOut(args) as unknown as Promise> - }, - } - } - - /** - * Makes a clear_state call to an existing instance of the SMI smart contract. - * - * @param args The arguments for the bare call - * @returns The clear_state result - */ - public clearState(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.appClient.clearState(args) - } - - /** - * Calls the get_version()string ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.getVersion(args, params)) - } - - /** - * Calls the update_manager(address)void ABI method. - * - * Updates the manager account of the subscription service. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public updateManager(args: MethodArgs<'update_manager(address)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.updateManager(args, params)) - } - - /** - * Calls the update_sma_id(uint64)void ABI method. - * - * Updates the ID of the Subtopia Price Oracle contract. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public updateSmaId(args: MethodArgs<'update_sma_id(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.updateSmaId(args, params)) - } - - /** - * Calls the get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64) ABI method. - * - * Returns the discount for the specified expiration type. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call: An expression that returns the discount. - */ - public getDiscount(args: MethodArgs<'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.getDiscount(args, params), Discount) - } - - /** - * Calls the is_discount_expired(uint64)uint64 ABI method. - * - * Checks if the discount for the specified expiration type is expired. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call: An expression that checks if the discount is expired. - */ - public isDiscountExpired(args: MethodArgs<'is_discount_expired(uint64)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.isDiscountExpired(args, params)) - } - - /** - * Calls the create_discount(uint64,uint64,uint64,uint64,pay)void ABI method. - * - * Creates a new discount for the subscription service. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public createDiscount(args: MethodArgs<'create_discount(uint64,uint64,uint64,uint64,pay)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.createDiscount(args, params)) - } - - /** - * Calls the delete_discount(uint64)void ABI method. - * - * Deletes a discount for the subscription service. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public deleteDiscount(args: MethodArgs<'delete_discount(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.deleteDiscount(args, params)) - } - - /** - * Calls the compute_price(uint64,bool)uint64 ABI method. - * - * Computes the price of the subscription for the given expiration type. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call: An expression that computes the price of the subscription. - */ - public computePrice(args: MethodArgs<'compute_price(uint64,bool)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.computePrice(args, params)) - } - - /** - * Calls the compute_platform_fee(uint64,application)uint64 ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public computePlatformFee(args: MethodArgs<'compute_platform_fee(uint64,application)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.computePlatformFee(args, params)) - } - - /** - * Calls the create_subscription(address,uint64,pay,pay,txn,application,application)uint64 ABI method. - * - * Subscribes a user to the subscription service and creates a new -subscription. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call: An expression that subscribes the user and creates a new subscription. - */ - public createSubscription(args: MethodArgs<'create_subscription(address,uint64,pay,pay,txn,application,application)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.createSubscription(args, params)) - } - - /** - * Calls the get_subscription(address)(uint64,uint64,uint64,uint64,uint64) ABI method. - * - * Retrieves the subscription details of a given subscriber. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call: An expression that retrieves the subscription details. - */ - public getSubscription(args: MethodArgs<'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.getSubscription(args, params), Subscription) - } - - /** - * Calls the is_subscriber(address)uint64 ABI method. - * - * Checks if a given address is a subscriber of the subscription service. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call: An expression that checks if the address is a subscriber. - */ - public isSubscriber(args: MethodArgs<'is_subscriber(address)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.isSubscriber(args, params)) - } - - /** - * Calls the claim_subscription(asset)void ABI method. - * - * Allows a subscriber to claim their subscription. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public claimSubscription(args: MethodArgs<'claim_subscription(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.claimSubscription(args, params)) - } - - /** - * Calls the transfer_subscription(address,asset)void ABI method. - * - * Transfers a subscription from the sender's address to a new address. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public transferSubscription(args: MethodArgs<'transfer_subscription(address,asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.transferSubscription(args, params)) - } - - /** - * Calls the delete_subscription(asset)uint64 ABI method. - * - * Unsubscribes a user from the subscription service and deletes the -subscription. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call: An expression that unsubscribes the user and deletes the subscription. - */ - public deleteSubscription(args: MethodArgs<'delete_subscription(asset)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.deleteSubscription(args, params)) - } - - /** - * Calls the enable()void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public enable(args: MethodArgs<'enable()void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.enable(args, params)) - } - - /** - * Calls the disable()void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public disable(args: MethodArgs<'disable()void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmiCallFactory.disable(args, params)) - } - - /** - * Extracts a binary state value out of an AppState dictionary - * - * @param state The state dictionary containing the state value - * @param key The key of the state value - * @returns A BinaryState instance containing the state value, or undefined if the key was not found - */ - private static getBinaryState(state: AppState, key: string): BinaryState | undefined { - const value = state[key] - if (!value) return undefined - if (!('valueRaw' in value)) - throw new Error(`Failed to parse state value for ${key}; received an int when expected a byte array`) - return { - asString(): string { - return value.value - }, - asByteArray(): Uint8Array { - return value.valueRaw - } - } - } - - /** - * Extracts a integer state value out of an AppState dictionary - * - * @param state The state dictionary containing the state value - * @param key The key of the state value - * @returns An IntegerState instance containing the state value, or undefined if the key was not found - */ - private static getIntegerState(state: AppState, key: string): IntegerState | undefined { - const value = state[key] - if (!value) return undefined - if ('valueRaw' in value) - throw new Error(`Failed to parse state value for ${key}; received a byte array when expected a number`) - return { - asBigInt() { - return typeof value.value === 'bigint' ? value.value : BigInt(value.value) - }, - asNumber(): number { - return typeof value.value === 'bigint' ? Number(value.value) : value.value - }, - } - } - - /** - * Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value - */ - public async getGlobalState(): Promise { - const state = await this.appClient.getGlobalState() - return { - get coin_id() { - return SmiClient.getIntegerState(state, 'coin_id') - }, - get created_at() { - return SmiClient.getIntegerState(state, 'created_at') - }, - get image_url() { - return SmiClient.getBinaryState(state, 'image_url') - }, - get lifecycle() { - return SmiClient.getIntegerState(state, 'lifecycle') - }, - get manager() { - return SmiClient.getBinaryState(state, 'manager') - }, - get max_subs() { - return SmiClient.getIntegerState(state, 'max_subs') - }, - get name() { - return SmiClient.getBinaryState(state, 'name') - }, - get price() { - return SmiClient.getIntegerState(state, 'price') - }, - get sma_id() { - return SmiClient.getIntegerState(state, 'sma_id') - }, - get sub_type() { - return SmiClient.getIntegerState(state, 'sub_type') - }, - get total_subs() { - return SmiClient.getIntegerState(state, 'total_subs') - }, - get unit_name() { - return SmiClient.getBinaryState(state, 'unit_name') - }, - } - } - - public compose(): SmiComposer { - const client = this - const atc = new AtomicTransactionComposer() - let promiseChain:Promise = Promise.resolve() - const resultMappers: Array any)> = [] - return { - getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.getVersion(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - updateManager(args: MethodArgs<'update_manager(address)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.updateManager(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - updateSmaId(args: MethodArgs<'update_sma_id(uint64)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.updateSmaId(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - getDiscount(args: MethodArgs<'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.getDiscount(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(Discount) - return this - }, - isDiscountExpired(args: MethodArgs<'is_discount_expired(uint64)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.isDiscountExpired(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - createDiscount(args: MethodArgs<'create_discount(uint64,uint64,uint64,uint64,pay)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.createDiscount(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - deleteDiscount(args: MethodArgs<'delete_discount(uint64)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.deleteDiscount(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - computePrice(args: MethodArgs<'compute_price(uint64,bool)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.computePrice(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - computePlatformFee(args: MethodArgs<'compute_platform_fee(uint64,application)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.computePlatformFee(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - createSubscription(args: MethodArgs<'create_subscription(address,uint64,pay,pay,txn,application,application)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.createSubscription(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - getSubscription(args: MethodArgs<'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.getSubscription(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(Subscription) - return this - }, - isSubscriber(args: MethodArgs<'is_subscriber(address)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.isSubscriber(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - claimSubscription(args: MethodArgs<'claim_subscription(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.claimSubscription(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - transferSubscription(args: MethodArgs<'transfer_subscription(address,asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.transferSubscription(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - deleteSubscription(args: MethodArgs<'delete_subscription(asset)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.deleteSubscription(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - enable(args: MethodArgs<'enable()void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.enable(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - disable(args: MethodArgs<'disable()void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.disable(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - get update() { - const $this = this - return { - bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.update.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return $this - }, - } - }, - get delete() { - const $this = this - return { - delete(args: MethodArgs<'delete()void'>, params?: AppClientCallCoreParams) { - promiseChain = promiseChain.then(() => client.delete.delete(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return $this - }, - } - }, - get optIn() { - const $this = this - return { - bare(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.optIn.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return $this - }, - } - }, - get closeOut() { - const $this = this - return { - bare(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.closeOut.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return $this - }, - } - }, - clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.clearState({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom) { - promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit.getTransactionWithSigner(txn, defaultSender ?? client.sender))) - return this - }, - async atc() { - await promiseChain - return atc - }, - async execute() { - await promiseChain - const result = await algokit.sendAtomicTransactionComposer({ atc, sendParams: {} }, client.algod) - return { - ...result, - returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue) - } - } - } as unknown as SmiComposer - } -} -export type SmiComposer = { - /** - * Calls the get_version()string ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'get_version()string'>]> - - /** - * Calls the update_manager(address)void ABI method. - * - * Updates the manager account of the subscription service. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - updateManager(args: MethodArgs<'update_manager(address)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'update_manager(address)void'>]> - - /** - * Calls the update_sma_id(uint64)void ABI method. - * - * Updates the ID of the Subtopia Price Oracle contract. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - updateSmaId(args: MethodArgs<'update_sma_id(uint64)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'update_sma_id(uint64)void'>]> - - /** - * Calls the get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64) ABI method. - * - * Returns the discount for the specified expiration type. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - getDiscount(args: MethodArgs<'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'get_discount(uint64)(uint64,uint64,uint64,uint64,uint64,uint64)'>]> - - /** - * Calls the is_discount_expired(uint64)uint64 ABI method. - * - * Checks if the discount for the specified expiration type is expired. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - isDiscountExpired(args: MethodArgs<'is_discount_expired(uint64)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'is_discount_expired(uint64)uint64'>]> - - /** - * Calls the create_discount(uint64,uint64,uint64,uint64,pay)void ABI method. - * - * Creates a new discount for the subscription service. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - createDiscount(args: MethodArgs<'create_discount(uint64,uint64,uint64,uint64,pay)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'create_discount(uint64,uint64,uint64,uint64,pay)void'>]> - - /** - * Calls the delete_discount(uint64)void ABI method. - * - * Deletes a discount for the subscription service. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - deleteDiscount(args: MethodArgs<'delete_discount(uint64)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'delete_discount(uint64)void'>]> - - /** - * Calls the compute_price(uint64,bool)uint64 ABI method. - * - * Computes the price of the subscription for the given expiration type. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - computePrice(args: MethodArgs<'compute_price(uint64,bool)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'compute_price(uint64,bool)uint64'>]> - - /** - * Calls the compute_platform_fee(uint64,application)uint64 ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - computePlatformFee(args: MethodArgs<'compute_platform_fee(uint64,application)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'compute_platform_fee(uint64,application)uint64'>]> - - /** - * Calls the create_subscription(address,uint64,pay,pay,txn,application,application)uint64 ABI method. - * - * Subscribes a user to the subscription service and creates a new -subscription. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - createSubscription(args: MethodArgs<'create_subscription(address,uint64,pay,pay,txn,application,application)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'create_subscription(address,uint64,pay,pay,txn,application,application)uint64'>]> - - /** - * Calls the get_subscription(address)(uint64,uint64,uint64,uint64,uint64) ABI method. - * - * Retrieves the subscription details of a given subscriber. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - getSubscription(args: MethodArgs<'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'get_subscription(address)(uint64,uint64,uint64,uint64,uint64)'>]> - - /** - * Calls the is_subscriber(address)uint64 ABI method. - * - * Checks if a given address is a subscriber of the subscription service. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - isSubscriber(args: MethodArgs<'is_subscriber(address)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'is_subscriber(address)uint64'>]> - - /** - * Calls the claim_subscription(asset)void ABI method. - * - * Allows a subscriber to claim their subscription. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - claimSubscription(args: MethodArgs<'claim_subscription(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'claim_subscription(asset)void'>]> - - /** - * Calls the transfer_subscription(address,asset)void ABI method. - * - * Transfers a subscription from the sender's address to a new address. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - transferSubscription(args: MethodArgs<'transfer_subscription(address,asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'transfer_subscription(address,asset)void'>]> - - /** - * Calls the delete_subscription(asset)uint64 ABI method. - * - * Unsubscribes a user from the subscription service and deletes the -subscription. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - deleteSubscription(args: MethodArgs<'delete_subscription(asset)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'delete_subscription(asset)uint64'>]> - - /** - * Calls the enable()void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - enable(args: MethodArgs<'enable()void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'enable()void'>]> - - /** - * Calls the disable()void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - disable(args: MethodArgs<'disable()void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, MethodReturn<'disable()void'>]> - - /** - * Gets available update methods - */ - readonly update: { - /** - * Updates an existing instance of the SMI smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs): SmiComposer<[...TReturns, undefined]> - } - - /** - * Gets available delete methods - */ - readonly delete: { - /** - * Deletes an existing instance of the SMI smart contract using the delete()void ABI method. - * - * @param args The arguments for the smart contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - delete(args: MethodArgs<'delete()void'>, params?: AppClientCallCoreParams): SmiComposer<[...TReturns, MethodReturn<'delete()void'>]> - } - - /** - * Gets available optIn methods - */ - readonly optIn: { - /** - * Opts the user into an existing instance of the SMI smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - bare(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, undefined]> - } - - /** - * Gets available closeOut methods - */ - readonly closeOut: { - /** - * Makes a close out call to an existing instance of the SMI smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - bare(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, undefined]> - } - - /** - * Makes a clear_state call to an existing instance of the SMI smart contract. - * - * @param args The arguments for the bare call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmiComposer<[...TReturns, undefined]> - - /** - * Adds a transaction to the composer - * - * @param txn One of: A TransactionWithSigner object (returned as is), a TransactionToSign object (signer is obtained from the signer property), a Transaction object (signer is extracted from the defaultSender parameter), an async SendTransactionResult returned by one of algokit utils helpers (signer is obtained from the defaultSender parameter) - * @param defaultSender The default sender to be used to obtain a signer where the object provided to the transaction parameter does not include a signer. - */ - addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom): SmiComposer - /** - * Returns the underlying AtomicTransactionComposer instance - */ - atc(): Promise - /** - * Executes the transaction group and returns an array of results - */ - execute(): Promise> -} -export type SmiComposerResults = { - returns: TReturns - groupId: string - txIds: string[] - transactions: Transaction[] -} diff --git a/src/contracts/SML.ts b/src/contracts/SML.ts deleted file mode 100644 index 9451f5b..0000000 --- a/src/contracts/SML.ts +++ /dev/null @@ -1,1017 +0,0 @@ -/* eslint-disable */ -/** - * This file was automatically generated by @algorandfoundation/algokit-client-generator. - * DO NOT MODIFY IT BY HAND. - * requires: @algorandfoundation/algokit-utils: ^2 - */ -import * as algokit from '@algorandfoundation/algokit-utils' -import { - AppCallTransactionResult, - AppCallTransactionResultOfType, - CoreAppCallArgs, - RawAppCallArgs, - AppState, - TealTemplateParams, - ABIAppCallArg, -} from '@algorandfoundation/algokit-utils/types/app' -import { - AppClientCallCoreParams, - AppClientCompilationParams, - AppClientDeployCoreParams, - AppDetails, - ApplicationClient, -} from '@algorandfoundation/algokit-utils/types/app-client' -import { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' -import { SendTransactionResult, TransactionToSign, SendTransactionFrom } from '@algorandfoundation/algokit-utils/types/transaction' -import { Algodv2, OnApplicationComplete, Transaction, TransactionWithSigner, AtomicTransactionComposer } from 'algosdk' -export const APP_SPEC: AppSpec = { - "hints": { - "create(address)void": { - "call_config": { - "no_op": "CREATE" - } - }, - "get_version()string": { - "call_config": { - "no_op": "CALL" - } - }, - "opt_in_smi(application)void": { - "call_config": { - "no_op": "CALL" - } - }, - "opt_out_smi(application)void": { - "call_config": { - "no_op": "CALL" - } - }, - "opt_in_coin(asset)void": { - "call_config": { - "no_op": "CALL" - } - }, - "opt_out_coin(asset)void": { - "call_config": { - "no_op": "CALL" - } - }, - "withdraw_coin(asset)void": { - "call_config": { - "no_op": "CALL" - } - }, - "withdraw_algo()void": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSA0IDYKYnl0ZWNibG9jayAweDZkNjE2ZTYxNjc2NTcyIDB4CnR4biBOdW1BcHBBcmdzCmludGNfMCAvLyAwCj09CmJueiBtYWluX2wxOAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGNjNjk0ZWFhIC8vICJjcmVhdGUoYWRkcmVzcyl2b2lkIgo9PQpibnogbWFpbl9sMTcKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgyZmJhNWExYiAvLyAiZ2V0X3ZlcnNpb24oKXN0cmluZyIKPT0KYm56IG1haW5fbDE2CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4Y2FkNTYxNDYgLy8gIm9wdF9pbl9zbWkoYXBwbGljYXRpb24pdm9pZCIKPT0KYm56IG1haW5fbDE1CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4YzJhMzg0NTEgLy8gIm9wdF9vdXRfc21pKGFwcGxpY2F0aW9uKXZvaWQiCj09CmJueiBtYWluX2wxNAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDZiMmIyNTZjIC8vICJvcHRfaW5fY29pbihhc3NldCl2b2lkIgo9PQpibnogbWFpbl9sMTMKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg2YThiODY1NiAvLyAib3B0X291dF9jb2luKGFzc2V0KXZvaWQiCj09CmJueiBtYWluX2wxMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGI0ZTBmMzBhIC8vICJ3aXRoZHJhd19jb2luKGFzc2V0KXZvaWQiCj09CmJueiBtYWluX2wxMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDU3MjU4OGM1IC8vICJ3aXRoZHJhd19hbGdvKCl2b2lkIgo9PQpibnogbWFpbl9sMTAKZXJyCm1haW5fbDEwOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHdpdGhkcmF3YWxnb2Nhc3Rlcl8xNwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTE6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgd2l0aGRyYXdjb2luY2FzdGVyXzE2CmludGNfMSAvLyAxCnJldHVybgptYWluX2wxMjoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBvcHRvdXRjb2luY2FzdGVyXzE1CmludGNfMSAvLyAxCnJldHVybgptYWluX2wxMzoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBvcHRpbmNvaW5jYXN0ZXJfMTQKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE0Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIG9wdG91dHNtaWNhc3Rlcl8xMwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTU6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgb3B0aW5zbWljYXN0ZXJfMTIKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE2Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGdldHZlcnNpb25jYXN0ZXJfMTEKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE3Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCj09CiYmCmFzc2VydApjYWxsc3ViIGNyZWF0ZWNhc3Rlcl8xMAppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTg6CnR4biBPbkNvbXBsZXRpb24KaW50Y18xIC8vIE9wdEluCj09CmJueiBtYWluX2wyMgp0eG4gT25Db21wbGV0aW9uCmludGNfMiAvLyBVcGRhdGVBcHBsaWNhdGlvbgo9PQpibnogbWFpbl9sMjEKZXJyCm1haW5fbDIxOgp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQphc3NlcnQKY2FsbHN1YiB1cGRhdGVfMgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjI6CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CmFzc2VydApjYWxsc3ViIG9wdGluXzEKaW50Y18xIC8vIDEKcmV0dXJuCgovLyBjcmVhdGUKY3JlYXRlXzA6CnByb3RvIDEgMApieXRlY18wIC8vICJtYW5hZ2VyIgpieXRlY18xIC8vICIiCmFwcF9nbG9iYWxfcHV0CmJ5dGVjXzAgLy8gIm1hbmFnZXIiCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIG9wdGluCm9wdGluXzE6CnByb3RvIDAgMAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQphc3NlcnQKcmV0c3ViCgovLyB1cGRhdGUKdXBkYXRlXzI6CnByb3RvIDAgMAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQphc3NlcnQKcmV0c3ViCgovLyBnZXRfdmVyc2lvbgpnZXR2ZXJzaW9uXzM6CnByb3RvIDAgMQpieXRlY18xIC8vICIiCmR1cApwdXNoYnl0ZXMgMHgzMTJlMzAgLy8gIjEuMCIKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmxlbgppdG9iCmV4dHJhY3QgNiAwCmZyYW1lX2RpZyAxCmNvbmNhdApmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKZXh0cmFjdCAyIDAKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmxlbgppdG9iCmV4dHJhY3QgNiAwCmZyYW1lX2RpZyAwCmNvbmNhdApmcmFtZV9idXJ5IDAKcmV0c3ViCgovLyBvcHRfaW5fc21pCm9wdGluc21pXzQ6CnByb3RvIDEgMAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwpzdG9yZSAxCnN0b3JlIDAKbG9hZCAxCmJueiBvcHRpbnNtaV80X2wyCmludGNfMCAvLyAwCnJldHVybgpvcHRpbnNtaV80X2wyOgpsb2FkIDAKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiE9CmFzc2VydAppdHhuX2JlZ2luCmludGNfMyAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KaW50Y18xIC8vIE9wdEluCml0eG5fZmllbGQgT25Db21wbGV0aW9uCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25JRAppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIG9wdF9vdXRfc21pCm9wdG91dHNtaV81Ogpwcm90byAxIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydAppdHhuX2JlZ2luCmludGNfMyAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KcHVzaGludCAyIC8vIENsb3NlT3V0Cml0eG5fZmllbGQgT25Db21wbGV0aW9uCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25JRAppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIG9wdF9pbl9jb2luCm9wdGluY29pbl82Ogpwcm90byAxIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydAppdHhuX2JlZ2luCmludGNfMiAvLyBheGZlcgppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMQp0eG5hcyBBc3NldHMKaXR4bl9maWVsZCBYZmVyQXNzZXQKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBBc3NldEFtb3VudApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwppdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKcmV0c3ViCgovLyBvcHRfb3V0X2NvaW4Kb3B0b3V0Y29pbl83Ogpwcm90byAxIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydAppdHhuX2JlZ2luCmludGNfMiAvLyBheGZlcgppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMQp0eG5hcyBBc3NldHMKaXR4bl9maWVsZCBYZmVyQXNzZXQKYnl0ZWNfMCAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCmludGNfMCAvLyAwCml0eG5fZmllbGQgQXNzZXRBbW91bnQKYnl0ZWNfMCAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBBc3NldENsb3NlVG8KaXR4bl9zdWJtaXQKcmV0c3ViCgovLyB3aXRoZHJhd19jb2luCndpdGhkcmF3Y29pbl84Ogpwcm90byAxIDAKdHhuIFNlbmRlcgpieXRlY18wIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldAo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmZyYW1lX2RpZyAtMQp0eG5hcyBBc3NldHMKYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCnN0b3JlIDMKc3RvcmUgMgpsb2FkIDMKYm56IHdpdGhkcmF3Y29pbl84X2wyCmludGNfMCAvLyAwCnJldHVybgp3aXRoZHJhd2NvaW5fOF9sMjoKaXR4bl9iZWdpbgppbnRjXzIgLy8gYXhmZXIKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTEKdHhuYXMgQXNzZXRzCml0eG5fZmllbGQgWGZlckFzc2V0CmJ5dGVjXzAgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQpsb2FkIDIKaXR4bl9maWVsZCBBc3NldEFtb3VudAppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIHdpdGhkcmF3X2FsZ28Kd2l0aGRyYXdhbGdvXzk6CnByb3RvIDAgMAppbnRjXzAgLy8gMApkdXBuIDIKdHhuIFNlbmRlcgpieXRlY18wIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldAo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmJhbGFuY2UKZnJhbWVfYnVyeSAwCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCm1pbl9iYWxhbmNlCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMApmcmFtZV9kaWcgMQotCmludGNfMCAvLyAwCj4KYm56IHdpdGhkcmF3YWxnb185X2wyCmludGNfMCAvLyAwCnJldHVybgp3aXRoZHJhd2FsZ29fOV9sMjoKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIDEKLQpmcmFtZV9idXJ5IDIKaXR4bl9iZWdpbgppbnRjXzEgLy8gcGF5Cml0eG5fZmllbGQgVHlwZUVudW0KYnl0ZWNfMCAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBSZWNlaXZlcgppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQpmcmFtZV9kaWcgMgppdHhuX2ZpZWxkIEFtb3VudAppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIGNyZWF0ZV9jYXN0ZXIKY3JlYXRlY2FzdGVyXzEwOgpwcm90byAwIDAKYnl0ZWNfMSAvLyAiIgp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMApjYWxsc3ViIGNyZWF0ZV8wCnJldHN1YgoKLy8gZ2V0X3ZlcnNpb25fY2FzdGVyCmdldHZlcnNpb25jYXN0ZXJfMTE6CnByb3RvIDAgMApieXRlY18xIC8vICIiCmNhbGxzdWIgZ2V0dmVyc2lvbl8zCmZyYW1lX2J1cnkgMApwdXNoYnl0ZXMgMHgxNTFmN2M3NSAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCmNvbmNhdApsb2cKcmV0c3ViCgovLyBvcHRfaW5fc21pX2Nhc3RlcgpvcHRpbnNtaWNhc3Rlcl8xMjoKcHJvdG8gMCAwCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKY2FsbHN1YiBvcHRpbnNtaV80CnJldHN1YgoKLy8gb3B0X291dF9zbWlfY2FzdGVyCm9wdG91dHNtaWNhc3Rlcl8xMzoKcHJvdG8gMCAwCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKY2FsbHN1YiBvcHRvdXRzbWlfNQpyZXRzdWIKCi8vIG9wdF9pbl9jb2luX2Nhc3RlcgpvcHRpbmNvaW5jYXN0ZXJfMTQ6CnByb3RvIDAgMAppbnRjXzAgLy8gMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmludGNfMCAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmNhbGxzdWIgb3B0aW5jb2luXzYKcmV0c3ViCgovLyBvcHRfb3V0X2NvaW5fY2FzdGVyCm9wdG91dGNvaW5jYXN0ZXJfMTU6CnByb3RvIDAgMAppbnRjXzAgLy8gMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmludGNfMCAvLyAwCmdldGJ5dGUKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmNhbGxzdWIgb3B0b3V0Y29pbl83CnJldHN1YgoKLy8gd2l0aGRyYXdfY29pbl9jYXN0ZXIKd2l0aGRyYXdjb2luY2FzdGVyXzE2Ogpwcm90byAwIDAKaW50Y18wIC8vIDAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMApjYWxsc3ViIHdpdGhkcmF3Y29pbl84CnJldHN1YgoKLy8gd2l0aGRyYXdfYWxnb19jYXN0ZXIKd2l0aGRyYXdhbGdvY2FzdGVyXzE3Ogpwcm90byAwIDAKY2FsbHN1YiB3aXRoZHJhd2FsZ29fOQpyZXRzdWI=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu" - }, - "state": { - "global": { - "num_byte_slices": 1, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": { - "manager": { - "type": "bytes", - "key": "manager", - "descr": "Address of the manager of the locker" - } - }, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "SML", - "methods": [ - { - "name": "create", - "args": [ - { - "type": "address", - "name": "manager" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "get_version", - "args": [], - "returns": { - "type": "string" - } - }, - { - "name": "opt_in_smi", - "args": [ - { - "type": "application", - "name": "smi" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "opt_out_smi", - "args": [ - { - "type": "application", - "name": "smi" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "opt_in_coin", - "args": [ - { - "type": "asset", - "name": "coin" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "opt_out_coin", - "args": [ - { - "type": "asset", - "name": "coin" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "withdraw_coin", - "args": [ - { - "type": "asset", - "name": "coin" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "withdraw_algo", - "args": [], - "returns": { - "type": "void" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "opt_in": "CALL", - "update_application": "CALL" - } -} - -/** - * Defines an onCompletionAction of 'no_op' - */ -export type OnCompleteNoOp = { onCompleteAction?: 'no_op' | OnApplicationComplete.NoOpOC } -/** - * Defines an onCompletionAction of 'opt_in' - */ -export type OnCompleteOptIn = { onCompleteAction: 'opt_in' | OnApplicationComplete.OptInOC } -/** - * Defines an onCompletionAction of 'close_out' - */ -export type OnCompleteCloseOut = { onCompleteAction: 'close_out' | OnApplicationComplete.CloseOutOC } -/** - * Defines an onCompletionAction of 'delete_application' - */ -export type OnCompleteDelApp = { onCompleteAction: 'delete_application' | OnApplicationComplete.DeleteApplicationOC } -/** - * Defines an onCompletionAction of 'update_application' - */ -export type OnCompleteUpdApp = { onCompleteAction: 'update_application' | OnApplicationComplete.UpdateApplicationOC } -/** - * A state record containing a single unsigned integer - */ -export type IntegerState = { - /** - * Gets the state value as a BigInt - */ - asBigInt(): bigint - /** - * Gets the state value as a number. - */ - asNumber(): number -} -/** - * A state record containing binary data - */ -export type BinaryState = { - /** - * Gets the state value as a Uint8Array - */ - asByteArray(): Uint8Array - /** - * Gets the state value as a string - */ - asString(): string -} - -/** - * Defines the types of available calls and state of the Sml smart contract. - */ -export type Sml = { - /** - * Maps method signatures / names to their argument and return types. - */ - methods: - & Record<'create(address)void' | 'create', { - argsObj: { - manager: string - } - argsTuple: [manager: string] - returns: void - }> - & Record<'get_version()string' | 'get_version', { - argsObj: { - } - argsTuple: [] - returns: string - }> - & Record<'opt_in_smi(application)void' | 'opt_in_smi', { - argsObj: { - smi: number | bigint - } - argsTuple: [smi: number | bigint] - returns: void - }> - & Record<'opt_out_smi(application)void' | 'opt_out_smi', { - argsObj: { - smi: number | bigint - } - argsTuple: [smi: number | bigint] - returns: void - }> - & Record<'opt_in_coin(asset)void' | 'opt_in_coin', { - argsObj: { - coin: number | bigint - } - argsTuple: [coin: number | bigint] - returns: void - }> - & Record<'opt_out_coin(asset)void' | 'opt_out_coin', { - argsObj: { - coin: number | bigint - } - argsTuple: [coin: number | bigint] - returns: void - }> - & Record<'withdraw_coin(asset)void' | 'withdraw_coin', { - argsObj: { - coin: number | bigint - } - argsTuple: [coin: number | bigint] - returns: void - }> - & Record<'withdraw_algo()void' | 'withdraw_algo', { - argsObj: { - } - argsTuple: [] - returns: void - }> - /** - * Defines the shape of the global and local state of the application. - */ - state: { - global: { - /** - * Address of the manager of the locker - */ - 'manager'?: BinaryState - } - } -} -/** - * Defines the possible abi call signatures - */ -export type SmlSig = keyof Sml['methods'] -/** - * Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a bare call is made - */ -export type TypedCallParams = { - method: TSignature - methodArgs: TSignature extends undefined ? undefined : Array -} & AppClientCallCoreParams & CoreAppCallArgs -/** - * Defines the arguments required for a bare call - */ -export type BareCallArgs = Omit -/** - * Maps a method signature from the Sml smart contract to the method's arguments in either tuple of struct form - */ -export type MethodArgs = Sml['methods'][TSignature]['argsObj' | 'argsTuple'] -/** - * Maps a method signature from the Sml smart contract to the method's return type - */ -export type MethodReturn = Sml['methods'][TSignature]['returns'] - -/** - * A factory for available 'create' calls - */ -export type SmlCreateCalls = (typeof SmlCallFactory)['create'] -/** - * Defines supported create methods for this smart contract - */ -export type SmlCreateCallParams = - | (TypedCallParams<'create(address)void'> & (OnCompleteNoOp)) -/** - * A factory for available 'update' calls - */ -export type SmlUpdateCalls = (typeof SmlCallFactory)['update'] -/** - * Defines supported update methods for this smart contract - */ -export type SmlUpdateCallParams = - | TypedCallParams -/** - * Defines arguments required for the deploy method. - */ -export type SmlDeployArgs = { - deployTimeParams?: TealTemplateParams - /** - * A delegate which takes a create call factory and returns the create call params for this smart contract - */ - createCall?: (callFactory: SmlCreateCalls) => SmlCreateCallParams - /** - * A delegate which takes a update call factory and returns the update call params for this smart contract - */ - updateCall?: (callFactory: SmlUpdateCalls) => SmlUpdateCallParams -} - - -/** - * Exposes methods for constructing all available smart contract calls - */ -export abstract class SmlCallFactory { - /** - * Gets available create call factories - */ - static get create() { - return { - /** - * Constructs a create call for the SML smart contract using the create(address)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - create(args: MethodArgs<'create(address)void'>, params: AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams & (OnCompleteNoOp) = {}) { - return { - method: 'create(address)void' as const, - methodArgs: Array.isArray(args) ? args : [args.manager], - ...params, - } - }, - } - } - - /** - * Gets available update call factories - */ - static get update() { - return { - /** - * Constructs an update call for the SML smart contract using a bare call - * - * @param params Any parameters for the call - * @returns A TypedCallParams object for the call - */ - bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams = {}) { - return { - method: undefined, - methodArgs: undefined, - ...params, - } - }, - } - } - - /** - * Gets available optIn call factories - */ - static get optIn() { - return { - /** - * Constructs an opt in call for the SML smart contract using a bare call - * - * @param params Any parameters for the call - * @returns A TypedCallParams object for the call - */ - bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { - return { - method: undefined, - methodArgs: undefined, - ...params, - } - }, - } - } - - /** - * Constructs a no op call for the get_version()string ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'get_version()string' as const, - methodArgs: Array.isArray(args) ? args : [], - ...params, - } - } - /** - * Constructs a no op call for the opt_in_smi(application)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static optInSmi(args: MethodArgs<'opt_in_smi(application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'opt_in_smi(application)void' as const, - methodArgs: Array.isArray(args) ? args : [args.smi], - ...params, - } - } - /** - * Constructs a no op call for the opt_out_smi(application)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static optOutSmi(args: MethodArgs<'opt_out_smi(application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'opt_out_smi(application)void' as const, - methodArgs: Array.isArray(args) ? args : [args.smi], - ...params, - } - } - /** - * Constructs a no op call for the opt_in_coin(asset)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static optInCoin(args: MethodArgs<'opt_in_coin(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'opt_in_coin(asset)void' as const, - methodArgs: Array.isArray(args) ? args : [args.coin], - ...params, - } - } - /** - * Constructs a no op call for the opt_out_coin(asset)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static optOutCoin(args: MethodArgs<'opt_out_coin(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'opt_out_coin(asset)void' as const, - methodArgs: Array.isArray(args) ? args : [args.coin], - ...params, - } - } - /** - * Constructs a no op call for the withdraw_coin(asset)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static withdrawCoin(args: MethodArgs<'withdraw_coin(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'withdraw_coin(asset)void' as const, - methodArgs: Array.isArray(args) ? args : [args.coin], - ...params, - } - } - /** - * Constructs a no op call for the withdraw_algo()void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static withdrawAlgo(args: MethodArgs<'withdraw_algo()void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'withdraw_algo()void' as const, - methodArgs: Array.isArray(args) ? args : [], - ...params, - } - } -} - -/** - * A client to make calls to the SML smart contract - */ -export class SmlClient { - /** - * The underlying `ApplicationClient` for when you want to have more flexibility - */ - public readonly appClient: ApplicationClient - - private readonly sender: SendTransactionFrom | undefined - - /** - * Creates a new instance of `SmlClient` - * - * @param appDetails appDetails The details to identify the app to deploy - * @param algod An algod client instance - */ - constructor(appDetails: AppDetails, private algod: Algodv2) { - this.sender = appDetails.sender - this.appClient = algokit.getAppClient({ - ...appDetails, - app: APP_SPEC - }, algod) - } - - /** - * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type - * - * @param result The AppCallTransactionResult to be mapped - * @param returnValueFormatter An optional delegate to format the return value if required - * @returns The smart contract response with an updated return value - */ - protected mapReturnValue(result: AppCallTransactionResult, returnValueFormatter?: (value: any) => TReturn): AppCallTransactionResultOfType { - if(result.return?.decodeError) { - throw result.return.decodeError - } - const returnValue = result.return?.returnValue !== undefined && returnValueFormatter !== undefined - ? returnValueFormatter(result.return.returnValue) - : result.return?.returnValue as TReturn | undefined - return { ...result, return: returnValue } - } - - /** - * Calls the ABI method with the matching signature using an onCompletion code of NO_OP - * - * @param typedCallParams An object containing the method signature, args, and any other relevant parameters - * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type - * @returns The result of the smart contract call - */ - public async call(typedCallParams: TypedCallParams, returnValueFormatter?: (value: any) => MethodReturn) { - return this.mapReturnValue>(await this.appClient.call(typedCallParams), returnValueFormatter) - } - - /** - * Idempotently deploys the SML smart contract. - * - * @param params The arguments for the contract calls and any additional parameters for the call - * @returns The deployment result - */ - public deploy(params: SmlDeployArgs & AppClientDeployCoreParams = {}): ReturnType { - const createArgs = params.createCall?.(SmlCallFactory.create) - const updateArgs = params.updateCall?.(SmlCallFactory.update) - return this.appClient.deploy({ - ...params, - updateArgs, - createArgs, - createOnCompleteAction: createArgs?.onCompleteAction, - }) - } - - /** - * Gets available create methods - */ - public get create() { - const $this = this - return { - /** - * Creates a new instance of the SML smart contract using the create(address)void ABI method. - * - * @param args The arguments for the smart contract call - * @param params Any additional parameters for the call - * @returns The create result - */ - async create(args: MethodArgs<'create(address)void'>, params: AppClientCallCoreParams & AppClientCompilationParams & (OnCompleteNoOp) = {}): Promise>> { - return $this.mapReturnValue(await $this.appClient.create(SmlCallFactory.create.create(args, params))) - }, - } - } - - /** - * Gets available update methods - */ - public get update() { - const $this = this - return { - /** - * Updates an existing instance of the SML smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The update result - */ - bare(args: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs = {}): Promise> { - return $this.appClient.update(args) as unknown as Promise> - }, - } - } - - /** - * Gets available optIn methods - */ - public get optIn() { - const $this = this - return { - /** - * Opts the user into an existing instance of the SML smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The optIn result - */ - bare(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}): Promise> { - return $this.appClient.optIn(args) as unknown as Promise> - }, - } - } - - /** - * Makes a clear_state call to an existing instance of the SML smart contract. - * - * @param args The arguments for the bare call - * @returns The clear_state result - */ - public clearState(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.appClient.clearState(args) - } - - /** - * Calls the get_version()string ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmlCallFactory.getVersion(args, params)) - } - - /** - * Calls the opt_in_smi(application)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public optInSmi(args: MethodArgs<'opt_in_smi(application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmlCallFactory.optInSmi(args, params)) - } - - /** - * Calls the opt_out_smi(application)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public optOutSmi(args: MethodArgs<'opt_out_smi(application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmlCallFactory.optOutSmi(args, params)) - } - - /** - * Calls the opt_in_coin(asset)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public optInCoin(args: MethodArgs<'opt_in_coin(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmlCallFactory.optInCoin(args, params)) - } - - /** - * Calls the opt_out_coin(asset)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public optOutCoin(args: MethodArgs<'opt_out_coin(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmlCallFactory.optOutCoin(args, params)) - } - - /** - * Calls the withdraw_coin(asset)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public withdrawCoin(args: MethodArgs<'withdraw_coin(asset)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmlCallFactory.withdrawCoin(args, params)) - } - - /** - * Calls the withdraw_algo()void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public withdrawAlgo(args: MethodArgs<'withdraw_algo()void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmlCallFactory.withdrawAlgo(args, params)) - } - - /** - * Extracts a binary state value out of an AppState dictionary - * - * @param state The state dictionary containing the state value - * @param key The key of the state value - * @returns A BinaryState instance containing the state value, or undefined if the key was not found - */ - private static getBinaryState(state: AppState, key: string): BinaryState | undefined { - const value = state[key] - if (!value) return undefined - if (!('valueRaw' in value)) - throw new Error(`Failed to parse state value for ${key}; received an int when expected a byte array`) - return { - asString(): string { - return value.value - }, - asByteArray(): Uint8Array { - return value.valueRaw - } - } - } - - /** - * Extracts a integer state value out of an AppState dictionary - * - * @param state The state dictionary containing the state value - * @param key The key of the state value - * @returns An IntegerState instance containing the state value, or undefined if the key was not found - */ - private static getIntegerState(state: AppState, key: string): IntegerState | undefined { - const value = state[key] - if (!value) return undefined - if ('valueRaw' in value) - throw new Error(`Failed to parse state value for ${key}; received a byte array when expected a number`) - return { - asBigInt() { - return typeof value.value === 'bigint' ? value.value : BigInt(value.value) - }, - asNumber(): number { - return typeof value.value === 'bigint' ? Number(value.value) : value.value - }, - } - } - - /** - * Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value - */ - public async getGlobalState(): Promise { - const state = await this.appClient.getGlobalState() - return { - get manager() { - return SmlClient.getBinaryState(state, 'manager') - }, - } - } - - public compose(): SmlComposer { - const client = this - const atc = new AtomicTransactionComposer() - let promiseChain:Promise = Promise.resolve() - const resultMappers: Array any)> = [] - return { - getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.getVersion(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - optInSmi(args: MethodArgs<'opt_in_smi(application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.optInSmi(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - optOutSmi(args: MethodArgs<'opt_out_smi(application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.optOutSmi(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - optInCoin(args: MethodArgs<'opt_in_coin(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.optInCoin(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - optOutCoin(args: MethodArgs<'opt_out_coin(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.optOutCoin(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - withdrawCoin(args: MethodArgs<'withdraw_coin(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.withdrawCoin(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - withdrawAlgo(args: MethodArgs<'withdraw_algo()void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.withdrawAlgo(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - get update() { - const $this = this - return { - bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.update.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return $this - }, - } - }, - get optIn() { - const $this = this - return { - bare(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.optIn.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return $this - }, - } - }, - clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.clearState({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom) { - promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit.getTransactionWithSigner(txn, defaultSender ?? client.sender))) - return this - }, - async atc() { - await promiseChain - return atc - }, - async execute() { - await promiseChain - const result = await algokit.sendAtomicTransactionComposer({ atc, sendParams: {} }, client.algod) - return { - ...result, - returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue) - } - } - } as unknown as SmlComposer - } -} -export type SmlComposer = { - /** - * Calls the get_version()string ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'get_version()string'>]> - - /** - * Calls the opt_in_smi(application)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - optInSmi(args: MethodArgs<'opt_in_smi(application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'opt_in_smi(application)void'>]> - - /** - * Calls the opt_out_smi(application)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - optOutSmi(args: MethodArgs<'opt_out_smi(application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'opt_out_smi(application)void'>]> - - /** - * Calls the opt_in_coin(asset)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - optInCoin(args: MethodArgs<'opt_in_coin(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'opt_in_coin(asset)void'>]> - - /** - * Calls the opt_out_coin(asset)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - optOutCoin(args: MethodArgs<'opt_out_coin(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'opt_out_coin(asset)void'>]> - - /** - * Calls the withdraw_coin(asset)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - withdrawCoin(args: MethodArgs<'withdraw_coin(asset)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'withdraw_coin(asset)void'>]> - - /** - * Calls the withdraw_algo()void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - withdrawAlgo(args: MethodArgs<'withdraw_algo()void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, MethodReturn<'withdraw_algo()void'>]> - - /** - * Gets available update methods - */ - readonly update: { - /** - * Updates an existing instance of the SML smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs): SmlComposer<[...TReturns, undefined]> - } - - /** - * Gets available optIn methods - */ - readonly optIn: { - /** - * Opts the user into an existing instance of the SML smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - bare(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, undefined]> - } - - /** - * Makes a clear_state call to an existing instance of the SML smart contract. - * - * @param args The arguments for the bare call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmlComposer<[...TReturns, undefined]> - - /** - * Adds a transaction to the composer - * - * @param txn One of: A TransactionWithSigner object (returned as is), a TransactionToSign object (signer is obtained from the signer property), a Transaction object (signer is extracted from the defaultSender parameter), an async SendTransactionResult returned by one of algokit utils helpers (signer is obtained from the defaultSender parameter) - * @param defaultSender The default sender to be used to obtain a signer where the object provided to the transaction parameter does not include a signer. - */ - addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom): SmlComposer - /** - * Returns the underlying AtomicTransactionComposer instance - */ - atc(): Promise - /** - * Executes the transaction group and returns an array of results - */ - execute(): Promise> -} -export type SmlComposerResults = { - returns: TReturns - groupId: string - txIds: string[] - transactions: Transaction[] -} diff --git a/src/contracts/SMR.ts b/src/contracts/SMR.ts deleted file mode 100644 index ab1d1ea..0000000 --- a/src/contracts/SMR.ts +++ /dev/null @@ -1,1312 +0,0 @@ -/* eslint-disable */ -/** - * This file was automatically generated by @algorandfoundation/algokit-client-generator. - * DO NOT MODIFY IT BY HAND. - * requires: @algorandfoundation/algokit-utils: ^2 - */ -import * as algokit from '@algorandfoundation/algokit-utils' -import { - AppCallTransactionResult, - AppCallTransactionResultOfType, - CoreAppCallArgs, - RawAppCallArgs, - AppState, - TealTemplateParams, - ABIAppCallArg, -} from '@algorandfoundation/algokit-utils/types/app' -import { - AppClientCallCoreParams, - AppClientCompilationParams, - AppClientDeployCoreParams, - AppDetails, - ApplicationClient, -} from '@algorandfoundation/algokit-utils/types/app-client' -import { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' -import { SendTransactionResult, TransactionToSign, SendTransactionFrom } from '@algorandfoundation/algokit-utils/types/transaction' -import { Algodv2, OnApplicationComplete, Transaction, TransactionWithSigner, AtomicTransactionComposer } from 'algosdk' -export const APP_SPEC: AppSpec = { - "hints": { - "create(uint64)void": { - "call_config": { - "no_op": "CREATE" - } - }, - "get_version()string": { - "call_config": { - "no_op": "CALL" - } - }, - "update_sml_precompile(byte[],byte[])void": { - "call_config": { - "no_op": "CALL" - } - }, - "update_smi_precompile(byte[],byte[])void": { - "call_config": { - "no_op": "CALL" - } - }, - "append_extra_approval_chunk(byte[])void": { - "call_config": { - "no_op": "CALL" - } - }, - "update_sml(address,application)void": { - "call_config": { - "no_op": "CALL" - } - }, - "update_smi(address,application)void": { - "call_config": { - "no_op": "CALL" - } - }, - "get_sml(address)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "create_sml(address,pay)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64": { - "call_config": { - "no_op": "CALL" - } - }, - "transfer_smi(application,application,address,pay)void": { - "call_config": { - "no_op": "CALL" - } - }, - "delete_smi(application,application)void": { - "call_config": { - "no_op": "CALL" - } - } - }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSA2IDEwMDAwMCAxMDAwMCAyMDAwMDAKYnl0ZWNibG9jayAweCAweDczNmQ2MTVmNjk2NCAweDAxIDB4MTUxZjdjNzUgMHg3MzZkNmM1ZjYxNzA3MDcyNmY3NjYxNmMgMHg3MzZkNmM1ZjYzNmM2NTYxNzIgMHg3MzZkNjk1ZjYxNzA3MDcyNmY3NjYxNmMgMHg3MzZkNjk1ZjYzNmM2NTYxNzIgMHhjYWQ1NjE0NiAweDZiMmIyNTZjIDB4MDAgMHhjMmEzODQ1MQp0eG4gTnVtQXBwQXJncwppbnRjXzAgLy8gMAo9PQpibnogbWFpbl9sMjYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgyNDBkMmY2NyAvLyAiY3JlYXRlKHVpbnQ2NCl2b2lkIgo9PQpibnogbWFpbl9sMjUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgyZmJhNWExYiAvLyAiZ2V0X3ZlcnNpb24oKXN0cmluZyIKPT0KYm56IG1haW5fbDI0CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4ODk0ZWE4ZTggLy8gInVwZGF0ZV9zbWxfcHJlY29tcGlsZShieXRlW10sYnl0ZVtdKXZvaWQiCj09CmJueiBtYWluX2wyMwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGZkZmE4MGRiIC8vICJ1cGRhdGVfc21pX3ByZWNvbXBpbGUoYnl0ZVtdLGJ5dGVbXSl2b2lkIgo9PQpibnogbWFpbl9sMjIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg3ZjcwMGY3YiAvLyAiYXBwZW5kX2V4dHJhX2FwcHJvdmFsX2NodW5rKGJ5dGVbXSl2b2lkIgo9PQpibnogbWFpbl9sMjEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgxZmZhMDNhZCAvLyAidXBkYXRlX3NtbChhZGRyZXNzLGFwcGxpY2F0aW9uKXZvaWQiCj09CmJueiBtYWluX2wyMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDA0MTgyZjc3IC8vICJ1cGRhdGVfc21pKGFkZHJlc3MsYXBwbGljYXRpb24pdm9pZCIKPT0KYm56IG1haW5fbDE5CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4OTYxNjhlNzcgLy8gImdldF9zbWwoYWRkcmVzcyl1aW50NjQiCj09CmJueiBtYWluX2wxOAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGUxYzM2M2Q4IC8vICJjcmVhdGVfc21sKGFkZHJlc3MscGF5KXVpbnQ2NCIKPT0KYm56IG1haW5fbDE3CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4NWQwZjgyYTggLy8gImNyZWF0ZV9zbWkoc3RyaW5nLHVpbnQ2NCx1aW50NjQsdWludDY0LGFzc2V0LHN0cmluZyxzdHJpbmcsYWRkcmVzcyxhcHBsaWNhdGlvbixhcHBsaWNhdGlvbixwYXkscGF5KXVpbnQ2NCIKPT0KYm56IG1haW5fbDE2CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MzkyYTAzYjQgLy8gInRyYW5zZmVyX3NtaShhcHBsaWNhdGlvbixhcHBsaWNhdGlvbixhZGRyZXNzLHBheSl2b2lkIgo9PQpibnogbWFpbl9sMTUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgwMWJlZjQzMCAvLyAiZGVsZXRlX3NtaShhcHBsaWNhdGlvbixhcHBsaWNhdGlvbil2b2lkIgo9PQpibnogbWFpbl9sMTQKZXJyCm1haW5fbDE0Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGRlbGV0ZXNtaWNhc3Rlcl8yNwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTU6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgdHJhbnNmZXJzbWljYXN0ZXJfMjYKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE2Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGNyZWF0ZXNtaWNhc3Rlcl8yNQppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTc6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgY3JlYXRlc21sY2FzdGVyXzI0CmludGNfMSAvLyAxCnJldHVybgptYWluX2wxODoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBnZXRzbWxjYXN0ZXJfMjMKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE5Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHVwZGF0ZXNtaWNhc3Rlcl8yMgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjA6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgdXBkYXRlc21sY2FzdGVyXzIxCmludGNfMSAvLyAxCnJldHVybgptYWluX2wyMToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBhcHBlbmRleHRyYWFwcHJvdmFsY2h1bmtjYXN0ZXJfMjAKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDIyOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHVwZGF0ZXNtaXByZWNvbXBpbGVjYXN0ZXJfMTkKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDIzOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHVwZGF0ZXNtbHByZWNvbXBpbGVjYXN0ZXJfMTgKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDI0Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGdldHZlcnNpb25jYXN0ZXJfMTcKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDI1Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCj09CiYmCmFzc2VydApjYWxsc3ViIGNyZWF0ZWNhc3Rlcl8xNgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjY6CnR4biBPbkNvbXBsZXRpb24KcHVzaGludCA0IC8vIFVwZGF0ZUFwcGxpY2F0aW9uCj09CmJueiBtYWluX2wyOAplcnIKbWFpbl9sMjg6CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CmFzc2VydApjYWxsc3ViIHVwZGF0ZV80CmludGNfMSAvLyAxCnJldHVybgoKLy8gaW5uZXJfdXNkX2luX21pY3JvYWxnbwppbm5lcnVzZGlubWljcm9hbGdvXzA6CnByb3RvIDIgMQpmcmFtZV9kaWcgLTIKcHVzaGJ5dGVzIDB4NzU3MDY0NjE3NDY1NjQ1ZjYxNzQgLy8gInVwZGF0ZWRfYXQiCmFwcF9nbG9iYWxfZ2V0X2V4CnN0b3JlIDYzCnN0b3JlIDYyCmZyYW1lX2RpZyAtMgpwdXNoYnl0ZXMgMHg2NDY1NjM2OTZkNjE2YzczIC8vICJkZWNpbWFscyIKYXBwX2dsb2JhbF9nZXRfZXgKc3RvcmUgNjUKc3RvcmUgNjQKZnJhbWVfZGlnIC0yCnB1c2hieXRlcyAweDcwNzI2OTYzNjUgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldF9leApzdG9yZSA2NwpzdG9yZSA2Ngpsb2FkIDYyCnN0b3JlIDUzCmxvYWQgNjQKc3RvcmUgNTYKbG9hZCA2NgpzdG9yZSA1NwpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCmxvYWQgNTMKLQpwdXNoaW50IDg2NDAwIC8vIDg2NDAwCj4KYm56IGlubmVydXNkaW5taWNyb2FsZ29fMF9sMwppbm5lcnVzZGlubWljcm9hbGdvXzBfbDE6CmZyYW1lX2RpZyAtMQppbnRjIDQgLy8gMTAwMDAKKgpwdXNoaW50IDEwIC8vIDEwCmxvYWQgNTYKZXhwCioKbG9hZCA1NwovCmludGMgNCAvLyAxMDAwMAovCmludGMgNCAvLyAxMDAwMAoqCnN0b3JlIDYwCmxvYWQgNjAKaW50Y18zIC8vIDEwMDAwMAo8CmJ6IGlubmVydXNkaW5taWNyb2FsZ29fMF9sNAppbnRjXzMgLy8gMTAwMDAwCnJldHN1Ygppbm5lcnVzZGlubWljcm9hbGdvXzBfbDM6CnB1c2hpbnQgMiAvLyAyCnN0b3JlIDU2CnB1c2hpbnQgMzAgLy8gMzAKc3RvcmUgNTcKYiBpbm5lcnVzZGlubWljcm9hbGdvXzBfbDEKaW5uZXJ1c2Rpbm1pY3JvYWxnb18wX2w0Ogpsb2FkIDYwCnJldHN1YgoKLy8gaW5uZXJfY3JlYXRlX3NtbAppbm5lcmNyZWF0ZXNtbF8xOgpwcm90byAyIDEKYnl0ZWNfMCAvLyAiIgpkdXAKaW50Y18wIC8vIDAKYnl0ZWMgNCAvLyAic21sX2FwcHJvdmFsIgpib3hfZ2V0CnN0b3JlIDI1CnN0b3JlIDI0CmxvYWQgMjUKYXNzZXJ0CmxvYWQgMjQKZnJhbWVfYnVyeSAwCmJ5dGVjIDUgLy8gInNtbF9jbGVhciIKYm94X2dldApzdG9yZSAyNwpzdG9yZSAyNgpsb2FkIDI3CmFzc2VydApsb2FkIDI2CmZyYW1lX2J1cnkgMQppdHhuX2JlZ2luCmludGNfMiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KaW50Y18wIC8vIE5vT3AKaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KZnJhbWVfZGlnIDAKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KZnJhbWVfZGlnIDEKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEdsb2JhbE51bVVpbnQKaW50Y18xIC8vIDEKaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBMb2NhbE51bVVpbnQKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBMb2NhbE51bUJ5dGVTbGljZQpwdXNoYnl0ZXMgMHhjYzY5NGVhYSAvLyAweGNjNjk0ZWFhCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdAppdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgLTIKYm94X2RlbApwb3AKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAyCml0b2IKYm94X3B1dApmcmFtZV9kaWcgMgphcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCnN0b3JlIDI5CnN0b3JlIDI4Cml0eG5fYmVnaW4KZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKaXR4bl9maWVsZCBTZW5kZXIKaW50Y18xIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmxvYWQgMjgKaXR4bl9maWVsZCBSZWNlaXZlcgpmcmFtZV9kaWcgLTEKaXR4bl9maWVsZCBBbW91bnQKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKZnJhbWVfZGlnIDIKZnJhbWVfYnVyeSAwCnJldHN1YgoKLy8gaW5uZXJfdXBkYXRlX3ByZWNvbXBpbGVzCmlubmVydXBkYXRlcHJlY29tcGlsZXNfMjoKcHJvdG8gNCAwCmludGNfMSAvLyAxCnN0b3JlIDEKZnJhbWVfZGlnIC00CnN0b3JlIDAKaW5uZXJ1cGRhdGVwcmVjb21waWxlc18yX2wxOgpsb2FkIDEKZ2xvYmFsIEdyb3VwU2l6ZQo8CmJ6IGlubmVydXBkYXRlcHJlY29tcGlsZXNfMl9sMwpsb2FkIDAKbG9hZCAxCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMQpleHRyYWN0IDIgMApjb25jYXQKc3RvcmUgMApsb2FkIDEKaW50Y18xIC8vIDEKKwpzdG9yZSAxCmIgaW5uZXJ1cGRhdGVwcmVjb21waWxlc18yX2wxCmlubmVydXBkYXRlcHJlY29tcGlsZXNfMl9sMzoKZnJhbWVfZGlnIC0yCmV4dHJhY3QgMiAwCmJveF9kZWwKcG9wCmZyYW1lX2RpZyAtMgpleHRyYWN0IDIgMApsb2FkIDAKYm94X3B1dApmcmFtZV9kaWcgLTEKZXh0cmFjdCAyIDAKYm94X2RlbApwb3AKZnJhbWVfZGlnIC0xCmV4dHJhY3QgMiAwCmZyYW1lX2RpZyAtMwpib3hfcHV0CnJldHN1YgoKLy8gY3JlYXRlCmNyZWF0ZV8zOgpwcm90byAxIDAKYnl0ZWNfMSAvLyAic21hX2lkIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlY18xIC8vICJzbWFfaWQiCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIHVwZGF0ZQp1cGRhdGVfNDoKcHJvdG8gMCAwCnR4biBTZW5kZXIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCj09Ci8vIHVuYXV0aG9yaXplZAphc3NlcnQKaW50Y18xIC8vIDEKcmV0dXJuCgovLyBnZXRfdmVyc2lvbgpnZXR2ZXJzaW9uXzU6CnByb3RvIDAgMQpieXRlY18wIC8vICIiCmR1cApwdXNoYnl0ZXMgVE1QTF9WRVJTSU9OIC8vIFRNUExfVkVSU0lPTgpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDEKY29uY2F0CmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpleHRyYWN0IDIgMApmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDAKY29uY2F0CmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIHVwZGF0ZV9zbWxfcHJlY29tcGlsZQp1cGRhdGVzbWxwcmVjb21waWxlXzY6CnByb3RvIDIgMApieXRlY18wIC8vICIiCmR1cAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmJ5dGVjIDQgLy8gInNtbF9hcHByb3ZhbCIKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmxlbgppdG9iCmV4dHJhY3QgNiAwCmZyYW1lX2RpZyAwCmNvbmNhdApmcmFtZV9idXJ5IDAKYnl0ZWMgNSAvLyAic21sX2NsZWFyIgpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDEKY29uY2F0CmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAwCmZyYW1lX2RpZyAxCmNhbGxzdWIgaW5uZXJ1cGRhdGVwcmVjb21waWxlc18yCnJldHN1YgoKLy8gdXBkYXRlX3NtaV9wcmVjb21waWxlCnVwZGF0ZXNtaXByZWNvbXBpbGVfNzoKcHJvdG8gMiAwCmJ5dGVjXzAgLy8gIiIKZHVwCnR4biBTZW5kZXIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCj09Ci8vIHVuYXV0aG9yaXplZAphc3NlcnQKYnl0ZWMgNiAvLyAic21pX2FwcHJvdmFsIgpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDAKY29uY2F0CmZyYW1lX2J1cnkgMApieXRlYyA3IC8vICJzbWlfY2xlYXIiCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpsZW4KaXRvYgpleHRyYWN0IDYgMApmcmFtZV9kaWcgMQpjb25jYXQKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTEKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIDEKY2FsbHN1YiBpbm5lcnVwZGF0ZXByZWNvbXBpbGVzXzIKcmV0c3ViCgovLyBhcHBlbmRfZXh0cmFfYXBwcm92YWxfY2h1bmsKYXBwZW5kZXh0cmFhcHByb3ZhbGNodW5rXzg6CnByb3RvIDEgMAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CnR4biBGZWUKaW50Y18wIC8vIDAKPT0KLy8gRmVlIG11c3QgYmUgMAphc3NlcnQKcmV0c3ViCgovLyB1cGRhdGVfc21sCnVwZGF0ZXNtbF85Ogpwcm90byAyIDAKaW50Y18wIC8vIDAKYnl0ZWNfMCAvLyAiIgpkdXAKZnJhbWVfZGlnIC0yCmJveF9sZW4Kc3RvcmUgMwpzdG9yZSAyCmxvYWQgMwpibnogdXBkYXRlc21sXzlfbDIKaW50Y18wIC8vIDAKcmV0dXJuCnVwZGF0ZXNtbF85X2wyOgpmcmFtZV9kaWcgLTIKYm94X2dldApzdG9yZSA1CnN0b3JlIDQKbG9hZCA1CmFzc2VydApsb2FkIDQKYnRvaQpmcmFtZV9idXJ5IDAKYnl0ZWMgNCAvLyAic21sX2FwcHJvdmFsIgpib3hfZ2V0CnN0b3JlIDcKc3RvcmUgNgpsb2FkIDcKYXNzZXJ0CmxvYWQgNgpmcmFtZV9idXJ5IDEKYnl0ZWMgNSAvLyAic21sX2NsZWFyIgpib3hfZ2V0CnN0b3JlIDkKc3RvcmUgOApsb2FkIDkKYXNzZXJ0CmxvYWQgOApmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpmcmFtZV9kaWcgMAo9PQovLyBMb2NrZXIgSUQgbWlzbWF0Y2gKYXNzZXJ0Cml0eG5fYmVnaW4KaW50Y18yIC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKZnJhbWVfZGlnIDEKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KZnJhbWVfZGlnIDIKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIHVwZGF0ZV9zbWkKdXBkYXRlc21pXzEwOgpwcm90byAyIDAKYnl0ZWNfMCAvLyAiIgpkdXAKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwpwdXNoYnl0ZXMgMHg2ZDYxNmU2MTY3NjU3MiAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXRfZXgKc3RvcmUgMTEKc3RvcmUgMTAKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwphcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCnN0b3JlIDEzCnN0b3JlIDEyCmJ5dGVjIDYgLy8gInNtaV9hcHByb3ZhbCIKYm94X2dldApzdG9yZSAxNQpzdG9yZSAxNApsb2FkIDE1CmFzc2VydApsb2FkIDE0CmZyYW1lX2J1cnkgMApieXRlYyA3IC8vICJzbWlfY2xlYXIiCmJveF9nZXQKc3RvcmUgMTcKc3RvcmUgMTYKbG9hZCAxNwphc3NlcnQKbG9hZCAxNgpmcmFtZV9idXJ5IDEKbG9hZCAxMgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwo9PQovLyBDcmVhdG9yIGFkZHJlc3MgbWlzbWF0Y2gKYXNzZXJ0CmxvYWQgMTAKZnJhbWVfZGlnIC0yCj09Ci8vIFNNSSBtYW5hZ2VyIGFkZHJlc3MgbWlzbWF0Y2gKYXNzZXJ0Cml0eG5fYmVnaW4KaW50Y18yIC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpwdXNoaW50IDQgLy8gVXBkYXRlQXBwbGljYXRpb24KaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKZnJhbWVfZGlnIDAKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KZnJhbWVfZGlnIDEKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIGdldF9zbWwKZ2V0c21sXzExOgpwcm90byAxIDEKaW50Y18wIC8vIDAKZHVwCmZyYW1lX2RpZyAtMQpib3hfbGVuCnN0b3JlIDE5CnN0b3JlIDE4CmxvYWQgMTkKYm56IGdldHNtbF8xMV9sMgppbnRjXzAgLy8gMApmcmFtZV9idXJ5IDAKYiBnZXRzbWxfMTFfbDMKZ2V0c21sXzExX2wyOgpmcmFtZV9kaWcgLTEKYm94X2dldApzdG9yZSAyMQpzdG9yZSAyMApsb2FkIDIxCmFzc2VydApsb2FkIDIwCmJ0b2kKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmZyYW1lX2J1cnkgMApnZXRzbWxfMTFfbDM6CnJldHN1YgoKLy8gY3JlYXRlX3NtbApjcmVhdGVzbWxfMTI6CnByb3RvIDIgMQppbnRjXzAgLy8gMApkdXAKdHhuIFNlbmRlcgpmcmFtZV9kaWcgLTIKPT0KLy8gTWFuYWdlciBhZGRyZXNzIG11c3QgbWF0Y2gKYXNzZXJ0CmZyYW1lX2RpZyAtMQpndHhucyBBbW91bnQKaW50Y18zIC8vIDEwMDAwMAo+PQovLyBGZWUgbXVzdCBiZSBhdCBsZWFzdCAwLjEgQWxnbwphc3NlcnQKZnJhbWVfZGlnIC0yCmJveF9sZW4Kc3RvcmUgMjMKc3RvcmUgMjIKbG9hZCAyMwpibnogY3JlYXRlc21sXzEyX2wyCmludGNfMyAvLyAxMDAwMDAKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgMQpjYWxsc3ViIGlubmVyY3JlYXRlc21sXzEKZnJhbWVfYnVyeSAwCmIgY3JlYXRlc21sXzEyX2wzCmNyZWF0ZXNtbF8xMl9sMjoKaW50Y18wIC8vIDAKcmV0dXJuCmNyZWF0ZXNtbF8xMl9sMzoKcmV0c3ViCgovLyBjcmVhdGVfc21pCmNyZWF0ZXNtaV8xMzoKcHJvdG8gMTIgMQppbnRjXzAgLy8gMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCmR1cApieXRlY18wIC8vICIiCmR1cAppbnRjXzAgLy8gMApkdXAKZnJhbWVfZGlnIC0yCmd0eG5zIFNlbmRlcgpmcmFtZV9kaWcgLTUKPT0KLy8gTWFuYWdlciBhZGRyZXNzIG11c3QgbWF0Y2ggZmVlIHR4biBzZW5kZXIKYXNzZXJ0CmJ5dGVjXzEgLy8gInNtYV9pZCIKYXBwX2dsb2JhbF9nZXQKcHVzaGJ5dGVzIDB4NjE2NDZkNjk2ZSAvLyAiYWRtaW4iCmFwcF9nbG9iYWxfZ2V0X2V4CnN0b3JlIDMyCnN0b3JlIDMxCmZyYW1lX2RpZyAtMwp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAic21hX2lkIgphcHBfZ2xvYmFsX2dldAo9PQovLyBQbGF0Zm9ybSBmZWUgdHhuIG1pc21hdGNoCmFzc2VydApmcmFtZV9kaWcgLTEKZ3R4bnMgQW1vdW50CmJ5dGVjXzEgLy8gInNtYV9pZCIKYXBwX2dsb2JhbF9nZXQKcHVzaGludCA1MDAgLy8gNTAwCmNhbGxzdWIgaW5uZXJ1c2Rpbm1pY3JvYWxnb18wCj09Ci8vIFBsYXRmb3JtIGZlZSB0eG4gbWlzbWF0Y2gKYXNzZXJ0CmZyYW1lX2RpZyAtMQpndHhucyBSZWNlaXZlcgpsb2FkIDMxCj09Ci8vIFBsYXRmb3JtIGZlZSB0eG4gbWlzbWF0Y2gKYXNzZXJ0CmZyYW1lX2RpZyAtNQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIC04CnR4bmFzIEFzc2V0cwpmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIC0zCnR4bmFzIEFwcGxpY2F0aW9ucwpmcmFtZV9idXJ5IDMKYnl0ZWMgNiAvLyAic21pX2FwcHJvdmFsIgpib3hfZ2V0CnN0b3JlIDM0CnN0b3JlIDMzCmxvYWQgMzQKYXNzZXJ0CmxvYWQgMzMKZnJhbWVfYnVyeSA0CmJ5dGVjIDcgLy8gInNtaV9jbGVhciIKYm94X2dldApzdG9yZSAzNgpzdG9yZSAzNQpsb2FkIDM2CmFzc2VydApsb2FkIDM1CmZyYW1lX2J1cnkgNQppdHhuX2JlZ2luCmludGNfMiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KaW50Y18wIC8vIE5vT3AKaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KZnJhbWVfZGlnIDQKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KZnJhbWVfZGlnIDUKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQppbnRjXzEgLy8gMQppdHhuX2ZpZWxkIEV4dHJhUHJvZ3JhbVBhZ2VzCnB1c2hpbnQgOCAvLyA4Cml0eG5fZmllbGQgR2xvYmFsTnVtVWludApwdXNoaW50IDQgLy8gNAppdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIExvY2FsTnVtVWludAppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIExvY2FsTnVtQnl0ZVNsaWNlCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCnB1c2hieXRlcyAweGE2NTkyYWY4IC8vIDB4YTY1OTJhZjgKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKZnJhbWVfZGlnIC0xMgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgMQppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTExCml0b2IKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKZnJhbWVfZGlnIC0xMAppdG9iCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAtOQppdG9iCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAyCml0b2IKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKZnJhbWVfZGlnIDMKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTcKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKZnJhbWVfZGlnIC02Cml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCml0eG5fc3VibWl0Cml0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKZnJhbWVfYnVyeSA2CmZyYW1lX2RpZyA2CmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgNgphcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCnN0b3JlIDM4CnN0b3JlIDM3Cml0eG5fYmVnaW4KZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKaXR4bl9maWVsZCBTZW5kZXIKaW50Y18xIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmxvYWQgMzcKaXR4bl9maWVsZCBSZWNlaXZlcgpsb2FkIDM3Cm1pbl9iYWxhbmNlCml0eG5fZmllbGQgQW1vdW50CmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CmZyYW1lX2RpZyAtNQpib3hfbGVuCnN0b3JlIDQwCnN0b3JlIDM5CmxvYWQgNDAKYm56IGNyZWF0ZXNtaV8xM19sMgppbnRjXzAgLy8gMApyZXR1cm4KY3JlYXRlc21pXzEzX2wyOgpmcmFtZV9kaWcgLTUKYm94X2dldApzdG9yZSA0MgpzdG9yZSA0MQpsb2FkIDQyCmFzc2VydApsb2FkIDQxCmJ0b2kKZnJhbWVfYnVyeSA3CmZyYW1lX2RpZyA3CmZyYW1lX2RpZyAtNAp0eG5hcyBBcHBsaWNhdGlvbnMKPT0KLy8gTG9ja2VyIElEIG1pc21hdGNoCmFzc2VydApmcmFtZV9kaWcgLTQKdHhuYXMgQXBwbGljYXRpb25zCmFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKc3RvcmUgNDQKc3RvcmUgNDMKZnJhbWVfZGlnIDIKaW50Y18wIC8vIDAKPgpibnogY3JlYXRlc21pXzEzX2w2CmludGNfMyAvLyAxMDAwMDAKc3RvcmUgMzAKY3JlYXRlc21pXzEzX2w0OgppdHhuX2JlZ2luCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgU2VuZGVyCmludGNfMSAvLyBwYXkKaXR4bl9maWVsZCBUeXBlRW51bQpsb2FkIDQzCml0eG5fZmllbGQgUmVjZWl2ZXIKbG9hZCAzMAppdHhuX2ZpZWxkIEFtb3VudAppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdAppdHhuX2JlZ2luCmludGNfMiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC00CnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKZnJhbWVfZGlnIDYKaXR4bl9maWVsZCBBcHBsaWNhdGlvbnMKYnl0ZWMgOCAvLyAib3B0X2luX3NtaShhcHBsaWNhdGlvbil2b2lkIgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpieXRlY18yIC8vIDB4MDEKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKaXR4bl9zdWJtaXQKZnJhbWVfZGlnIC04CnR4bmFzIEFzc2V0cwppbnRjXzAgLy8gMAohPQpieiBjcmVhdGVzbWlfMTNfbDcKaXR4bl9iZWdpbgppbnRjXzIgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtNAp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmZyYW1lX2RpZyAtOAp0eG5hcyBBc3NldHMKaXR4bl9maWVsZCBBc3NldHMKYnl0ZWMgOSAvLyAib3B0X2luX2NvaW4oYXNzZXQpdm9pZCIKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKYnl0ZWMgMTAgLy8gMHgwMAppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwppdHhuX3N1Ym1pdApiIGNyZWF0ZXNtaV8xM19sNwpjcmVhdGVzbWlfMTNfbDY6CmludGMgNSAvLyAyMDAwMDAKc3RvcmUgMzAKYiBjcmVhdGVzbWlfMTNfbDQKY3JlYXRlc21pXzEzX2w3OgpyZXRzdWIKCi8vIHRyYW5zZmVyX3NtaQp0cmFuc2ZlcnNtaV8xNDoKcHJvdG8gNCAwCmludGNfMCAvLyAwCmR1cG4gNApmcmFtZV9kaWcgLTEKZ3R4bnMgU2VuZGVyCnR4biBTZW5kZXIKPT0KLy8gU2VuZGVyIG1pc21hdGNoCmFzc2VydAp0eG4gU2VuZGVyCmJveF9nZXQKc3RvcmUgNDcKc3RvcmUgNDYKbG9hZCA0Nwphc3NlcnQKbG9hZCA0NgpidG9pCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMApmcmFtZV9kaWcgLTMKdHhuYXMgQXBwbGljYXRpb25zCj09Ci8vIE9sZCBsb2NrZXIgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCBzdG9yZWQgcmVmZXJlbmNlCmFzc2VydApmcmFtZV9kaWcgLTQKdHhuYXMgQXBwbGljYXRpb25zCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpwdXNoYnl0ZXMgMHg2MzZmNjk2ZTVmNjk2NCAvLyAiY29pbl9pZCIKYXBwX2dsb2JhbF9nZXRfZXgKc3RvcmUgNDkKc3RvcmUgNDgKbG9hZCA0OAppbnRjXzAgLy8gMAo+CmJueiB0cmFuc2ZlcnNtaV8xNF9sNwppbnRjIDUgLy8gMjAwMDAwCnRyYW5zZmVyc21pXzE0X2wyOgpmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIC0yCmJveF9sZW4Kc3RvcmUgNTEKc3RvcmUgNTAKbG9hZCA1MQpibnogdHJhbnNmZXJzbWlfMTRfbDYKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAyCmNhbGxzdWIgaW5uZXJjcmVhdGVzbWxfMQpzdG9yZSA0NQp0cmFuc2ZlcnNtaV8xNF9sNDoKbG9hZCA0NQpmcmFtZV9idXJ5IDQKaXR4bl9iZWdpbgppbnRjXzIgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAwCml0eG5fZmllbGQgQXBwbGljYXRpb25JRApmcmFtZV9kaWcgLTQKdHhuYXMgQXBwbGljYXRpb25zCml0eG5fZmllbGQgQXBwbGljYXRpb25zCmJ5dGVjIDExIC8vICJvcHRfb3V0X3NtaShhcHBsaWNhdGlvbil2b2lkIgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpieXRlY18yIC8vIDB4MDEKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKaXR4bl9zdWJtaXQKaXR4bl9iZWdpbgppbnRjXzIgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtNAp0eG5hcyBBcHBsaWNhdGlvbnMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECnB1c2hieXRlcyAweGM4NmZkYjAxIC8vICJ1cGRhdGVfbWFuYWdlcihhZGRyZXNzKXZvaWQiCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwppdHhuX3N1Ym1pdAppdHhuX2JlZ2luCmludGNfMiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIDQKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmZyYW1lX2RpZyAxCml0eG5fZmllbGQgQXBwbGljYXRpb25zCmJ5dGVjIDggLy8gIm9wdF9pbl9zbWkoYXBwbGljYXRpb24pdm9pZCIKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKYnl0ZWNfMiAvLyAweDAxCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCml0eG5fc3VibWl0CmxvYWQgNDgKaW50Y18wIC8vIDAKIT0KYnogdHJhbnNmZXJzbWlfMTRfbDgKaXR4bl9iZWdpbgppbnRjXzIgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyA0Cml0eG5fZmllbGQgQXBwbGljYXRpb25JRApsb2FkIDQ4Cml0eG5fZmllbGQgQXNzZXRzCmJ5dGVjIDkgLy8gIm9wdF9pbl9jb2luKGFzc2V0KXZvaWQiCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmJ5dGVjIDEwIC8vIDB4MDAKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKaXR4bl9zdWJtaXQKYiB0cmFuc2ZlcnNtaV8xNF9sOAp0cmFuc2ZlcnNtaV8xNF9sNjoKZnJhbWVfZGlnIC0yCmJveF9nZXQKc3RvcmUgNTQKc3RvcmUgNTIKbG9hZCA1NAphc3NlcnQKbG9hZCA1MgpidG9pCmZyYW1lX2J1cnkgMwpmcmFtZV9kaWcgMwpzdG9yZSA0NQpiIHRyYW5zZmVyc21pXzE0X2w0CnRyYW5zZmVyc21pXzE0X2w3OgpwdXNoaW50IDMwMDAwMCAvLyAzMDAwMDAKYiB0cmFuc2ZlcnNtaV8xNF9sMgp0cmFuc2ZlcnNtaV8xNF9sODoKcmV0c3ViCgovLyBkZWxldGVfc21pCmRlbGV0ZXNtaV8xNToKcHJvdG8gMiAwCmludGNfMCAvLyAwCnR4biBTZW5kZXIKYm94X2xlbgpzdG9yZSA1OApzdG9yZSA1NQpsb2FkIDU4Ci8vIFNlbmRlcidzIGxvY2tlciBub3QgZm91bmQKYXNzZXJ0CnR4biBTZW5kZXIKYm94X2dldApzdG9yZSA2MQpzdG9yZSA1OQpsb2FkIDYxCmFzc2VydApsb2FkIDU5CmJ0b2kKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKPT0KLy8gTG9ja2VyIElEIG1pc21hdGNoCmFzc2VydAppdHhuX2JlZ2luCmludGNfMiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9ucwpieXRlYyAxMSAvLyAib3B0X291dF9zbWkoYXBwbGljYXRpb24pdm9pZCIKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKYnl0ZWNfMiAvLyAweDAxCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCml0eG5fc3VibWl0Cml0eG5fYmVnaW4KaW50Y18yIC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCml0eG5fZmllbGQgQXBwbGljYXRpb25JRApwdXNoYnl0ZXMgMHgyNDM3OGQzYyAvLyAiZGVsZXRlKCl2b2lkIgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KaXR4bl9zdWJtaXQKcmV0c3ViCgovLyBjcmVhdGVfY2FzdGVyCmNyZWF0ZWNhc3Rlcl8xNjoKcHJvdG8gMCAwCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKY2FsbHN1YiBjcmVhdGVfMwpyZXRzdWIKCi8vIGdldF92ZXJzaW9uX2Nhc3RlcgpnZXR2ZXJzaW9uY2FzdGVyXzE3Ogpwcm90byAwIDAKYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGdldHZlcnNpb25fNQpmcmFtZV9idXJ5IDAKYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCmNvbmNhdApsb2cKcmV0c3ViCgovLyB1cGRhdGVfc21sX3ByZWNvbXBpbGVfY2FzdGVyCnVwZGF0ZXNtbHByZWNvbXBpbGVjYXN0ZXJfMTg6CnByb3RvIDAgMApieXRlY18wIC8vICIiCmR1cAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMApmcmFtZV9kaWcgMQpjYWxsc3ViIHVwZGF0ZXNtbHByZWNvbXBpbGVfNgpyZXRzdWIKCi8vIHVwZGF0ZV9zbWlfcHJlY29tcGlsZV9jYXN0ZXIKdXBkYXRlc21pcHJlY29tcGlsZWNhc3Rlcl8xOToKcHJvdG8gMCAwCmJ5dGVjXzAgLy8gIiIKZHVwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAwCmZyYW1lX2RpZyAxCmNhbGxzdWIgdXBkYXRlc21pcHJlY29tcGlsZV83CnJldHN1YgoKLy8gYXBwZW5kX2V4dHJhX2FwcHJvdmFsX2NodW5rX2Nhc3RlcgphcHBlbmRleHRyYWFwcHJvdmFsY2h1bmtjYXN0ZXJfMjA6CnByb3RvIDAgMApieXRlY18wIC8vICIiCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmNhbGxzdWIgYXBwZW5kZXh0cmFhcHByb3ZhbGNodW5rXzgKcmV0c3ViCgovLyB1cGRhdGVfc21sX2Nhc3Rlcgp1cGRhdGVzbWxjYXN0ZXJfMjE6CnByb3RvIDAgMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIDEKY2FsbHN1YiB1cGRhdGVzbWxfOQpyZXRzdWIKCi8vIHVwZGF0ZV9zbWlfY2FzdGVyCnVwZGF0ZXNtaWNhc3Rlcl8yMjoKcHJvdG8gMCAwCmJ5dGVjXzAgLy8gIiIKaW50Y18wIC8vIDAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpmcmFtZV9idXJ5IDAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMApmcmFtZV9kaWcgMQpjYWxsc3ViIHVwZGF0ZXNtaV8xMApyZXRzdWIKCi8vIGdldF9zbWxfY2FzdGVyCmdldHNtbGNhc3Rlcl8yMzoKcHJvdG8gMCAwCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIiIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKY2FsbHN1YiBnZXRzbWxfMTEKZnJhbWVfYnVyeSAwCmJ5dGVjXzMgLy8gMHgxNTFmN2M3NQpmcmFtZV9kaWcgMAppdG9iCmNvbmNhdApsb2cKcmV0c3ViCgovLyBjcmVhdGVfc21sX2Nhc3RlcgpjcmVhdGVzbWxjYXN0ZXJfMjQ6CnByb3RvIDAgMAppbnRjXzAgLy8gMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAxCnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAyCmd0eG5zIFR5cGVFbnVtCmludGNfMSAvLyBwYXkKPT0KYXNzZXJ0CmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmNhbGxzdWIgY3JlYXRlc21sXzEyCmZyYW1lX2J1cnkgMApieXRlY18zIC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKaXRvYgpjb25jYXQKbG9nCnJldHN1YgoKLy8gY3JlYXRlX3NtaV9jYXN0ZXIKY3JlYXRlc21pY2FzdGVyXzI1Ogpwcm90byAwIDAKaW50Y18wIC8vIDAKYnl0ZWNfMCAvLyAiIgppbnRjXzAgLy8gMApkdXBuIDMKYnl0ZWNfMCAvLyAiIgpkdXBuIDIKaW50Y18wIC8vIDAKZHVwbiAzCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKZnJhbWVfYnVyeSAxCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKYnRvaQpmcmFtZV9idXJ5IDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwpidG9pCmZyYW1lX2J1cnkgMwp0eG5hIEFwcGxpY2F0aW9uQXJncyA0CmJ0b2kKZnJhbWVfYnVyeSA0CnR4bmEgQXBwbGljYXRpb25BcmdzIDUKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgpmcmFtZV9idXJ5IDYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwpmcmFtZV9idXJ5IDcKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOApmcmFtZV9idXJ5IDgKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOQppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgOQp0eG5hIEFwcGxpY2F0aW9uQXJncyAxMAppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMTAKdHhuIEdyb3VwSW5kZXgKcHVzaGludCAyIC8vIDIKLQpmcmFtZV9idXJ5IDExCmZyYW1lX2RpZyAxMQpndHhucyBUeXBlRW51bQppbnRjXzEgLy8gcGF5Cj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmZyYW1lX2J1cnkgMTIKZnJhbWVfZGlnIDEyCmd0eG5zIFR5cGVFbnVtCmludGNfMSAvLyBwYXkKPT0KYXNzZXJ0CmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmZyYW1lX2RpZyAzCmZyYW1lX2RpZyA0CmZyYW1lX2RpZyA1CmZyYW1lX2RpZyA2CmZyYW1lX2RpZyA3CmZyYW1lX2RpZyA4CmZyYW1lX2RpZyA5CmZyYW1lX2RpZyAxMApmcmFtZV9kaWcgMTEKZnJhbWVfZGlnIDEyCmNhbGxzdWIgY3JlYXRlc21pXzEzCmZyYW1lX2J1cnkgMApieXRlY18zIC8vIDB4MTUxZjdjNzUKZnJhbWVfZGlnIDAKaXRvYgpjb25jYXQKbG9nCnJldHN1YgoKLy8gdHJhbnNmZXJfc21pX2Nhc3Rlcgp0cmFuc2ZlcnNtaWNhc3Rlcl8yNjoKcHJvdG8gMCAwCmludGNfMCAvLyAwCmR1cApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmZyYW1lX2J1cnkgMgp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmZyYW1lX2J1cnkgMwpmcmFtZV9kaWcgMwpndHhucyBUeXBlRW51bQppbnRjXzEgLy8gcGF5Cj09CmFzc2VydApmcmFtZV9kaWcgMApmcmFtZV9kaWcgMQpmcmFtZV9kaWcgMgpmcmFtZV9kaWcgMwpjYWxsc3ViIHRyYW5zZmVyc21pXzE0CnJldHN1YgoKLy8gZGVsZXRlX3NtaV9jYXN0ZXIKZGVsZXRlc21pY2FzdGVyXzI3Ogpwcm90byAwIDAKaW50Y18wIC8vIDAKZHVwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMApmcmFtZV9kaWcgMQpjYWxsc3ViIGRlbGV0ZXNtaV8xNQpyZXRzdWI=", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu" - }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 1 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } - }, - "schema": { - "global": { - "declared": { - "sma_id": { - "type": "uint64", - "key": "sma_id", - "descr": "ID of Subtopia Price Oracle contract" - } - }, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } - }, - "contract": { - "name": "SMR", - "methods": [ - { - "name": "create", - "args": [ - { - "type": "uint64", - "name": "sma_id" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "get_version", - "args": [], - "returns": { - "type": "string" - } - }, - { - "name": "update_sml_precompile", - "args": [ - { - "type": "byte[]", - "name": "approval" - }, - { - "type": "byte[]", - "name": "clear" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "update_smi_precompile", - "args": [ - { - "type": "byte[]", - "name": "approval" - }, - { - "type": "byte[]", - "name": "clear" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "append_extra_approval_chunk", - "args": [ - { - "type": "byte[]", - "name": "approval" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "update_sml", - "args": [ - { - "type": "address", - "name": "manager" - }, - { - "type": "application", - "name": "locker" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "update_smi", - "args": [ - { - "type": "address", - "name": "manager" - }, - { - "type": "application", - "name": "smi" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "get_sml", - "args": [ - { - "type": "address", - "name": "manager" - } - ], - "returns": { - "type": "uint64" - } - }, - { - "name": "create_sml", - "args": [ - { - "type": "address", - "name": "manager" - }, - { - "type": "pay", - "name": "fee_txn" - } - ], - "returns": { - "type": "uint64" - } - }, - { - "name": "create_smi", - "args": [ - { - "type": "string", - "name": "name" - }, - { - "type": "uint64", - "name": "sub_type" - }, - { - "type": "uint64", - "name": "price" - }, - { - "type": "uint64", - "name": "max_subs" - }, - { - "type": "asset", - "name": "coin" - }, - { - "type": "string", - "name": "unit_name" - }, - { - "type": "string", - "name": "image_url" - }, - { - "type": "address", - "name": "manager" - }, - { - "type": "application", - "name": "locker" - }, - { - "type": "application", - "name": "sma" - }, - { - "type": "pay", - "name": "fee_txn" - }, - { - "type": "pay", - "name": "platform_fee_txn" - } - ], - "returns": { - "type": "uint64" - } - }, - { - "name": "transfer_smi", - "args": [ - { - "type": "application", - "name": "smi" - }, - { - "type": "application", - "name": "old_locker" - }, - { - "type": "address", - "name": "new_manager" - }, - { - "type": "pay", - "name": "transfer_fee_txn" - } - ], - "returns": { - "type": "void" - } - }, - { - "name": "delete_smi", - "args": [ - { - "type": "application", - "name": "smi" - }, - { - "type": "application", - "name": "locker" - } - ], - "returns": { - "type": "void" - } - } - ], - "networks": {} - }, - "bare_call_config": { - "update_application": "CALL" - } -} - -/** - * Defines an onCompletionAction of 'no_op' - */ -export type OnCompleteNoOp = { onCompleteAction?: 'no_op' | OnApplicationComplete.NoOpOC } -/** - * Defines an onCompletionAction of 'opt_in' - */ -export type OnCompleteOptIn = { onCompleteAction: 'opt_in' | OnApplicationComplete.OptInOC } -/** - * Defines an onCompletionAction of 'close_out' - */ -export type OnCompleteCloseOut = { onCompleteAction: 'close_out' | OnApplicationComplete.CloseOutOC } -/** - * Defines an onCompletionAction of 'delete_application' - */ -export type OnCompleteDelApp = { onCompleteAction: 'delete_application' | OnApplicationComplete.DeleteApplicationOC } -/** - * Defines an onCompletionAction of 'update_application' - */ -export type OnCompleteUpdApp = { onCompleteAction: 'update_application' | OnApplicationComplete.UpdateApplicationOC } -/** - * A state record containing a single unsigned integer - */ -export type IntegerState = { - /** - * Gets the state value as a BigInt - */ - asBigInt(): bigint - /** - * Gets the state value as a number. - */ - asNumber(): number -} -/** - * A state record containing binary data - */ -export type BinaryState = { - /** - * Gets the state value as a Uint8Array - */ - asByteArray(): Uint8Array - /** - * Gets the state value as a string - */ - asString(): string -} - -/** - * Defines the types of available calls and state of the Smr smart contract. - */ -export type Smr = { - /** - * Maps method signatures / names to their argument and return types. - */ - methods: - & Record<'create(uint64)void' | 'create', { - argsObj: { - sma_id: bigint | number - } - argsTuple: [sma_id: bigint | number] - returns: void - }> - & Record<'get_version()string' | 'get_version', { - argsObj: { - } - argsTuple: [] - returns: string - }> - & Record<'update_sml_precompile(byte[],byte[])void' | 'update_sml_precompile', { - argsObj: { - approval: Uint8Array - clear: Uint8Array - } - argsTuple: [approval: Uint8Array, clear: Uint8Array] - returns: void - }> - & Record<'update_smi_precompile(byte[],byte[])void' | 'update_smi_precompile', { - argsObj: { - approval: Uint8Array - clear: Uint8Array - } - argsTuple: [approval: Uint8Array, clear: Uint8Array] - returns: void - }> - & Record<'append_extra_approval_chunk(byte[])void' | 'append_extra_approval_chunk', { - argsObj: { - approval: Uint8Array - } - argsTuple: [approval: Uint8Array] - returns: void - }> - & Record<'update_sml(address,application)void' | 'update_sml', { - argsObj: { - manager: string - locker: number | bigint - } - argsTuple: [manager: string, locker: number | bigint] - returns: void - }> - & Record<'update_smi(address,application)void' | 'update_smi', { - argsObj: { - manager: string - smi: number | bigint - } - argsTuple: [manager: string, smi: number | bigint] - returns: void - }> - & Record<'get_sml(address)uint64' | 'get_sml', { - argsObj: { - manager: string - } - argsTuple: [manager: string] - returns: bigint - }> - & Record<'create_sml(address,pay)uint64' | 'create_sml', { - argsObj: { - manager: string - fee_txn: TransactionToSign | Transaction | Promise - } - argsTuple: [manager: string, fee_txn: TransactionToSign | Transaction | Promise] - returns: bigint - }> - & Record<'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64' | 'create_smi', { - argsObj: { - name: string - sub_type: bigint | number - price: bigint | number - max_subs: bigint | number - coin: number | bigint - unit_name: string - image_url: string - manager: string - locker: number | bigint - sma: number | bigint - fee_txn: TransactionToSign | Transaction | Promise - platform_fee_txn: TransactionToSign | Transaction | Promise - } - argsTuple: [name: string, sub_type: bigint | number, price: bigint | number, max_subs: bigint | number, coin: number | bigint, unit_name: string, image_url: string, manager: string, locker: number | bigint, sma: number | bigint, fee_txn: TransactionToSign | Transaction | Promise, platform_fee_txn: TransactionToSign | Transaction | Promise] - returns: bigint - }> - & Record<'transfer_smi(application,application,address,pay)void' | 'transfer_smi', { - argsObj: { - smi: number | bigint - old_locker: number | bigint - new_manager: string - transfer_fee_txn: TransactionToSign | Transaction | Promise - } - argsTuple: [smi: number | bigint, old_locker: number | bigint, new_manager: string, transfer_fee_txn: TransactionToSign | Transaction | Promise] - returns: void - }> - & Record<'delete_smi(application,application)void' | 'delete_smi', { - argsObj: { - smi: number | bigint - locker: number | bigint - } - argsTuple: [smi: number | bigint, locker: number | bigint] - returns: void - }> - /** - * Defines the shape of the global and local state of the application. - */ - state: { - global: { - /** - * ID of Subtopia Price Oracle contract - */ - 'sma_id'?: IntegerState - } - } -} -/** - * Defines the possible abi call signatures - */ -export type SmrSig = keyof Smr['methods'] -/** - * Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a bare call is made - */ -export type TypedCallParams = { - method: TSignature - methodArgs: TSignature extends undefined ? undefined : Array -} & AppClientCallCoreParams & CoreAppCallArgs -/** - * Defines the arguments required for a bare call - */ -export type BareCallArgs = Omit -/** - * Maps a method signature from the Smr smart contract to the method's arguments in either tuple of struct form - */ -export type MethodArgs = Smr['methods'][TSignature]['argsObj' | 'argsTuple'] -/** - * Maps a method signature from the Smr smart contract to the method's return type - */ -export type MethodReturn = Smr['methods'][TSignature]['returns'] - -/** - * A factory for available 'create' calls - */ -export type SmrCreateCalls = (typeof SmrCallFactory)['create'] -/** - * Defines supported create methods for this smart contract - */ -export type SmrCreateCallParams = - | (TypedCallParams<'create(uint64)void'> & (OnCompleteNoOp)) -/** - * A factory for available 'update' calls - */ -export type SmrUpdateCalls = (typeof SmrCallFactory)['update'] -/** - * Defines supported update methods for this smart contract - */ -export type SmrUpdateCallParams = - | TypedCallParams -/** - * Defines arguments required for the deploy method. - */ -export type SmrDeployArgs = { - deployTimeParams?: TealTemplateParams - /** - * A delegate which takes a create call factory and returns the create call params for this smart contract - */ - createCall?: (callFactory: SmrCreateCalls) => SmrCreateCallParams - /** - * A delegate which takes a update call factory and returns the update call params for this smart contract - */ - updateCall?: (callFactory: SmrUpdateCalls) => SmrUpdateCallParams -} - - -/** - * Exposes methods for constructing all available smart contract calls - */ -export abstract class SmrCallFactory { - /** - * Gets available create call factories - */ - static get create() { - return { - /** - * Constructs a create call for the SMR smart contract using the create(uint64)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - create(args: MethodArgs<'create(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams & (OnCompleteNoOp) = {}) { - return { - method: 'create(uint64)void' as const, - methodArgs: Array.isArray(args) ? args : [args.sma_id], - ...params, - } - }, - } - } - - /** - * Gets available update call factories - */ - static get update() { - return { - /** - * Constructs an update call for the SMR smart contract using a bare call - * - * @param params Any parameters for the call - * @returns A TypedCallParams object for the call - */ - bare(params: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams = {}) { - return { - method: undefined, - methodArgs: undefined, - ...params, - } - }, - } - } - - /** - * Constructs a no op call for the get_version()string ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'get_version()string' as const, - methodArgs: Array.isArray(args) ? args : [], - ...params, - } - } - /** - * Constructs a no op call for the update_sml_precompile(byte[],byte[])void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static updateSmlPrecompile(args: MethodArgs<'update_sml_precompile(byte[],byte[])void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'update_sml_precompile(byte[],byte[])void' as const, - methodArgs: Array.isArray(args) ? args : [args.approval, args.clear], - ...params, - } - } - /** - * Constructs a no op call for the update_smi_precompile(byte[],byte[])void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static updateSmiPrecompile(args: MethodArgs<'update_smi_precompile(byte[],byte[])void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'update_smi_precompile(byte[],byte[])void' as const, - methodArgs: Array.isArray(args) ? args : [args.approval, args.clear], - ...params, - } - } - /** - * Constructs a no op call for the append_extra_approval_chunk(byte[])void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static appendExtraApprovalChunk(args: MethodArgs<'append_extra_approval_chunk(byte[])void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'append_extra_approval_chunk(byte[])void' as const, - methodArgs: Array.isArray(args) ? args : [args.approval], - ...params, - } - } - /** - * Constructs a no op call for the update_sml(address,application)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static updateSml(args: MethodArgs<'update_sml(address,application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'update_sml(address,application)void' as const, - methodArgs: Array.isArray(args) ? args : [args.manager, args.locker], - ...params, - } - } - /** - * Constructs a no op call for the update_smi(address,application)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static updateSmi(args: MethodArgs<'update_smi(address,application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'update_smi(address,application)void' as const, - methodArgs: Array.isArray(args) ? args : [args.manager, args.smi], - ...params, - } - } - /** - * Constructs a no op call for the get_sml(address)uint64 ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static getSml(args: MethodArgs<'get_sml(address)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'get_sml(address)uint64' as const, - methodArgs: Array.isArray(args) ? args : [args.manager], - ...params, - } - } - /** - * Constructs a no op call for the create_sml(address,pay)uint64 ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static createSml(args: MethodArgs<'create_sml(address,pay)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'create_sml(address,pay)uint64' as const, - methodArgs: Array.isArray(args) ? args : [args.manager, args.fee_txn], - ...params, - } - } - /** - * Constructs a no op call for the create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64 ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static createSmi(args: MethodArgs<'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64' as const, - methodArgs: Array.isArray(args) ? args : [args.name, args.sub_type, args.price, args.max_subs, args.coin, args.unit_name, args.image_url, args.manager, args.locker, args.sma, args.fee_txn, args.platform_fee_txn], - ...params, - } - } - /** - * Constructs a no op call for the transfer_smi(application,application,address,pay)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static transferSmi(args: MethodArgs<'transfer_smi(application,application,address,pay)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'transfer_smi(application,application,address,pay)void' as const, - methodArgs: Array.isArray(args) ? args : [args.smi, args.old_locker, args.new_manager, args.transfer_fee_txn], - ...params, - } - } - /** - * Constructs a no op call for the delete_smi(application,application)void ABI method - * - * @param args Any args for the contract call - * @param params Any additional parameters for the call - * @returns A TypedCallParams object for the call - */ - static deleteSmi(args: MethodArgs<'delete_smi(application,application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { - return { - method: 'delete_smi(application,application)void' as const, - methodArgs: Array.isArray(args) ? args : [args.smi, args.locker], - ...params, - } - } -} - -/** - * A client to make calls to the SMR smart contract - */ -export class SmrClient { - /** - * The underlying `ApplicationClient` for when you want to have more flexibility - */ - public readonly appClient: ApplicationClient - - private readonly sender: SendTransactionFrom | undefined - - /** - * Creates a new instance of `SmrClient` - * - * @param appDetails appDetails The details to identify the app to deploy - * @param algod An algod client instance - */ - constructor(appDetails: AppDetails, private algod: Algodv2) { - this.sender = appDetails.sender - this.appClient = algokit.getAppClient({ - ...appDetails, - app: APP_SPEC - }, algod) - } - - /** - * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type - * - * @param result The AppCallTransactionResult to be mapped - * @param returnValueFormatter An optional delegate to format the return value if required - * @returns The smart contract response with an updated return value - */ - protected mapReturnValue(result: AppCallTransactionResult, returnValueFormatter?: (value: any) => TReturn): AppCallTransactionResultOfType { - if(result.return?.decodeError) { - throw result.return.decodeError - } - const returnValue = result.return?.returnValue !== undefined && returnValueFormatter !== undefined - ? returnValueFormatter(result.return.returnValue) - : result.return?.returnValue as TReturn | undefined - return { ...result, return: returnValue } - } - - /** - * Calls the ABI method with the matching signature using an onCompletion code of NO_OP - * - * @param typedCallParams An object containing the method signature, args, and any other relevant parameters - * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type - * @returns The result of the smart contract call - */ - public async call(typedCallParams: TypedCallParams, returnValueFormatter?: (value: any) => MethodReturn) { - return this.mapReturnValue>(await this.appClient.call(typedCallParams), returnValueFormatter) - } - - /** - * Idempotently deploys the SMR smart contract. - * - * @param params The arguments for the contract calls and any additional parameters for the call - * @returns The deployment result - */ - public deploy(params: SmrDeployArgs & AppClientDeployCoreParams = {}): ReturnType { - const createArgs = params.createCall?.(SmrCallFactory.create) - const updateArgs = params.updateCall?.(SmrCallFactory.update) - return this.appClient.deploy({ - ...params, - updateArgs, - createArgs, - createOnCompleteAction: createArgs?.onCompleteAction, - }) - } - - /** - * Gets available create methods - */ - public get create() { - const $this = this - return { - /** - * Creates a new instance of the SMR smart contract using the create(uint64)void ABI method. - * - * @param args The arguments for the smart contract call - * @param params Any additional parameters for the call - * @returns The create result - */ - async create(args: MethodArgs<'create(uint64)void'>, params: AppClientCallCoreParams & AppClientCompilationParams & (OnCompleteNoOp) = {}): Promise>> { - return $this.mapReturnValue(await $this.appClient.create(SmrCallFactory.create.create(args, params))) - }, - } - } - - /** - * Gets available update methods - */ - public get update() { - const $this = this - return { - /** - * Updates an existing instance of the SMR smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The update result - */ - bare(args: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs = {}): Promise> { - return $this.appClient.update(args) as unknown as Promise> - }, - } - } - - /** - * Makes a clear_state call to an existing instance of the SMR smart contract. - * - * @param args The arguments for the bare call - * @returns The clear_state result - */ - public clearState(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.appClient.clearState(args) - } - - /** - * Calls the get_version()string ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public getVersion(args: MethodArgs<'get_version()string'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmrCallFactory.getVersion(args, params)) - } - - /** - * Calls the update_sml_precompile(byte[],byte[])void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public updateSmlPrecompile(args: MethodArgs<'update_sml_precompile(byte[],byte[])void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmrCallFactory.updateSmlPrecompile(args, params)) - } - - /** - * Calls the update_smi_precompile(byte[],byte[])void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public updateSmiPrecompile(args: MethodArgs<'update_smi_precompile(byte[],byte[])void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmrCallFactory.updateSmiPrecompile(args, params)) - } - - /** - * Calls the append_extra_approval_chunk(byte[])void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public appendExtraApprovalChunk(args: MethodArgs<'append_extra_approval_chunk(byte[])void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmrCallFactory.appendExtraApprovalChunk(args, params)) - } - - /** - * Calls the update_sml(address,application)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public updateSml(args: MethodArgs<'update_sml(address,application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmrCallFactory.updateSml(args, params)) - } - - /** - * Calls the update_smi(address,application)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public updateSmi(args: MethodArgs<'update_smi(address,application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmrCallFactory.updateSmi(args, params)) - } - - /** - * Calls the get_sml(address)uint64 ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public getSml(args: MethodArgs<'get_sml(address)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmrCallFactory.getSml(args, params)) - } - - /** - * Calls the create_sml(address,pay)uint64 ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public createSml(args: MethodArgs<'create_sml(address,pay)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmrCallFactory.createSml(args, params)) - } - - /** - * Calls the create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64 ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public createSmi(args: MethodArgs<'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmrCallFactory.createSmi(args, params)) - } - - /** - * Calls the transfer_smi(application,application,address,pay)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public transferSmi(args: MethodArgs<'transfer_smi(application,application,address,pay)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmrCallFactory.transferSmi(args, params)) - } - - /** - * Calls the delete_smi(application,application)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The result of the call - */ - public deleteSmi(args: MethodArgs<'delete_smi(application,application)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { - return this.call(SmrCallFactory.deleteSmi(args, params)) - } - - /** - * Extracts a binary state value out of an AppState dictionary - * - * @param state The state dictionary containing the state value - * @param key The key of the state value - * @returns A BinaryState instance containing the state value, or undefined if the key was not found - */ - private static getBinaryState(state: AppState, key: string): BinaryState | undefined { - const value = state[key] - if (!value) return undefined - if (!('valueRaw' in value)) - throw new Error(`Failed to parse state value for ${key}; received an int when expected a byte array`) - return { - asString(): string { - return value.value - }, - asByteArray(): Uint8Array { - return value.valueRaw - } - } - } - - /** - * Extracts a integer state value out of an AppState dictionary - * - * @param state The state dictionary containing the state value - * @param key The key of the state value - * @returns An IntegerState instance containing the state value, or undefined if the key was not found - */ - private static getIntegerState(state: AppState, key: string): IntegerState | undefined { - const value = state[key] - if (!value) return undefined - if ('valueRaw' in value) - throw new Error(`Failed to parse state value for ${key}; received a byte array when expected a number`) - return { - asBigInt() { - return typeof value.value === 'bigint' ? value.value : BigInt(value.value) - }, - asNumber(): number { - return typeof value.value === 'bigint' ? Number(value.value) : value.value - }, - } - } - - /** - * Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value - */ - public async getGlobalState(): Promise { - const state = await this.appClient.getGlobalState() - return { - get sma_id() { - return SmrClient.getIntegerState(state, 'sma_id') - }, - } - } - - public compose(): SmrComposer { - const client = this - const atc = new AtomicTransactionComposer() - let promiseChain:Promise = Promise.resolve() - const resultMappers: Array any)> = [] - return { - getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.getVersion(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - updateSmlPrecompile(args: MethodArgs<'update_sml_precompile(byte[],byte[])void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.updateSmlPrecompile(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - updateSmiPrecompile(args: MethodArgs<'update_smi_precompile(byte[],byte[])void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.updateSmiPrecompile(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - appendExtraApprovalChunk(args: MethodArgs<'append_extra_approval_chunk(byte[])void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.appendExtraApprovalChunk(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - updateSml(args: MethodArgs<'update_sml(address,application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.updateSml(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - updateSmi(args: MethodArgs<'update_smi(address,application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.updateSmi(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - getSml(args: MethodArgs<'get_sml(address)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.getSml(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - createSml(args: MethodArgs<'create_sml(address,pay)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.createSml(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - createSmi(args: MethodArgs<'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.createSmi(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - transferSmi(args: MethodArgs<'transfer_smi(application,application,address,pay)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.transferSmi(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - deleteSmi(args: MethodArgs<'delete_smi(application,application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.deleteSmi(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - get update() { - const $this = this - return { - bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.update.bare({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return $this - }, - } - }, - clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs) { - promiseChain = promiseChain.then(() => client.clearState({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) - resultMappers.push(undefined) - return this - }, - addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom) { - promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit.getTransactionWithSigner(txn, defaultSender ?? client.sender))) - return this - }, - async atc() { - await promiseChain - return atc - }, - async execute() { - await promiseChain - const result = await algokit.sendAtomicTransactionComposer({ atc, sendParams: {} }, client.algod) - return { - ...result, - returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue) - } - } - } as unknown as SmrComposer - } -} -export type SmrComposer = { - /** - * Calls the get_version()string ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - getVersion(args: MethodArgs<'get_version()string'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'get_version()string'>]> - - /** - * Calls the update_sml_precompile(byte[],byte[])void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - updateSmlPrecompile(args: MethodArgs<'update_sml_precompile(byte[],byte[])void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'update_sml_precompile(byte[],byte[])void'>]> - - /** - * Calls the update_smi_precompile(byte[],byte[])void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - updateSmiPrecompile(args: MethodArgs<'update_smi_precompile(byte[],byte[])void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'update_smi_precompile(byte[],byte[])void'>]> - - /** - * Calls the append_extra_approval_chunk(byte[])void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - appendExtraApprovalChunk(args: MethodArgs<'append_extra_approval_chunk(byte[])void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'append_extra_approval_chunk(byte[])void'>]> - - /** - * Calls the update_sml(address,application)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - updateSml(args: MethodArgs<'update_sml(address,application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'update_sml(address,application)void'>]> - - /** - * Calls the update_smi(address,application)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - updateSmi(args: MethodArgs<'update_smi(address,application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'update_smi(address,application)void'>]> - - /** - * Calls the get_sml(address)uint64 ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - getSml(args: MethodArgs<'get_sml(address)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'get_sml(address)uint64'>]> - - /** - * Calls the create_sml(address,pay)uint64 ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - createSml(args: MethodArgs<'create_sml(address,pay)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'create_sml(address,pay)uint64'>]> - - /** - * Calls the create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64 ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - createSmi(args: MethodArgs<'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'create_smi(string,uint64,uint64,uint64,asset,string,string,address,application,application,pay,pay)uint64'>]> - - /** - * Calls the transfer_smi(application,application,address,pay)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - transferSmi(args: MethodArgs<'transfer_smi(application,application,address,pay)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'transfer_smi(application,application,address,pay)void'>]> - - /** - * Calls the delete_smi(application,application)void ABI method. - * - * @param args The arguments for the contract call - * @param params Any additional parameters for the call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - deleteSmi(args: MethodArgs<'delete_smi(application,application)void'>, params?: AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, MethodReturn<'delete_smi(application,application)void'>]> - - /** - * Gets available update methods - */ - readonly update: { - /** - * Updates an existing instance of the SMR smart contract using a bare call. - * - * @param args The arguments for the bare call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - bare(args?: BareCallArgs & AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs): SmrComposer<[...TReturns, undefined]> - } - - /** - * Makes a clear_state call to an existing instance of the SMR smart contract. - * - * @param args The arguments for the bare call - * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions - */ - clearState(args?: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs): SmrComposer<[...TReturns, undefined]> - - /** - * Adds a transaction to the composer - * - * @param txn One of: A TransactionWithSigner object (returned as is), a TransactionToSign object (signer is obtained from the signer property), a Transaction object (signer is extracted from the defaultSender parameter), an async SendTransactionResult returned by one of algokit utils helpers (signer is obtained from the defaultSender parameter) - * @param defaultSender The default sender to be used to obtain a signer where the object provided to the transaction parameter does not include a signer. - */ - addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom): SmrComposer - /** - * Returns the underlying AtomicTransactionComposer instance - */ - atc(): Promise - /** - * Executes the transaction group and returns an array of results - */ - execute(): Promise> -} -export type SmrComposerResults = { - returns: TReturns - groupId: string - txIds: string[] - transactions: Transaction[] -} diff --git a/src/contracts/smi_client.ts b/src/contracts/smi_client.ts deleted file mode 100644 index aa69c0b..0000000 --- a/src/contracts/smi_client.ts +++ /dev/null @@ -1,804 +0,0 @@ -/* c8 ignore start */ -import algosdk from "algosdk"; -import * as bkr from "beaker-ts"; -export class Discount { - expiration_type = BigInt(0); - discount_type = BigInt(0); - discount_value = BigInt(0); - expires_at = BigInt(0); - created_at = BigInt(0); - total_claims = BigInt(0); - static codec: algosdk.ABIType = algosdk.ABIType.from( - "(uint64,uint64,uint64,uint64,uint64,uint64)" - ); - static fields: string[] = [ - "expiration_type", - "discount_type", - "discount_value", - "expires_at", - "created_at", - "total_claims", - ]; - static decodeResult(val: algosdk.ABIValue | undefined): Discount { - return bkr.decodeNamedTuple(val, Discount.fields) as Discount; - } - static decodeBytes(val: Uint8Array): Discount { - return bkr.decodeNamedTuple( - Discount.codec.decode(val), - Discount.fields - ) as Discount; - } -} -export class Subscription { - sub_type = BigInt(0); - sub_id = BigInt(0); - created_at = BigInt(0); - expires_at = BigInt(0); - expiration_type = BigInt(0); - static codec: algosdk.ABIType = algosdk.ABIType.from( - "(uint64,uint64,uint64,uint64,uint64)" - ); - static fields: string[] = [ - "sub_type", - "sub_id", - "created_at", - "expires_at", - "expiration_type", - ]; - static decodeResult(val: algosdk.ABIValue | undefined): Subscription { - return bkr.decodeNamedTuple(val, Subscription.fields) as Subscription; - } - static decodeBytes(val: Uint8Array): Subscription { - return bkr.decodeNamedTuple( - Subscription.codec.decode(val), - Subscription.fields - ) as Subscription; - } -} -export class SMI extends bkr.ApplicationClient { - desc = ""; - override appSchema: bkr.Schema = { - declared: { - active_subs: { - type: bkr.AVMType.uint64, - key: "active_subs", - desc: "", - static: false, - }, - coin_id: { - type: bkr.AVMType.uint64, - key: "coin_id", - desc: "", - static: false, - }, - created_at: { - type: bkr.AVMType.uint64, - key: "created_at", - desc: "", - static: false, - }, - lifecycle: { - type: bkr.AVMType.uint64, - key: "lifecycle", - desc: "", - static: false, - }, - manager: { - type: bkr.AVMType.bytes, - key: "manager", - desc: "", - static: false, - }, - max_subs: { - type: bkr.AVMType.uint64, - key: "max_subs", - desc: "", - static: false, - }, - name: { type: bkr.AVMType.bytes, key: "name", desc: "", static: false }, - price: { - type: bkr.AVMType.uint64, - key: "price", - desc: "", - static: false, - }, - sub_type: { - type: bkr.AVMType.uint64, - key: "sub_type", - desc: "", - static: false, - }, - total_subs: { - type: bkr.AVMType.uint64, - key: "total_subs", - desc: "", - static: false, - }, - version: { - type: bkr.AVMType.bytes, - key: "version", - desc: "", - static: false, - }, - }, - reserved: {}, - }; - override acctSchema: bkr.Schema = { declared: {}, reserved: {} }; - override approvalProgram = - "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSA4IDMgMTI4IDI1NQpieXRlY2Jsb2NrIDB4IDB4NmQ2MTZlNjE2NzY1NzIgMHg2MTYzNzQ2OTc2NjU1ZjczNzU2MjczIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OSAweDcwNzI2OTYzNjUgMHgxNTFmN2M3NSAweDczNzU2MjVmNzQ3OTcwNjUgMHg2YzY5NjY2NTYzNzk2MzZjNjUgMHg2ZDYxNzg1ZjczNzU2MjczIDB4NzQ2Zjc0NjE2YzVmNzM3NTYyNzMgMHg2ZTYxNmQ2NSAweDUwNzI2ZjY3NzI2MTZkIDB4NjM2ZjY5NmU1ZjY5NjQgMHg2MzcyNjU2MTc0NjU2NDVmNjE3NCAweDc2NjU3MjczNjk2ZjZlCnR4biBOdW1BcHBBcmdzCmludGNfMCAvLyAwCj09CmJueiBtYWluX2wzMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDE3ZDcxNTVhIC8vICJjcmVhdGUoc3RyaW5nLHN0cmluZyxhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkIgo9PQpibnogbWFpbl9sMjkKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhjODZmZGIwMSAvLyAidXBkYXRlX21hbmFnZXIoYWRkcmVzcyl2b2lkIgo9PQpibnogbWFpbl9sMjgKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgwOTFlMTMyZiAvLyAiZ2V0X2Rpc2NvdW50KHVpbnQ2NCkodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgo9PQpibnogbWFpbl9sMjcKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg3NGViYWEwYiAvLyAiY3JlYXRlX2Rpc2NvdW50KHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxwYXkpdm9pZCIKPT0KYm56IG1haW5fbDI2CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4YTljMGVjYzAgLy8gImRlbGV0ZV9kaXNjb3VudCh1aW50NjQpdm9pZCIKPT0KYm56IG1haW5fbDI1CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4ZGM3MTZlNTAgLy8gInN1YnNjcmliZShhZGRyZXNzLHVpbnQ2NCxwYXksdHhuKXVpbnQ2NCIKPT0KYm56IG1haW5fbDI0CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4YzE2ODZmZWQgLy8gImdldF9zdWJzY3JpcHRpb24oYWRkcmVzcykodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCj09CmJueiBtYWluX2wyMwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDFlYzVlOThhIC8vICJpc19zdWJzY3JpYmVyKGFkZHJlc3MpdWludDY0Igo9PQpibnogbWFpbl9sMjIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgzNTQ5Mzg2OCAvLyAiY2xhaW1fc3Vic2NyaXB0aW9uKHVpbnQ2NCl2b2lkIgo9PQpibnogbWFpbl9sMjEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg3YjJlY2MzMSAvLyAidHJhbnNmZXJfc3Vic2NyaXB0aW9uKGFkZHJlc3MsdWludDY0KXZvaWQiCj09CmJueiBtYWluX2wyMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDkyYTkwYWY2IC8vICJ1bnN1YnNjcmliZShhc3NldCl1aW50NjQiCj09CmJueiBtYWluX2wxOQp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDgyZDU3ZmNjIC8vICJtYXJrX2Zvcl9kZWxldGlvbihwYXkpdm9pZCIKPT0KYm56IG1haW5fbDE4CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MjhlMWVhOGYgLy8gImRlbGV0ZV9zdWJzY3JpcHRpb24oYWRkcmVzcyx1aW50NjQpdm9pZCIKPT0KYm56IG1haW5fbDE3CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MjQzNzhkM2MgLy8gImRlbGV0ZSgpdm9pZCIKPT0KYm56IG1haW5fbDE2CmVycgptYWluX2wxNjoKdHhuIE9uQ29tcGxldGlvbgpwdXNoaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgZGVsZXRlXzI3CmludGNfMSAvLyAxCnJldHVybgptYWluX2wxNzoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpzdG9yZSAyNAp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmJ0b2kKc3RvcmUgMjUKbG9hZCAyNApsb2FkIDI1CmNhbGxzdWIgZGVsZXRlc3Vic2NyaXB0aW9uXzI2CmludGNfMSAvLyAxCnJldHVybgptYWluX2wxODoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpzdG9yZSAyMwpsb2FkIDIzCmd0eG5zIFR5cGVFbnVtCmludGNfMSAvLyBwYXkKPT0KYXNzZXJ0CmxvYWQgMjMKY2FsbHN1YiBtYXJrZm9yZGVsZXRpb25fMjUKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE5Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmludGNfMCAvLyAwCmdldGJ5dGUKY2FsbHN1YiB1bnN1YnNjcmliZV8yNApzdG9yZSAyMgpieXRlYyA1IC8vIDB4MTUxZjdjNzUKbG9hZCAyMgppdG9iCmNvbmNhdApsb2cKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDIwOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCnN0b3JlIDIwCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKYnRvaQpzdG9yZSAyMQpsb2FkIDIwCmxvYWQgMjEKY2FsbHN1YiB0cmFuc2ZlcnN1YnNjcmlwdGlvbl8yMwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjE6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpjYWxsc3ViIGNsYWltc3Vic2NyaXB0aW9uXzIyCmludGNfMSAvLyAxCnJldHVybgptYWluX2wyMjoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpjYWxsc3ViIGlzc3Vic2NyaWJlcl8yMQpzdG9yZSAxOQpieXRlYyA1IC8vIDB4MTUxZjdjNzUKbG9hZCAxOQppdG9iCmNvbmNhdApsb2cKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDIzOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmNhbGxzdWIgZ2V0c3Vic2NyaXB0aW9uXzIwCnN0b3JlIDE4CmJ5dGVjIDUgLy8gMHgxNTFmN2M3NQpsb2FkIDE4CmNvbmNhdApsb2cKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDI0Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCnN0b3JlIDEzCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKYnRvaQpzdG9yZSAxNAp0eG4gR3JvdXBJbmRleApwdXNoaW50IDIgLy8gMgotCnN0b3JlIDE1CmxvYWQgMTUKZ3R4bnMgVHlwZUVudW0KaW50Y18xIC8vIHBheQo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpzdG9yZSAxNgpsb2FkIDEzCmxvYWQgMTQKbG9hZCAxNQpsb2FkIDE2CmNhbGxzdWIgc3Vic2NyaWJlXzE5CnN0b3JlIDE3CmJ5dGVjIDUgLy8gMHgxNTFmN2M3NQpsb2FkIDE3Cml0b2IKY29uY2F0CmxvZwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjU6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpjYWxsc3ViIGRlbGV0ZWRpc2NvdW50XzE4CmludGNfMSAvLyAxCnJldHVybgptYWluX2wyNjoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpidG9pCnN0b3JlIDgKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCnN0b3JlIDkKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwpidG9pCnN0b3JlIDEwCnR4bmEgQXBwbGljYXRpb25BcmdzIDQKYnRvaQpzdG9yZSAxMQp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCnN0b3JlIDEyCmxvYWQgMTIKZ3R4bnMgVHlwZUVudW0KaW50Y18xIC8vIHBheQo9PQphc3NlcnQKbG9hZCA4CmxvYWQgOQpsb2FkIDEwCmxvYWQgMTEKbG9hZCAxMgpjYWxsc3ViIGNyZWF0ZWRpc2NvdW50XzE3CmludGNfMSAvLyAxCnJldHVybgptYWluX2wyNzoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpidG9pCmNhbGxzdWIgZ2V0ZGlzY291bnRfMTYKc3RvcmUgNwpieXRlYyA1IC8vIDB4MTUxZjdjNzUKbG9hZCA3CmNvbmNhdApsb2cKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDI4Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmNhbGxzdWIgdXBkYXRlbWFuYWdlcl8xNQppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjk6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKPT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKc3RvcmUgMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCnN0b3JlIDEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwpzdG9yZSAyCnR4bmEgQXBwbGljYXRpb25BcmdzIDQKYnRvaQpzdG9yZSAzCnR4bmEgQXBwbGljYXRpb25BcmdzIDUKYnRvaQpzdG9yZSA0CnR4bmEgQXBwbGljYXRpb25BcmdzIDYKYnRvaQpzdG9yZSA1CnR4bmEgQXBwbGljYXRpb25BcmdzIDcKYnRvaQpzdG9yZSA2CmxvYWQgMApsb2FkIDEKbG9hZCAyCmxvYWQgMwpsb2FkIDQKbG9hZCA1CmxvYWQgNgpjYWxsc3ViIGNyZWF0ZV8xMgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMzA6CnR4biBPbkNvbXBsZXRpb24KaW50Y18xIC8vIE9wdEluCj09CmJueiBtYWluX2wzNAp0eG4gT25Db21wbGV0aW9uCnB1c2hpbnQgMiAvLyBDbG9zZU91dAo9PQpibnogbWFpbl9sMzMKZXJyCm1haW5fbDMzOgp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQphc3NlcnQKY2FsbHN1YiBjbG9zZW91dF8xNAppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMzQ6CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CmFzc2VydApjYWxsc3ViIG9wdGluXzEzCmludGNfMSAvLyAxCnJldHVybgoKLy8gaW50X3RvX2FzY2lpCmludHRvYXNjaWlfMDoKcHJvdG8gMSAxCnB1c2hieXRlcyAweDMwMzEzMjMzMzQzNTM2MzczODM5IC8vICIwMTIzNDU2Nzg5IgpmcmFtZV9kaWcgLTEKaW50Y18xIC8vIDEKZXh0cmFjdDMKcmV0c3ViCgovLyBpdG9hCml0b2FfMToKcHJvdG8gMSAxCmZyYW1lX2RpZyAtMQppbnRjXzAgLy8gMAo9PQpibnogaXRvYV8xX2w1CmZyYW1lX2RpZyAtMQpwdXNoaW50IDEwIC8vIDEwCi8KaW50Y18wIC8vIDAKPgpibnogaXRvYV8xX2w0CmJ5dGVjXzAgLy8gIiIKaXRvYV8xX2wzOgpmcmFtZV9kaWcgLTEKcHVzaGludCAxMCAvLyAxMAolCmNhbGxzdWIgaW50dG9hc2NpaV8wCmNvbmNhdApiIGl0b2FfMV9sNgppdG9hXzFfbDQ6CmZyYW1lX2RpZyAtMQpwdXNoaW50IDEwIC8vIDEwCi8KY2FsbHN1YiBpdG9hXzEKYiBpdG9hXzFfbDMKaXRvYV8xX2w1OgpwdXNoYnl0ZXMgMHgzMCAvLyAiMCIKaXRvYV8xX2w2OgpyZXRzdWIKCi8vIGVuY29kZV91dmFyaW50X2ltcGwKZW5jb2RldXZhcmludGltcGxfMjoKcHJvdG8gMiAxCmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgLTIKaW50YyA0IC8vIDEyOAo+PQpibnogZW5jb2RldXZhcmludGltcGxfMl9sMgpmcmFtZV9kaWcgLTIKaW50YyA1IC8vIDI1NQomCml0b2IKZXh0cmFjdCA3IDEKYiBlbmNvZGV1dmFyaW50aW1wbF8yX2wzCmVuY29kZXV2YXJpbnRpbXBsXzJfbDI6CmZyYW1lX2RpZyAtMgpwdXNoaW50IDcgLy8gNwpzaHIKZnJhbWVfZGlnIC0yCmludGMgNSAvLyAyNTUKJgppbnRjIDQgLy8gMTI4CnwKaXRvYgpleHRyYWN0IDcgMQpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzIKZW5jb2RldXZhcmludGltcGxfMl9sMzoKY29uY2F0CnJldHN1YgoKLy8gaW5uZXJfY3JlYXRlX25mdAppbm5lcmNyZWF0ZW5mdF8zOgpwcm90byAzIDEKaXR4bl9iZWdpbgppbnRjXzMgLy8gYWNmZwppdHhuX2ZpZWxkIFR5cGVFbnVtCmludGNfMSAvLyAxCml0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0RGVjaW1hbHMKaW50Y18xIC8vIDEKaXR4bl9maWVsZCBDb25maWdBc3NldERlZmF1bHRGcm96ZW4KZnJhbWVfZGlnIC0yCml0eG5fZmllbGQgQ29uZmlnQXNzZXRVbml0TmFtZQpmcmFtZV9kaWcgLTMKaXR4bl9maWVsZCBDb25maWdBc3NldE5hbWUKZnJhbWVfZGlnIC0xCml0eG5fZmllbGQgQ29uZmlnQXNzZXRVUkwKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKaXR4bl9maWVsZCBDb25maWdBc3NldE1hbmFnZXIKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKaXR4bl9maWVsZCBDb25maWdBc3NldFJlc2VydmUKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKaXR4bl9maWVsZCBDb25maWdBc3NldEZyZWV6ZQpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Q2xhd2JhY2sKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKaXR4biBDcmVhdGVkQXNzZXRJRApyZXRzdWIKCi8vIGlubmVyX3RyYW5zZmVyX25mdAppbm5lcnRyYW5zZmVybmZ0XzQ6CnByb3RvIDMgMAppdHhuX2JlZ2luCnB1c2hpbnQgNCAvLyBheGZlcgppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMwppdHhuX2ZpZWxkIFhmZXJBc3NldAppbnRjXzEgLy8gMQppdHhuX2ZpZWxkIEFzc2V0QW1vdW50CmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIEFzc2V0U2VuZGVyCmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKcmV0c3ViCgovLyBpbm5lcl9kZWxldGVfbmZ0CmlubmVyZGVsZXRlbmZ0XzU6CnByb3RvIDEgMAppdHhuX2JlZ2luCmludGNfMyAvLyBhY2ZnCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC0xCml0eG5fZmllbGQgQ29uZmlnQXNzZXQKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKcmV0c3ViCgovLyBpbm5lcl9kZWxldGVfc3Vic2NyaXB0aW9uCmlubmVyZGVsZXRlc3Vic2NyaXB0aW9uXzY6CnByb3RvIDIgMApmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIC0xCmFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQpzdG9yZSA2NgpzdG9yZSA2NQpsb2FkIDY2CmxvYWQgNjUKaW50Y18wIC8vIDAKPgomJgpibnogaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fNl9sMwppbm5lcmRlbGV0ZXN1YnNjcmlwdGlvbl82X2wxOgpmcmFtZV9kaWcgLTEKY2FsbHN1YiBpbm5lcmRlbGV0ZW5mdF81CmJ5dGVjXzIgLy8gImFjdGl2ZV9zdWJzIgphcHBfZ2xvYmFsX2dldAppbnRjXzAgLy8gMAohPQpieiBpbm5lcmRlbGV0ZXN1YnNjcmlwdGlvbl82X2w0CmJ5dGVjXzIgLy8gImFjdGl2ZV9zdWJzIgpieXRlY18yIC8vICJhY3RpdmVfc3VicyIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDEKLQphcHBfZ2xvYmFsX3B1dApiIGlubmVyZGVsZXRlc3Vic2NyaXB0aW9uXzZfbDQKaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fNl9sMzoKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAtMgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpjYWxsc3ViIGlubmVydHJhbnNmZXJuZnRfNApiIGlubmVyZGVsZXRlc3Vic2NyaXB0aW9uXzZfbDEKaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fNl9sNDoKZnJhbWVfZGlnIC0yCmJveF9kZWwKcG9wCnJldHN1YgoKLy8gaW5uZXJfY29tcHV0ZV9leHBpcmF0aW9uCmlubmVyY29tcHV0ZWV4cGlyYXRpb25fNzoKcHJvdG8gMiAxCmZyYW1lX2RpZyAtMgppbnRjXzAgLy8gMAo9PQpibnogaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2wxMApmcmFtZV9kaWcgLTEKaW50Y18xIC8vIDEKPT0KYm56IGlubmVyY29tcHV0ZWV4cGlyYXRpb25fN19sOQpmcmFtZV9kaWcgLTEKcHVzaGludCAyIC8vIDIKPT0KYm56IGlubmVyY29tcHV0ZWV4cGlyYXRpb25fN19sOApmcmFtZV9kaWcgLTEKaW50Y18zIC8vIDMKPT0KYm56IGlubmVyY29tcHV0ZWV4cGlyYXRpb25fN19sNwpmcmFtZV9kaWcgLTEKcHVzaGludCA0IC8vIDQKPT0KYm56IGlubmVyY29tcHV0ZWV4cGlyYXRpb25fN19sNgplcnIKaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2w2OgpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCnB1c2hpbnQgMzE1MzYwMDAgLy8gMzE1MzYwMDAKKwpiIGlubmVyY29tcHV0ZWV4cGlyYXRpb25fN19sMTEKaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2w3OgpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCnB1c2hpbnQgMTU1NTIwMDAgLy8gMTU1NTIwMDAKKwpiIGlubmVyY29tcHV0ZWV4cGlyYXRpb25fN19sMTEKaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2w4OgpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCnB1c2hpbnQgNzc3NjAwMCAvLyA3Nzc2MDAwCisKYiBpbm5lcmNvbXB1dGVleHBpcmF0aW9uXzdfbDExCmlubmVyY29tcHV0ZWV4cGlyYXRpb25fN19sOToKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcApwdXNoaW50IDI1OTIwMDAgLy8gMjU5MjAwMAorCmIgaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83X2wxMQppbm5lcmNvbXB1dGVleHBpcmF0aW9uXzdfbDEwOgppbnRjXzAgLy8gMAppbm5lcmNvbXB1dGVleHBpcmF0aW9uXzdfbDExOgpyZXRzdWIKCi8vIGluY3JlbWVudF9kaXNjb3VudF90b3RhbF9jbGFpbXMKaW5jcmVtZW50ZGlzY291bnR0b3RhbGNsYWltc184Ogpwcm90byAxIDAKYnl0ZWNfMCAvLyAiIgppbnRjXzAgLy8gMApkdXBuIDUKYnl0ZWNfMCAvLyAiIgppbnRjXzAgLy8gMApkdXAKYnl0ZWNfMCAvLyAiIgpkdXAKZnJhbWVfZGlnIC0xCml0b2IKYm94X2xlbgpzdG9yZSA0NgpzdG9yZSA0NQpsb2FkIDQ2CmJ6IGluY3JlbWVudGRpc2NvdW50dG90YWxjbGFpbXNfOF9sMgpmcmFtZV9kaWcgLTEKaXRvYgpib3hfZ2V0CnN0b3JlIDQ4CnN0b3JlIDQ3CmxvYWQgNDgKYXNzZXJ0CmxvYWQgNDcKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmludGNfMiAvLyA4CmV4dHJhY3RfdWludDY0CmZyYW1lX2J1cnkgMQppbmNyZW1lbnRkaXNjb3VudHRvdGFsY2xhaW1zXzhfbDI6CmZyYW1lX2RpZyAwCnB1c2hpbnQgMTYgLy8gMTYKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAwCnB1c2hpbnQgMjQgLy8gMjQKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAzCmZyYW1lX2RpZyAwCnB1c2hpbnQgMzIgLy8gMzIKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSA0CmZyYW1lX2RpZyAwCnB1c2hpbnQgNDAgLy8gNDAKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSA1CmZyYW1lX2RpZyA1CmludGNfMSAvLyAxCisKZnJhbWVfYnVyeSA2CmZyYW1lX2RpZyAtMQppdG9iCmZyYW1lX2RpZyAxCml0b2IKY29uY2F0CmZyYW1lX2RpZyAyCml0b2IKY29uY2F0CmZyYW1lX2RpZyAzCml0b2IKY29uY2F0CmZyYW1lX2RpZyA0Cml0b2IKY29uY2F0CmZyYW1lX2RpZyA2Cml0b2IKY29uY2F0CmZyYW1lX2J1cnkgNwpmcmFtZV9kaWcgLTEKaXRvYgpib3hfZGVsCnBvcApmcmFtZV9kaWcgLTEKaXRvYgpmcmFtZV9kaWcgNwpib3hfcHV0CnJldHN1YgoKLy8gaW5uZXJfY29tcHV0ZV9kaXNjb3VudF9wcmljZQppbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzk6CnByb3RvIDIgMQpieXRlY18wIC8vICIiCmludGNfMCAvLyAwCmR1cG4gMgpmcmFtZV9kaWcgLTIKaXRvYgpib3hfbGVuCnN0b3JlIDQyCnN0b3JlIDQxCmxvYWQgNDIKYm56IGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOV9sMgpmcmFtZV9kaWcgLTEKYiBpbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDkKaW5uZXJjb21wdXRlZGlzY291bnRwcmljZV85X2wyOgpmcmFtZV9kaWcgLTIKaXRvYgpib3hfZ2V0CnN0b3JlIDQ0CnN0b3JlIDQzCmxvYWQgNDQKYXNzZXJ0CmxvYWQgNDMKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmludGNfMiAvLyA4CmV4dHJhY3RfdWludDY0CmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMApwdXNoaW50IDE2IC8vIDE2CmV4dHJhY3RfdWludDY0CmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgMApwdXNoaW50IDI0IC8vIDI0CmV4dHJhY3RfdWludDY0CmZyYW1lX2J1cnkgMwpmcmFtZV9kaWcgMwpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCjwKZnJhbWVfZGlnIDMKaW50Y18wIC8vIDAKPgomJgpibnogaW5uZXJjb21wdXRlZGlzY291bnRwcmljZV85X2w4CmZyYW1lX2RpZyAxCmludGNfMCAvLyAwCj09CmJueiBpbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDcKZnJhbWVfZGlnIDEKaW50Y18xIC8vIDEKPT0KYm56IGlubmVyY29tcHV0ZWRpc2NvdW50cHJpY2VfOV9sNgpmcmFtZV9kaWcgLTEKYiBpbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDkKaW5uZXJjb21wdXRlZGlzY291bnRwcmljZV85X2w2OgpmcmFtZV9kaWcgLTIKY2FsbHN1YiBpbmNyZW1lbnRkaXNjb3VudHRvdGFsY2xhaW1zXzgKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAyCi0KYiBpbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDkKaW5uZXJjb21wdXRlZGlzY291bnRwcmljZV85X2w3OgpmcmFtZV9kaWcgLTIKY2FsbHN1YiBpbmNyZW1lbnRkaXNjb3VudHRvdGFsY2xhaW1zXzgKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgMgoqCnB1c2hpbnQgMTAwIC8vIDEwMAovCi0KYiBpbm5lcmNvbXB1dGVkaXNjb3VudHByaWNlXzlfbDkKaW5uZXJjb21wdXRlZGlzY291bnRwcmljZV85X2w4OgpmcmFtZV9kaWcgLTEKaW5uZXJjb21wdXRlZGlzY291bnRwcmljZV85X2w5OgpmcmFtZV9idXJ5IDAKcmV0c3ViCgovLyBpbm5lcl9jb21wdXRlX3ByaWNlCmlubmVyY29tcHV0ZXByaWNlXzEwOgpwcm90byAxIDEKaW50Y18wIC8vIDAKZnJhbWVfZGlnIC0xCmludGNfMCAvLyAwCj09CmJueiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sMTAKZnJhbWVfZGlnIC0xCmludGNfMSAvLyAxCj09CmJueiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sOQpmcmFtZV9kaWcgLTEKcHVzaGludCAyIC8vIDIKPT0KYm56IGlubmVyY29tcHV0ZXByaWNlXzEwX2w4CmZyYW1lX2RpZyAtMQppbnRjXzMgLy8gMwo9PQpibnogaW5uZXJjb21wdXRlcHJpY2VfMTBfbDcKZnJhbWVfZGlnIC0xCnB1c2hpbnQgNCAvLyA0Cj09CmJueiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sNgplcnIKaW5uZXJjb21wdXRlcHJpY2VfMTBfbDY6CmJ5dGVjIDQgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApwdXNoaW50IDEyIC8vIDEyCioKYiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sMTEKaW5uZXJjb21wdXRlcHJpY2VfMTBfbDc6CmJ5dGVjIDQgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApwdXNoaW50IDYgLy8gNgoqCmIgaW5uZXJjb21wdXRlcHJpY2VfMTBfbDExCmlubmVyY29tcHV0ZXByaWNlXzEwX2w4OgpieXRlYyA0IC8vICJwcmljZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18zIC8vIDMKKgpiIGlubmVyY29tcHV0ZXByaWNlXzEwX2wxMQppbm5lcmNvbXB1dGVwcmljZV8xMF9sOToKYnl0ZWMgNCAvLyAicHJpY2UiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCioKYiBpbm5lcmNvbXB1dGVwcmljZV8xMF9sMTEKaW5uZXJjb21wdXRlcHJpY2VfMTBfbDEwOgpieXRlYyA0IC8vICJwcmljZSIKYXBwX2dsb2JhbF9nZXQKaW5uZXJjb21wdXRlcHJpY2VfMTBfbDExOgpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAwCmNhbGxzdWIgaW5uZXJjb21wdXRlZGlzY291bnRwcmljZV85CmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIGlubmVyX3ZlcmlmeV9leHBpcmF0aW9uX3R5cGUKaW5uZXJ2ZXJpZnlleHBpcmF0aW9udHlwZV8xMToKcHJvdG8gMSAwCmJ5dGVjIDYgLy8gInN1Yl90eXBlIgphcHBfZ2xvYmFsX2dldAppbnRjXzAgLy8gMAo9PQpmcmFtZV9kaWcgLTEKaW50Y18xIC8vIDEKPT0KfHwKZnJhbWVfZGlnIC0xCnB1c2hpbnQgMiAvLyAyCj09Cnx8CmZyYW1lX2RpZyAtMQppbnRjXzMgLy8gMwo9PQp8fApmcmFtZV9kaWcgLTEKcHVzaGludCA0IC8vIDQKPT0KfHwKLy8gRXhwaXJhdGlvbiB0eXBlIGlzIGludmFsaWQKYXNzZXJ0CnJldHN1YgoKLy8gY3JlYXRlCmNyZWF0ZV8xMjoKcHJvdG8gNyAwCmJ5dGVjXzIgLy8gImFjdGl2ZV9zdWJzIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyAxMiAvLyAiY29pbl9pZCIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTMgLy8gImNyZWF0ZWRfYXQiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDcgLy8gImxpZmVjeWNsZSIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMSAvLyAibWFuYWdlciIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDggLy8gIm1heF9zdWJzIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyAxMCAvLyAibmFtZSIKcHVzaGJ5dGVzIDB4NjQ2NTY2NjE3NTZjNzQgLy8gImRlZmF1bHQiCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDQgLy8gInByaWNlIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyA2IC8vICJzdWJfdHlwZSIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgOSAvLyAidG90YWxfc3VicyIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTQgLy8gInZlcnNpb24iCmJ5dGVjXzAgLy8gIiIKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTQgLy8gInZlcnNpb24iCmZyYW1lX2RpZyAtNwpleHRyYWN0IDIgMAphcHBfZ2xvYmFsX3B1dApieXRlYyAxMCAvLyAibmFtZSIKZnJhbWVfZGlnIC02CmV4dHJhY3QgMiAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmZyYW1lX2RpZyAtNQphcHBfZ2xvYmFsX3B1dApieXRlYyA2IC8vICJzdWJfdHlwZSIKZnJhbWVfZGlnIC00CmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDQgLy8gInByaWNlIgpmcmFtZV9kaWcgLTMKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgOCAvLyAibWF4X3N1YnMiCmZyYW1lX2RpZyAtMgphcHBfZ2xvYmFsX3B1dApieXRlYyAxMiAvLyAiY29pbl9pZCIKZnJhbWVfZGlnIC0xCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDEzIC8vICJjcmVhdGVkX2F0IgpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCmFwcF9nbG9iYWxfcHV0CnJldHN1YgoKLy8gb3B0aW4Kb3B0aW5fMTM6CnByb3RvIDAgMApyZXRzdWIKCi8vIGNsb3Nlb3V0CmNsb3Nlb3V0XzE0Ogpwcm90byAwIDAKaW50Y18xIC8vIDEKcmV0dXJuCgovLyB1cGRhdGVfbWFuYWdlcgp1cGRhdGVtYW5hZ2VyXzE1Ogpwcm90byAxIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydApieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTEKIT0KLy8gTmV3IG1hbmFnZXIgY2Fubm90IGJlIHRoZSBzYW1lIGFzIHRoZSBvbGQgbWFuYWdlcgphc3NlcnQKYnl0ZWNfMSAvLyAibWFuYWdlciIKZnJhbWVfZGlnIC0xCmFwcF9nbG9iYWxfcHV0CnJldHN1YgoKLy8gZ2V0X2Rpc2NvdW50CmdldGRpc2NvdW50XzE2Ogpwcm90byAxIDEKYnl0ZWNfMCAvLyAiIgpmcmFtZV9kaWcgLTEKaXRvYgpib3hfZ2V0CnN0b3JlIDI3CnN0b3JlIDI2CmxvYWQgMjcKYXNzZXJ0CmxvYWQgMjYKZnJhbWVfYnVyeSAwCnJldHN1YgoKLy8gY3JlYXRlX2Rpc2NvdW50CmNyZWF0ZWRpc2NvdW50XzE3Ogpwcm90byA1IDAKaW50Y18wIC8vIDAKZHVwbiAyCmJ5dGVjXzAgLy8gIiIKaW50Y18wIC8vIDAKZHVwCmJ5dGVjXzAgLy8gIiIKZHVwCnR4biBTZW5kZXIKYnl0ZWNfMSAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydApmcmFtZV9kaWcgLTEKZ3R4bnMgU2VuZGVyCmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0Cj09Ci8vIEZlZSB0eG4gbXVzdCBiZSBzZW50IGJ5IHRoZSBtYW5hZ2VyIGFuZCBtdXN0IGJlIGF0ICAgICAgICAgICAgICAgICBsZWFzdCB0aGUgc3Vic2NyaWJlciBib3ggZmVlCmFzc2VydApmcmFtZV9kaWcgLTEKZ3R4bnMgQW1vdW50CnB1c2hpbnQgMTg1MDAgLy8gMTg1MDAKPj0KLy8gRmVlIHR4biBtdXN0IGJlIHNlbnQgYnkgdGhlIG1hbmFnZXIgYW5kIG11c3QgYmUgYXQgICAgICAgICAgICAgICAgIGxlYXN0IHRoZSBzdWJzY3JpYmVyIGJveCBmZWUKYXNzZXJ0CmZyYW1lX2RpZyAtNAppbnRjXzAgLy8gMAo9PQpmcmFtZV9kaWcgLTQKaW50Y18xIC8vIDEKPT0KfHwKLy8gRGlzY291bnQgdHlwZSBtdXN0IGJlIGVpdGhlciBwZXJjZW50YWdlIG9yIGFtb3VudAphc3NlcnQKZnJhbWVfZGlnIC01Cml0b2IKYm94X2xlbgpzdG9yZSAyOQpzdG9yZSAyOApsb2FkIDI5CmludGNfMSAvLyAxCiE9Ci8vIERpc2NvdW50IGFscmVhZHkgZXhpc3RzLCBkZWxldGUgb25lIGZpcnN0CmFzc2VydApnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgLTIKaW50Y18wIC8vIDAKPgpibnogY3JlYXRlZGlzY291bnRfMTdfbDIKaW50Y18wIC8vIDAKYiBjcmVhdGVkaXNjb3VudF8xN19sMwpjcmVhdGVkaXNjb3VudF8xN19sMjoKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIC0yCisKY3JlYXRlZGlzY291bnRfMTdfbDM6CmZyYW1lX2J1cnkgMQppbnRjXzAgLy8gMApmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIC01Cml0b2IKZnJhbWVfZGlnIC00Cml0b2IKY29uY2F0CmZyYW1lX2RpZyAtMwppdG9iCmNvbmNhdApmcmFtZV9kaWcgMQppdG9iCmNvbmNhdApmcmFtZV9kaWcgMAppdG9iCmNvbmNhdApmcmFtZV9kaWcgMgppdG9iCmNvbmNhdApmcmFtZV9idXJ5IDMKZnJhbWVfZGlnIC01Cml0b2IKYm94X2RlbApwb3AKZnJhbWVfZGlnIC01Cml0b2IKZnJhbWVfZGlnIDMKYm94X3B1dApyZXRzdWIKCi8vIGRlbGV0ZV9kaXNjb3VudApkZWxldGVkaXNjb3VudF8xODoKcHJvdG8gMSAwCnR4biBTZW5kZXIKYnl0ZWNfMSAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydApmcmFtZV9kaWcgLTEKaXRvYgpib3hfbGVuCnN0b3JlIDMxCnN0b3JlIDMwCmxvYWQgMzEKaW50Y18xIC8vIDEKPT0KLy8gRGlzY291bnQgZG9lcyBub3QgZXhpc3QKYXNzZXJ0CmZyYW1lX2RpZyAtMQppdG9iCmJveF9kZWwKcG9wCnJldHN1YgoKLy8gc3Vic2NyaWJlCnN1YnNjcmliZV8xOToKcHJvdG8gNCAxCmludGNfMCAvLyAwCmR1cG4gMgpieXRlY18wIC8vICIiCmR1cAppbnRjXzAgLy8gMApkdXBuIDMKYnl0ZWNfMCAvLyAiIgppbnRjXzAgLy8gMApkdXAKYnl0ZWNfMCAvLyAiIgpkdXAKZnJhbWVfZGlnIC0zCmNhbGxzdWIgaW5uZXJ2ZXJpZnlleHBpcmF0aW9udHlwZV8xMQpieXRlYyA2IC8vICJzdWJfdHlwZSIKYXBwX2dsb2JhbF9nZXQKZnJhbWVfZGlnIC0zCmNhbGxzdWIgaW5uZXJjb21wdXRlZXhwaXJhdGlvbl83CmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgLTMKY2FsbHN1YiBpbm5lcmNvbXB1dGVwcmljZV8xMApmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIC00CmZyYW1lX2RpZyAtMgpndHhucyBTZW5kZXIKPT0KLy8gU3Vic2NyaWJlciBhY2NvdW50IG11c3QgYmUgdGhlIHNlbmRlcgphc3NlcnQKYnl0ZWMgMTEgLy8gIlByb2dyYW0iCmludGNfMCAvLyAwCnN0b3JlIDMzCmludGNfMCAvLyAwCnN0b3JlIDM0CmJ5dGVjXzAgLy8gIiIKc3RvcmUgMzUKYnl0ZWNfMCAvLyAiIgpzdG9yZSAzNgpieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldApsZW4KYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzIKYnl0ZWNfMSAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKY29uY2F0CnN0b3JlIDM1CmxvYWQgMzYKYnl0ZWNfMyAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCAzMwppbnRjXzIgLy8gOApzdWJzdHJpbmczCmNvbmNhdApsb2FkIDM1CmNvbmNhdApzdG9yZSAzNgpsb2FkIDM0CmxvYWQgMzUKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSAzNAppbnRjXzIgLy8gOAppbnRjXzEgLy8gMQorCnN0b3JlIDMzCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwpsZW4KYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCmNvbmNhdApzdG9yZSAzNQpsb2FkIDM2CmJ5dGVjXzMgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgMzMKcHVzaGludCAxMiAvLyAxMgpzdWJzdHJpbmczCmNvbmNhdApsb2FkIDM1CmNvbmNhdApzdG9yZSAzNgpsb2FkIDM0CmxvYWQgMzUKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSAzNApwdXNoaW50IDEyIC8vIDEyCmludGNfMSAvLyAxCisKc3RvcmUgMzMKbG9hZCAzNgpieXRlY18zIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDMzCmRpZyAxCmxlbgpzdWJzdHJpbmczCmNvbmNhdApzdG9yZSAzNgpsb2FkIDM2CmNvbmNhdApzaGE1MTJfMjU2CmZyYW1lX2J1cnkgMwpmcmFtZV9kaWcgMwpsZW4KcHVzaGludCAzMiAvLyAzMgo9PQphc3NlcnQKZnJhbWVfZGlnIC0xCmd0eG5zIFR5cGVFbnVtCmludGNfMSAvLyBwYXkKPT0KZnJhbWVfZGlnIC0xCmd0eG5zIEFtb3VudApmcmFtZV9kaWcgMgo9PQomJgpmcmFtZV9kaWcgLTEKZ3R4bnMgUmVjZWl2ZXIKZnJhbWVfZGlnIDMKPT0KJiYKZnJhbWVfZGlnIC0xCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNCAvLyBheGZlcgo9PQpmcmFtZV9kaWcgLTEKZ3R4bnMgQXNzZXRBbW91bnQKZnJhbWVfZGlnIDIKPT0KJiYKZnJhbWVfZGlnIC0xCmd0eG5zIEFzc2V0UmVjZWl2ZXIKZnJhbWVfZGlnIDMKPT0KJiYKfHwKLy8gU3Vic2NyaXB0aW9uIHBheW1lbnQgbXVzdCBiZSBzZW5kIHRvIGxvY2tlciB3aXRoIHJpZ2h0IHBheQphc3NlcnQKYnl0ZWMgOCAvLyAibWF4X3N1YnMiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj4KYm56IHN1YnNjcmliZV8xOV9sNgpzdWJzY3JpYmVfMTlfbDE6CmZyYW1lX2RpZyAtNApib3hfbGVuCnN0b3JlIDM4CnN0b3JlIDM3CmxvYWQgMzgKYm56IHN1YnNjcmliZV8xOV9sMwpieXRlY18yIC8vICJhY3RpdmVfc3VicyIKYnl0ZWNfMiAvLyAiYWN0aXZlX3N1YnMiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCisKYXBwX2dsb2JhbF9wdXQKYiBzdWJzY3JpYmVfMTlfbDcKc3Vic2NyaWJlXzE5X2wzOgpmcmFtZV9kaWcgLTQKYm94X2dldApzdG9yZSA0MApzdG9yZSAzOQpsb2FkIDQwCmFzc2VydApsb2FkIDM5CmZyYW1lX2J1cnkgNApmcmFtZV9kaWcgNApwdXNoaW50IDI0IC8vIDI0CmV4dHJhY3RfdWludDY0CmZyYW1lX2J1cnkgNQpmcmFtZV9kaWcgNQppbnRjXzAgLy8gMAohPQpibnogc3Vic2NyaWJlXzE5X2w1CmludGNfMCAvLyAwCnJldHVybgpzdWJzY3JpYmVfMTlfbDU6CmZyYW1lX2RpZyA1Cmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKPAovLyBTdWJzY3JpcHRpb24gc3RpbGwgYWN0aXZlCmFzc2VydApiIHN1YnNjcmliZV8xOV9sNwpzdWJzY3JpYmVfMTlfbDY6CmJ5dGVjXzIgLy8gImFjdGl2ZV9zdWJzIgphcHBfZ2xvYmFsX2dldAppbnRjXzEgLy8gMQorCmJ5dGVjIDggLy8gIm1heF9zdWJzIgphcHBfZ2xvYmFsX2dldAo8PQovLyBNYXggaXRlbXMgcmVhY2hlZAphc3NlcnQKYiBzdWJzY3JpYmVfMTlfbDEKc3Vic2NyaWJlXzE5X2w3OgpieXRlYyA5IC8vICJ0b3RhbF9zdWJzIgpieXRlYyA5IC8vICJ0b3RhbF9zdWJzIgphcHBfZ2xvYmFsX2dldAppbnRjXzEgLy8gMQorCmFwcF9nbG9iYWxfcHV0CnB1c2hieXRlcyAweDIzIC8vICIjIgpieXRlYyA5IC8vICJ0b3RhbF9zdWJzIgphcHBfZ2xvYmFsX2dldApjYWxsc3ViIGl0b2FfMQpjb25jYXQKcHVzaGJ5dGVzIDB4MjAyZDIwIC8vICIgLSAiCmNvbmNhdApieXRlYyAxMCAvLyAibmFtZSIKYXBwX2dsb2JhbF9nZXQKY29uY2F0CnB1c2hieXRlcyAweDUzNTQ1MCAvLyAiU1RQIgpwdXNoYnl0ZXMgMHg2OTcwNjY3MzNhMmYyZjYyNjE2Njc5NjI2NTY5NjM2NDY0N2EzNzZiNjI3NTc4NjE2YTZhMzY2MjZmNjIzNTYyNmE3MTc0Nzc2NTcxMzY3NzYzNjg2YjY0NmI2OTcxMzQ3Njc2Njg3NzcyNzc3MjZlNjUzNzY5N2EzNDY2MzIzNTc4NjkgLy8gImlwZnM6Ly9iYWZ5YmVpY2RkejdrYnV4YWpqNmJvYjVianF0d2VxNndjaGtka2lxNHZ2aHdyd3JuZTdpejRmMjV4aSIKY2FsbHN1YiBpbm5lcmNyZWF0ZW5mdF8zCnN0b3JlIDMyCmxvYWQgMzIKaW50Y18wIC8vIDAKIT0KYXNzZXJ0CmJ5dGVjIDYgLy8gInN1Yl90eXBlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9idXJ5IDYKbG9hZCAzMgpmcmFtZV9idXJ5IDcKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcApmcmFtZV9idXJ5IDgKZnJhbWVfZGlnIDYKaXRvYgpmcmFtZV9kaWcgNwppdG9iCmNvbmNhdApmcmFtZV9kaWcgOAppdG9iCmNvbmNhdApmcmFtZV9kaWcgMQppdG9iCmNvbmNhdApmcmFtZV9kaWcgLTMKaXRvYgpjb25jYXQKZnJhbWVfYnVyeSA5CmZyYW1lX2RpZyAtNApib3hfZGVsCnBvcApmcmFtZV9kaWcgLTQKZnJhbWVfZGlnIDkKYm94X3B1dApsb2FkIDMyCmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIGdldF9zdWJzY3JpcHRpb24KZ2V0c3Vic2NyaXB0aW9uXzIwOgpwcm90byAxIDEKYnl0ZWNfMCAvLyAiIgpmcmFtZV9kaWcgLTEKYm94X2dldApzdG9yZSA1MApzdG9yZSA0OQpsb2FkIDUwCmFzc2VydApsb2FkIDQ5CmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIGlzX3N1YnNjcmliZXIKaXNzdWJzY3JpYmVyXzIxOgpwcm90byAxIDEKaW50Y18wIC8vIDAKYnl0ZWNfMCAvLyAiIgppbnRjXzAgLy8gMApmcmFtZV9kaWcgLTEKYm94X2xlbgpzdG9yZSA1MgpzdG9yZSA1MQpsb2FkIDUyCmJueiBpc3N1YnNjcmliZXJfMjFfbDIKaW50Y18wIC8vIDAKZnJhbWVfYnVyeSAwCmIgaXNzdWJzY3JpYmVyXzIxX2wzCmlzc3Vic2NyaWJlcl8yMV9sMjoKZnJhbWVfZGlnIC0xCmJveF9nZXQKc3RvcmUgNTQKc3RvcmUgNTMKbG9hZCA1NAphc3NlcnQKbG9hZCA1MwpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKcHVzaGludCAyNCAvLyAyNApleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIDIKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAo+CmZyYW1lX2J1cnkgMAppc3N1YnNjcmliZXJfMjFfbDM6CnJldHN1YgoKLy8gY2xhaW1fc3Vic2NyaXB0aW9uCmNsYWltc3Vic2NyaXB0aW9uXzIyOgpwcm90byAxIDAKdHhuIFNlbmRlcgpmcmFtZV9kaWcgLTEKYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCnN0b3JlIDU2CnN0b3JlIDU1CmxvYWQgNTYKLy8gU3Vic2NyaWJlciBub3Qgb3B0ZWQtaW4gZm9yIFN1YnNjcmlwdGlvbiBORlQKYXNzZXJ0CmZyYW1lX2RpZyAtMQpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwp0eG4gU2VuZGVyCmNhbGxzdWIgaW5uZXJ0cmFuc2Zlcm5mdF80CnJldHN1YgoKLy8gdHJhbnNmZXJfc3Vic2NyaXB0aW9uCnRyYW5zZmVyc3Vic2NyaXB0aW9uXzIzOgpwcm90byAyIDAKYnl0ZWNfMCAvLyAiIgp0eG4gU2VuZGVyCmJveF9sZW4Kc3RvcmUgNTgKc3RvcmUgNTcKbG9hZCA1OAovLyBDdXJyZW50IGFkZHJlc3Mgbm90IHN1YnNjcmliZWQKYXNzZXJ0CnR4biBTZW5kZXIKZnJhbWVfZGlnIC0xCmFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQpzdG9yZSA2MApzdG9yZSA1OQpsb2FkIDYwCmxvYWQgNTkKaW50Y18wIC8vIDAKPgomJgpieiB0cmFuc2ZlcnN1YnNjcmlwdGlvbl8yM19sMgpmcmFtZV9kaWcgLTEKdHhuIFNlbmRlcgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpjYWxsc3ViIGlubmVydHJhbnNmZXJuZnRfNAp0cmFuc2ZlcnN1YnNjcmlwdGlvbl8yM19sMjoKdHhuIFNlbmRlcgpib3hfZ2V0CnN0b3JlIDYyCnN0b3JlIDYxCmxvYWQgNjIKYXNzZXJ0CmxvYWQgNjEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAtMgpib3hfZGVsCnBvcApmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIDAKYm94X3B1dAp0eG4gU2VuZGVyCmJveF9kZWwKcG9wCnJldHN1YgoKLy8gdW5zdWJzY3JpYmUKdW5zdWJzY3JpYmVfMjQ6CnByb3RvIDEgMQppbnRjXzAgLy8gMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCnR4biBTZW5kZXIKYm94X2xlbgpzdG9yZSA2NApzdG9yZSA2Mwpsb2FkIDY0Ci8vIE5vdCBzdWJzY3JpYmVkCmFzc2VydAp0eG4gU2VuZGVyCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpsZW4KcHVzaGludCAzMiAvLyAzMgo9PQphc3NlcnQKZnJhbWVfZGlnIC0xCnR4bmFzIEFzc2V0cwpmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIDEKZnJhbWVfZGlnIDIKY2FsbHN1YiBpbm5lcmRlbGV0ZXN1YnNjcmlwdGlvbl82CmZyYW1lX2RpZyAtMQp0eG5hcyBBc3NldHMKZnJhbWVfYnVyeSAwCnJldHN1YgoKLy8gbWFya19mb3JfZGVsZXRpb24KbWFya2ZvcmRlbGV0aW9uXzI1Ogpwcm90byAxIDAKYnl0ZWNfMCAvLyAiIgp0eG4gU2VuZGVyCmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0Cj09Ci8vIHVuYXV0aG9yaXplZAphc3NlcnQKdHhuIFNlbmRlcgpieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldAo9PQovLyBPbmx5IG1hbmFnZXIgY2FuIG1hcmsgZm9yIGRlbGV0aW9uCmFzc2VydApmcmFtZV9kaWcgLTEKZ3R4bnMgU2VuZGVyCmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0Cj09Ci8vIE9ubHkgbWFuYWdlciBjYW4gbWFyayBmb3IgZGVsZXRpb24KYXNzZXJ0CmJ5dGVjIDExIC8vICJQcm9ncmFtIgppbnRjXzAgLy8gMApzdG9yZSA2NwppbnRjXzAgLy8gMApzdG9yZSA2OApieXRlY18wIC8vICIiCnN0b3JlIDY5CmJ5dGVjXzAgLy8gIiIKc3RvcmUgNzAKYnl0ZWNfMSAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8yCmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0CmNvbmNhdApzdG9yZSA2OQpsb2FkIDcwCmJ5dGVjXzMgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgNjcKaW50Y18yIC8vIDgKc3Vic3RyaW5nMwpjb25jYXQKbG9hZCA2OQpjb25jYXQKc3RvcmUgNzAKbG9hZCA2OApsb2FkIDY5CmxlbgorCmludGNfMSAvLyAxCi0Kc3RvcmUgNjgKaW50Y18yIC8vIDgKaW50Y18xIC8vIDEKKwpzdG9yZSA2NwpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8yCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwpjb25jYXQKc3RvcmUgNjkKbG9hZCA3MApieXRlY18zIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDY3CnB1c2hpbnQgMTIgLy8gMTIKc3Vic3RyaW5nMwpjb25jYXQKbG9hZCA2OQpjb25jYXQKc3RvcmUgNzAKbG9hZCA2OApsb2FkIDY5CmxlbgorCmludGNfMSAvLyAxCi0Kc3RvcmUgNjgKcHVzaGludCAxMiAvLyAxMgppbnRjXzEgLy8gMQorCnN0b3JlIDY3CmxvYWQgNzAKYnl0ZWNfMyAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCA2NwpkaWcgMQpsZW4Kc3Vic3RyaW5nMwpjb25jYXQKc3RvcmUgNzAKbG9hZCA3MApjb25jYXQKc2hhNTEyXzI1NgpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKbGVuCnB1c2hpbnQgMzIgLy8gMzIKPT0KYXNzZXJ0CmZyYW1lX2RpZyAtMQpndHhucyBSZWNlaXZlcgpmcmFtZV9kaWcgMAo9PQovLyBJbnZhbGlkIGxvY2tlciBhZGRyZXNzCmFzc2VydApieXRlY18yIC8vICJhY3RpdmVfc3VicyIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPgpibnogbWFya2ZvcmRlbGV0aW9uXzI1X2wyCmZyYW1lX2RpZyAtMQpndHhucyBBbW91bnQKaW50Y18wIC8vIDAKPT0KLy8gTm8gc3Vic2NyaXB0aW9ucyB0byBkZWxldGUsIHNvIGZlZSBtdXN0IGJlIDAKYXNzZXJ0CmIgbWFya2ZvcmRlbGV0aW9uXzI1X2wzCm1hcmtmb3JkZWxldGlvbl8yNV9sMjoKZnJhbWVfZGlnIC0xCmd0eG5zIEFtb3VudApnbG9iYWwgTWluVHhuRmVlCmludGNfMyAvLyAzCioKYnl0ZWNfMiAvLyAiYWN0aXZlX3N1YnMiCmFwcF9nbG9iYWxfZ2V0CioKPj0KLy8gTm90IGVub3VnaCBmdW5kcyB0byBkZWxldGUgYWxsIHN1YnNjcmlwdGlvbnMKYXNzZXJ0Cm1hcmtmb3JkZWxldGlvbl8yNV9sMzoKYnl0ZWMgNyAvLyAibGlmZWN5Y2xlIgppbnRjXzEgLy8gMQphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIGRlbGV0ZV9zdWJzY3JpcHRpb24KZGVsZXRlc3Vic2NyaXB0aW9uXzI2Ogpwcm90byAyIDAKYnl0ZWNfMCAvLyAiIgpieXRlYyA3IC8vICJsaWZlY3ljbGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09Ci8vIFN1YnNjcmlwdGlvbiBzZXJ2aWNlIG5vdCBtYXJrZWQgZm9yIGRlbGV0aW9uCmFzc2VydApieXRlYyAxMSAvLyAiUHJvZ3JhbSIKaW50Y18wIC8vIDAKc3RvcmUgNzEKaW50Y18wIC8vIDAKc3RvcmUgNzIKYnl0ZWNfMCAvLyAiIgpzdG9yZSA3MwpieXRlY18wIC8vICIiCnN0b3JlIDc0CmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0CmxlbgpieXRlY18wIC8vICIiCmNhbGxzdWIgZW5jb2RldXZhcmludGltcGxfMgpieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldApjb25jYXQKc3RvcmUgNzMKbG9hZCA3NApieXRlY18zIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDcxCmludGNfMiAvLyA4CnN1YnN0cmluZzMKY29uY2F0CmxvYWQgNzMKY29uY2F0CnN0b3JlIDc0CmxvYWQgNzIKbG9hZCA3MwpsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDcyCmludGNfMiAvLyA4CmludGNfMSAvLyAxCisKc3RvcmUgNzEKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCmxlbgpieXRlY18wIC8vICIiCmNhbGxzdWIgZW5jb2RldXZhcmludGltcGxfMgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKY29uY2F0CnN0b3JlIDczCmxvYWQgNzQKYnl0ZWNfMyAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCA3MQpwdXNoaW50IDEyIC8vIDEyCnN1YnN0cmluZzMKY29uY2F0CmxvYWQgNzMKY29uY2F0CnN0b3JlIDc0CmxvYWQgNzIKbG9hZCA3MwpsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDcyCnB1c2hpbnQgMTIgLy8gMTIKaW50Y18xIC8vIDEKKwpzdG9yZSA3MQpsb2FkIDc0CmJ5dGVjXzMgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgNzEKZGlnIDEKbGVuCnN1YnN0cmluZzMKY29uY2F0CnN0b3JlIDc0CmxvYWQgNzQKY29uY2F0CnNoYTUxMl8yNTYKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmxlbgpwdXNoaW50IDMyIC8vIDMyCj09CmFzc2VydApmcmFtZV9kaWcgMAp0eG4gR3JvdXBJbmRleApndHhucyBTZW5kZXIKPT0KLy8gUHJlY29uZGl0aW9ucyBmb3IgU01MIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkCmFzc2VydAp0eG4gR3JvdXBJbmRleApndHhucyBSZWtleVRvCmdsb2JhbCBaZXJvQWRkcmVzcwo9PQovLyBQcmVjb25kaXRpb25zIGZvciBTTUwgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQKYXNzZXJ0CnR4biBHcm91cEluZGV4Cmd0eG5zIENsb3NlUmVtYWluZGVyVG8KZ2xvYmFsIFplcm9BZGRyZXNzCj09Ci8vIFByZWNvbmRpdGlvbnMgZm9yIFNNTCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZAphc3NlcnQKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAtMQpjYWxsc3ViIGlubmVyZGVsZXRlc3Vic2NyaXB0aW9uXzYKcmV0c3ViCgovLyBkZWxldGUKZGVsZXRlXzI3Ogpwcm90byAwIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydApieXRlYyA3IC8vICJsaWZlY3ljbGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09Ci8vIEFwcCBzdGlsbCBoYXMgYWN0aXZlIHN1YnNjcmlwdGlvbnMgb3IgYWN0aXZlIGxpZmVjeWNsZSBzdGF0ZQphc3NlcnQKYnl0ZWNfMiAvLyAiYWN0aXZlX3N1YnMiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09Ci8vIEFwcCBzdGlsbCBoYXMgYWN0aXZlIHN1YnNjcmlwdGlvbnMgb3IgYWN0aXZlIGxpZmVjeWNsZSBzdGF0ZQphc3NlcnQKcmV0c3Vi"; - override clearProgram = - "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu"; - override methods: algosdk.ABIMethod[] = [ - new algosdk.ABIMethod({ - name: "create", - desc: "Creates a new instance of the subscription service with the provided parameters.", - args: [ - { - type: "string", - name: "version", - desc: "The version of the subscription service.", - }, - { - type: "string", - name: "name", - desc: "The name of the subscription service.", - }, - { - type: "address", - name: "manager", - desc: "Manager of the subscription service.", - }, - { - type: "uint64", - name: "sub_type", - desc: "The type of subscription service (e.g., monthly, yearly).", - }, - { - type: "uint64", - name: "price", - desc: "The price of the subscription in the specified coin.", - }, - { - type: "uint64", - name: "max_subs", - desc: "The maximum number of allowed subscriptions.", - }, - { - type: "uint64", - name: "coin_id", - desc: "The ID of the coin used for subscription payments.", - }, - ], - returns: { type: "void", desc: "" }, - }), - new algosdk.ABIMethod({ - name: "update_manager", - desc: "Updates the manager account of the subscription service.", - args: [ - { - type: "address", - name: "new_manager_account", - desc: "The new manager account address.", - }, - ], - returns: { type: "void", desc: "" }, - }), - new algosdk.ABIMethod({ - name: "get_discount", - desc: "Returns the discount for the specified expiration type.", - args: [ - { - type: "uint64", - name: "expiration_type", - desc: "The expiration type of the discount.", - }, - ], - returns: { - type: "(uint64,uint64,uint64,uint64,uint64,uint64)", - desc: "An expression that returns the discount.", - }, - }), - new algosdk.ABIMethod({ - name: "create_discount", - desc: "Creates a new discount for the subscription service.", - args: [ - { type: "uint64", name: "expiration_type", desc: "" }, - { type: "uint64", name: "discount_type", desc: "" }, - { type: "uint64", name: "discount_value", desc: "" }, - { type: "uint64", name: "expires_in", desc: "" }, - { type: "pay", name: "fee_txn", desc: "" }, - ], - returns: { type: "void", desc: "" }, - }), - new algosdk.ABIMethod({ - name: "delete_discount", - desc: "Deletes a discount for the subscription service.", - args: [{ type: "uint64", name: "expiration_type", desc: "" }], - returns: { type: "void", desc: "" }, - }), - new algosdk.ABIMethod({ - name: "subscribe", - desc: "Subscribes a user to the subscription service and creates a new\nsubscription.", - args: [ - { - type: "address", - name: "subscriber_account", - desc: "The subscriber's account address.", - }, - { type: "uint64", name: "expiration_type", desc: "" }, - { - type: "pay", - name: "fee_txn", - desc: "The transaction for the subscription fee payment.", - }, - { - type: "txn", - name: "subscribe_pay_txn", - desc: "The transaction representing the payment for the subscription. Can be either abi.PaymentTransaction or abi.AssetTransferTransaction.", - }, - ], - returns: { - type: "uint64", - desc: "An expression that subscribes the user and creates a new subscription.", - }, - }), - new algosdk.ABIMethod({ - name: "get_subscription", - desc: "Retrieves the subscription details of a given subscriber.", - args: [ - { - type: "address", - name: "subscriber", - desc: "The subscriber address.", - }, - ], - returns: { - type: "(uint64,uint64,uint64,uint64,uint64)", - desc: "An expression that retrieves the subscription details.", - }, - }), - new algosdk.ABIMethod({ - name: "is_subscriber", - desc: "Checks if a given address is a subscriber of the subscription service.", - args: [ - { - type: "address", - name: "subscriber", - desc: "The subscriber address.", - }, - ], - returns: { - type: "uint64", - desc: "An expression that checks if the address is a subscriber.", - }, - }), - new algosdk.ABIMethod({ - name: "claim_subscription", - desc: "Allows a subscriber to claim their subscription.", - args: [{ type: "uint64", name: "subscription_id", desc: "" }], - returns: { type: "void", desc: "" }, - }), - new algosdk.ABIMethod({ - name: "transfer_subscription", - desc: "Transfers a subscription from the sender's address to a new address.", - args: [ - { - type: "address", - name: "new_address", - desc: "The new address to transfer the subscription to.", - }, - { type: "uint64", name: "subscription_id", desc: "" }, - ], - returns: { type: "void", desc: "" }, - }), - new algosdk.ABIMethod({ - name: "unsubscribe", - desc: "Unsubscribes a user from the subscription service and deletes the\nsubscription.", - args: [ - { type: "asset", name: "sub_id", desc: "The subscription ASA ID." }, - ], - returns: { - type: "uint64", - desc: "An expression that unsubscribes the user and deletes the subscription.", - }, - }), - new algosdk.ABIMethod({ - name: "mark_for_deletion", - desc: "Marks the subscription service for deletion. Can only be called by the\nmanager account.", - args: [ - { - type: "pay", - name: "locker_fund_txn", - desc: "The locker fund transaction.", - }, - ], - returns: { type: "void", desc: "" }, - }), - new algosdk.ABIMethod({ - name: "delete_subscription", - desc: "Deletes a subscription for a given subscriber. Can only be called by the\nmanager account.", - args: [ - { - type: "address", - name: "subscriber", - desc: "The subscriber address whose subscription needs to be deleted.", - }, - { - type: "uint64", - name: "subscription_id", - desc: "The subscription ID to delete.", - }, - ], - returns: { type: "void", desc: "" }, - }), - new algosdk.ABIMethod({ - name: "delete", - desc: "Deletes the subscription service. Can only be called by the manager account\nwhen there are no active subscriptions or the lifecycle state is not active.", - args: [], - returns: { type: "void", desc: "" }, - }), - ]; - async create( - args: { - version: string; - name: string; - manager: string; - sub_type: bigint; - price: bigint; - max_subs: bigint; - coin_id: bigint; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.create( - { - version: args.version, - name: args.name, - manager: args.manager, - sub_type: args.sub_type, - price: args.price, - max_subs: args.max_subs, - coin_id: args.coin_id, - }, - txnParams - ) - ); - return new bkr.ABIResult(result); - } - async update_manager( - args: { - new_manager_account: string; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.update_manager( - { new_manager_account: args.new_manager_account }, - txnParams - ) - ); - return new bkr.ABIResult(result); - } - async get_discount( - args: { - expiration_type: bigint; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.get_discount( - { expiration_type: args.expiration_type }, - txnParams - ) - ); - return new bkr.ABIResult( - result, - Discount.decodeResult(result.returnValue) - ); - } - async create_discount( - args: { - expiration_type: bigint; - discount_type: bigint; - discount_value: bigint; - expires_in: bigint; - fee_txn: algosdk.TransactionWithSigner | algosdk.Transaction; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.create_discount( - { - expiration_type: args.expiration_type, - discount_type: args.discount_type, - discount_value: args.discount_value, - expires_in: args.expires_in, - fee_txn: args.fee_txn, - }, - txnParams - ) - ); - return new bkr.ABIResult(result); - } - async delete_discount( - args: { - expiration_type: bigint; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.delete_discount( - { expiration_type: args.expiration_type }, - txnParams - ) - ); - return new bkr.ABIResult(result); - } - async subscribe( - args: { - subscriber_account: string; - expiration_type: bigint; - fee_txn: algosdk.TransactionWithSigner | algosdk.Transaction; - subscribe_pay_txn: algosdk.TransactionWithSigner | algosdk.Transaction; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.subscribe( - { - subscriber_account: args.subscriber_account, - expiration_type: args.expiration_type, - fee_txn: args.fee_txn, - subscribe_pay_txn: args.subscribe_pay_txn, - }, - txnParams - ) - ); - return new bkr.ABIResult(result, result.returnValue as bigint); - } - async get_subscription( - args: { - subscriber: string; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.get_subscription( - { subscriber: args.subscriber }, - txnParams - ) - ); - return new bkr.ABIResult( - result, - Subscription.decodeResult(result.returnValue) - ); - } - async is_subscriber( - args: { - subscriber: string; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.is_subscriber( - { subscriber: args.subscriber }, - txnParams - ) - ); - return new bkr.ABIResult(result, result.returnValue as bigint); - } - async claim_subscription( - args: { - subscription_id: bigint; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.claim_subscription( - { subscription_id: args.subscription_id }, - txnParams - ) - ); - return new bkr.ABIResult(result); - } - async transfer_subscription( - args: { - new_address: string; - subscription_id: bigint; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.transfer_subscription( - { - new_address: args.new_address, - subscription_id: args.subscription_id, - }, - txnParams - ) - ); - return new bkr.ABIResult(result); - } - async unsubscribe( - args: { - sub_id: bigint; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.unsubscribe({ sub_id: args.sub_id }, txnParams) - ); - return new bkr.ABIResult(result, result.returnValue as bigint); - } - async mark_for_deletion( - args: { - locker_fund_txn: algosdk.TransactionWithSigner | algosdk.Transaction; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.mark_for_deletion( - { locker_fund_txn: args.locker_fund_txn }, - txnParams - ) - ); - return new bkr.ABIResult(result); - } - async delete_subscription( - args: { - subscriber: string; - subscription_id: bigint; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.delete_subscription( - { subscriber: args.subscriber, subscription_id: args.subscription_id }, - txnParams - ) - ); - return new bkr.ABIResult(result); - } - async delete( - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute(await this.compose.delete(txnParams)); - return new bkr.ABIResult(result); - } - compose = { - create: async ( - args: { - version: string; - name: string; - manager: string; - sub_type: bigint; - price: bigint; - max_subs: bigint; - coin_id: bigint; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "create"), - { - version: args.version, - name: args.name, - manager: args.manager, - sub_type: args.sub_type, - price: args.price, - max_subs: args.max_subs, - coin_id: args.coin_id, - }, - txnParams, - atc - ); - }, - update_manager: async ( - args: { - new_manager_account: string; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "update_manager"), - { new_manager_account: args.new_manager_account }, - txnParams, - atc - ); - }, - get_discount: async ( - args: { - expiration_type: bigint; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "get_discount"), - { expiration_type: args.expiration_type }, - txnParams, - atc - ); - }, - create_discount: async ( - args: { - expiration_type: bigint; - discount_type: bigint; - discount_value: bigint; - expires_in: bigint; - fee_txn: algosdk.TransactionWithSigner | algosdk.Transaction; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "create_discount"), - { - expiration_type: args.expiration_type, - discount_type: args.discount_type, - discount_value: args.discount_value, - expires_in: args.expires_in, - fee_txn: args.fee_txn, - }, - txnParams, - atc - ); - }, - delete_discount: async ( - args: { - expiration_type: bigint; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "delete_discount"), - { expiration_type: args.expiration_type }, - txnParams, - atc - ); - }, - subscribe: async ( - args: { - subscriber_account: string; - expiration_type: bigint; - fee_txn: algosdk.TransactionWithSigner | algosdk.Transaction; - subscribe_pay_txn: algosdk.TransactionWithSigner | algosdk.Transaction; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "subscribe"), - { - subscriber_account: args.subscriber_account, - expiration_type: args.expiration_type, - fee_txn: args.fee_txn, - subscribe_pay_txn: args.subscribe_pay_txn, - }, - txnParams, - atc - ); - }, - get_subscription: async ( - args: { - subscriber: string; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "get_subscription"), - { subscriber: args.subscriber }, - txnParams, - atc - ); - }, - is_subscriber: async ( - args: { - subscriber: string; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "is_subscriber"), - { subscriber: args.subscriber }, - txnParams, - atc - ); - }, - claim_subscription: async ( - args: { - subscription_id: bigint; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "claim_subscription"), - { subscription_id: args.subscription_id }, - txnParams, - atc - ); - }, - transfer_subscription: async ( - args: { - new_address: string; - subscription_id: bigint; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "transfer_subscription"), - { - new_address: args.new_address, - subscription_id: args.subscription_id, - }, - txnParams, - atc - ); - }, - unsubscribe: async ( - args: { - sub_id: bigint; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "unsubscribe"), - { sub_id: args.sub_id }, - txnParams, - atc - ); - }, - mark_for_deletion: async ( - args: { - locker_fund_txn: algosdk.TransactionWithSigner | algosdk.Transaction; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "mark_for_deletion"), - { locker_fund_txn: args.locker_fund_txn }, - txnParams, - atc - ); - }, - delete_subscription: async ( - args: { - subscriber: string; - subscription_id: bigint; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "delete_subscription"), - { subscriber: args.subscriber, subscription_id: args.subscription_id }, - txnParams, - atc - ); - }, - delete: async ( - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - const deleteParams = await this._deleteParameters({ ...txnParams }); - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "delete"), - {}, - deleteParams, - atc - ); - }, - }; -} - -/* c8 ignore stop */ diff --git a/src/contracts/sml_client.ts b/src/contracts/sml_client.ts deleted file mode 100644 index 4c15e12..0000000 --- a/src/contracts/sml_client.ts +++ /dev/null @@ -1,536 +0,0 @@ -/* c8 ignore start */ -export const SML_TEAL = ` -#pragma version 8 -intcblock 1 0 2 4 -pushbytes TMPL_CREATOR_ADDRESS // TMPL_CREATOR_ADDRESS -store 0 -pushbytes TMPL_REGISTRY_ADDRESS // TMPL_REGISTRY_ADDRESS -store 1 -global GroupSize -intc_2 // 2 -== -bnz main_l39 -intc_1 // 0 -main_l2: -bnz main_l38 -global GroupSize -intc_2 // 2 -== -bnz main_l37 -intc_1 // 0 -main_l5: -bnz main_l36 -global GroupSize -intc_0 // 1 -== -bnz main_l35 -intc_1 // 0 -main_l8: -bnz main_l34 -global GroupSize -intc_2 // 2 -== -bnz main_l33 -global GroupSize -pushint 3 // 3 -== -bnz main_l32 -intc_1 // 0 -main_l12: -bnz main_l27 -global GroupSize -intc_2 // 2 -== -bnz main_l26 -intc_1 // 0 -main_l15: -bnz main_l25 -global GroupSize -pushint 17 // 17 -<= -bnz main_l21 -intc_1 // 0 -main_l18: -bnz main_l20 -err -main_l20: -intc_0 // 1 -b main_l40 -main_l21: -intc_1 // 0 -store 2 -intc_1 // 0 -store 3 -intc_1 // 0 -store 2 -main_l22: -load 2 -global GroupSize -< -bnz main_l24 -load 3 -global GroupSize -== -b main_l18 -main_l24: -load 2 -gtxns TypeEnum -pushint 6 // appl -== -assert -load 2 -gtxns OnCompletion -intc_1 // NoOp -== -assert -load 2 -gtxns CloseRemainderTo -global ZeroAddress -== -assert -load 2 -gtxns RekeyTo -global ZeroAddress -== -assert -load 2 -gtxns Fee -intc_1 // 0 -== -load 2 -gtxns Fee -global MinTxnFee -pushint 3 // 3 -global GroupSize -* -* -<= -|| -assert -load 3 -intc_0 // 1 -+ -store 3 -load 2 -intc_0 // 1 -+ -store 2 -b main_l22 -main_l25: -load 0 -callsub assertrevenueclaimconditions_7 -b main_l40 -main_l26: -intc_1 // 0 -gtxns TypeEnum -intc_0 // pay -== -intc_0 // 1 -gtxns TypeEnum -intc_3 // axfer -== -intc_0 // 1 -gtxns TypeEnum -intc_0 // pay -== -|| -&& -b main_l15 -main_l27: -global GroupSize -intc_2 // 2 -== -bnz main_l31 -global GroupSize -pushint 3 // 3 -== -bnz main_l30 -intc_1 // 0 -b main_l40 -main_l30: -load 1 -callsub assertappasaoptinconditions_4 -b main_l40 -main_l31: -load 1 -callsub assertappoptinconditions_3 -b main_l40 -main_l32: -intc_1 // 0 -gtxns TypeEnum -intc_0 // pay -== -intc_0 // 1 -gtxns TypeEnum -pushint 6 // appl -== -&& -intc_0 // 1 -gtxns OnCompletion -intc_0 // OptIn -== -&& -intc_2 // 2 -gtxns TypeEnum -intc_3 // axfer -== -&& -b main_l12 -main_l33: -intc_1 // 0 -gtxns TypeEnum -intc_0 // pay -== -intc_0 // 1 -gtxns TypeEnum -pushint 6 // appl -== -&& -intc_0 // 1 -gtxns OnCompletion -intc_0 // OptIn -== -&& -b main_l12 -main_l34: -intc_1 // 0 -pushint 6 // appl -callsub checkbaselinepreconditions_0 -intc_1 // 0 -gtxns Fee -global MinTxnFee -global GroupSize -* -<= -// fee not correct -assert -intc_0 // 1 -b main_l40 -main_l35: -intc_1 // 0 -gtxns TypeEnum -pushint 6 // appl -== -intc_1 // 0 -gtxns OnCompletion -intc_2 // CloseOut -== -&& -b main_l8 -main_l36: -load 1 -callsub assertcoinoptinconditions_6 -b main_l40 -main_l37: -intc_1 // 0 -gtxns TypeEnum -intc_0 // pay -== -intc_0 // 1 -gtxns TypeEnum -intc_3 // axfer -== -&& -intc_0 // 1 -gtxns AssetReceiver -load 0 -!= -&& -b main_l5 -main_l38: -load 0 -load 1 -callsub assertregistryrekeyconditions_5 -b main_l40 -main_l39: -intc_1 // 0 -gtxns TypeEnum -intc_0 // pay -== -intc_0 // 1 -gtxns TypeEnum -intc_0 // pay -== -&& -intc_0 // 1 -gtxns Receiver -load 0 -!= -&& -b main_l2 -main_l40: -return - -// check_baseline_preconditions -checkbaselinepreconditions_0: -proto 2 0 -frame_dig -2 -global GroupSize -< -// txn_id out of bounds -assert -frame_dig -2 -gtxns TypeEnum -frame_dig -1 -== -// wrong txn type -assert -frame_dig -2 -gtxns CloseRemainderTo -global ZeroAddress -== -// close_remainder_to not zero -assert -frame_dig -2 -gtxns TypeEnum -intc_3 // axfer -== -bz checkbaselinepreconditions_0_l2 -frame_dig -2 -gtxns AssetCloseTo -global ZeroAddress -== -// asset_close_to not zero -assert -checkbaselinepreconditions_0_l2: -retsub - -// check_baseline_preconditions_with_fee -checkbaselinepreconditionswithfee_1: -proto 3 0 -frame_dig -3 -frame_dig -1 -callsub checkbaselinepreconditions_0 -frame_dig -3 -gtxns Fee -frame_dig -2 -== -// fee not correct -assert -retsub - -// check_baseline_preconditions_with_rekey -checkbaselinepreconditionswithrekey_2: -proto 3 0 -frame_dig -3 -frame_dig -2 -frame_dig -1 -callsub checkbaselinepreconditionswithfee_1 -frame_dig -3 -gtxns RekeyTo -global ZeroAddress -== -// rekey_to incorrect -assert -retsub - -// assert_app_optin_conditions -assertappoptinconditions_3: -proto 1 1 -intc_1 // 0 -global MinTxnFee -global GroupSize -* -intc_0 // pay -callsub checkbaselinepreconditionswithrekey_2 -intc_0 // 1 -intc_1 // 0 -pushint 6 // appl -callsub checkbaselinepreconditionswithrekey_2 -intc_1 // 0 -gtxns Sender -frame_dig -1 -== -// wrong sender -assert -intc_0 // 1 -gtxns OnCompletion -intc_0 // OptIn -== -// wrong on_complete -assert -intc_0 // 1 -retsub - -// assert_app_asa_optin_conditions -assertappasaoptinconditions_4: -proto 1 1 -intc_2 // 2 -intc_1 // 0 -intc_3 // axfer -callsub checkbaselinepreconditionswithrekey_2 -intc_2 // 2 -gtxns AssetSender -intc_2 // 2 -gtxns Receiver -== -// wrong sender -assert -intc_2 // 2 -gtxns AssetAmount -intc_1 // 0 -== -// wrong amount -assert -frame_dig -1 -callsub assertappoptinconditions_3 -retsub - -// assert_registry_rekey_conditions -assertregistryrekeyconditions_5: -proto 2 1 -intc_1 // 0 -global MinTxnFee -global GroupSize -* -intc_0 // pay -callsub checkbaselinepreconditionswithrekey_2 -intc_0 // 1 -intc_1 // 0 -intc_0 // pay -callsub checkbaselinepreconditionswithfee_1 -intc_1 // 0 -gtxns Sender -frame_dig -2 -== -// wrong sender -assert -intc_1 // 0 -gtxns Amount -pushint 100000 // 100000 ->= -// payment too low -assert -intc_0 // 1 -gtxns Sender -intc_0 // 1 -gtxns Receiver -== -// sender not receiver -assert -intc_0 // 1 -gtxns Amount -intc_1 // 0 -== -// amount not zero -assert -intc_0 // 1 -gtxns RekeyTo -frame_dig -1 -== -intc_0 // 1 -gtxns RekeyTo -global ZeroAddress -== -|| -intc_0 // 1 -== -// rekey_to not registry or zero -assert -intc_0 // 1 -retsub - -// assert_coin_optin_conditions -assertcoinoptinconditions_6: -proto 1 1 -intc_1 // 0 -global MinTxnFee -intc_2 // 2 -* -intc_0 // pay -callsub checkbaselinepreconditionswithrekey_2 -intc_0 // 1 -global MinTxnFee -intc_2 // 2 -* -intc_3 // axfer -callsub checkbaselinepreconditionswithrekey_2 -intc_0 // 1 -gtxns AssetSender -global ZeroAddress -== -// wrong sender -assert -intc_1 // 0 -gtxns Sender -frame_dig -1 -== -// wrong sender -assert -intc_1 // 0 -gtxns Receiver -intc_0 // 1 -gtxns Sender -== -// wrong receiver -assert -intc_1 // 0 -gtxns Amount -pushint 210000 // 210000 ->= -// payment too low -assert -intc_0 // 1 -gtxns Sender -intc_0 // 1 -gtxns AssetReceiver -== -// wrong sender -assert -intc_0 // 1 -gtxns AssetAmount -intc_1 // 0 -== -// wrong amount -assert -intc_0 // 1 -retsub - -// assert_revenue_claim_conditions -assertrevenueclaimconditions_7: -proto 1 1 -intc_1 // 0 -global MinTxnFee -global GroupSize -* -intc_0 // pay -callsub checkbaselinepreconditionswithrekey_2 -intc_0 // 1 -gtxns TypeEnum -intc_3 // axfer -== -bnz assertrevenueclaimconditions_7_l2 -intc_0 // 1 -intc_1 // 0 -intc_0 // pay -callsub checkbaselinepreconditionswithrekey_2 -b assertrevenueclaimconditions_7_l3 -assertrevenueclaimconditions_7_l2: -intc_0 // 1 -intc_1 // 0 -intc_3 // axfer -callsub checkbaselinepreconditionswithrekey_2 -assertrevenueclaimconditions_7_l3: -intc_1 // 0 -gtxns Sender -frame_dig -1 -== -// wrong sender -assert -intc_0 // 1 -gtxns Receiver -frame_dig -1 -== -intc_0 // 1 -gtxns AssetReceiver -frame_dig -1 -== -|| -intc_0 // 1 -== -// wrong receiver -assert -intc_0 // 1 -retsub -`; -/* c8 ignore stop */ diff --git a/src/contracts/smr_client.ts b/src/contracts/smr_client.ts deleted file mode 100644 index e1d5795..0000000 --- a/src/contracts/smr_client.ts +++ /dev/null @@ -1,307 +0,0 @@ -/* c8 ignore start */ -import algosdk from "algosdk"; -import * as bkr from "beaker-ts"; -export class PendingTransfer { - locker = ""; - smi_id = BigInt(0); - static codec: algosdk.ABIType = algosdk.ABIType.from("(address,uint64)"); - static fields: string[] = ["locker", "smi_id"]; - static decodeResult(val: algosdk.ABIValue | undefined): PendingTransfer { - return bkr.decodeNamedTuple(val, PendingTransfer.fields) as PendingTransfer; - } - static decodeBytes(val: Uint8Array): PendingTransfer { - return bkr.decodeNamedTuple( - PendingTransfer.codec.decode(val), - PendingTransfer.fields - ) as PendingTransfer; - } -} -export class SMR extends bkr.ApplicationClient { - desc = ""; - override appSchema: bkr.Schema = { - declared: { - version: { - type: bkr.AVMType.bytes, - key: "version", - desc: "", - static: false, - }, - }, - reserved: {}, - }; - override acctSchema: bkr.Schema = { declared: {}, reserved: {} }; - override approvalProgram = - "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSA4IDEyIDEyOCAyNTUgMjAwMDAwIDEwMDAwMApieXRlY2Jsb2NrIDB4IDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OSAweDUwNzI2ZjY3NzI2MTZkIDB4MTUxZjdjNzUKdHhuIE51bUFwcEFyZ3MKaW50Y18wIC8vIDAKPT0KYm56IG1haW5fbDEyCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MjE1NTQwMmQgLy8gImFkZChzdHJpbmcsc3RyaW5nLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCxhZGRyZXNzLGFkZHJlc3MscGF5KXVpbnQ2NCIKPT0KYm56IG1haW5fbDExCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4ZmVlZmM4ZTIgLy8gInRyYW5zZmVyX3NtaSh1aW50NjQsYWRkcmVzcyxhZGRyZXNzLGFkZHJlc3MscGF5KShhZGRyZXNzLHVpbnQ2NCkiCj09CmJueiBtYWluX2wxMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDJmNjFlMDQyIC8vICJjbGFpbV9zbWkoYWRkcmVzcyxhcHBsaWNhdGlvbix1aW50NjQpdm9pZCIKPT0KYm56IG1haW5fbDkKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg0ZGI3NDI5MiAvLyAicmVrZXlfbG9ja2VyX2JhY2soYWRkcmVzcyl2b2lkIgo9PQpibnogbWFpbl9sOAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDNmMTI5OTc5IC8vICJkZWxldGVfc21pKHVpbnQ2NCl2b2lkIgo9PQpibnogbWFpbl9sNwplcnIKbWFpbl9sNzoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpidG9pCmNhbGxzdWIgZGVsZXRlc21pXzcKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDg6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKY2FsbHN1YiByZWtleWxvY2tlcmJhY2tfNgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sOToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpzdG9yZSAxNgp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmludGNfMCAvLyAwCmdldGJ5dGUKc3RvcmUgMTcKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwpidG9pCnN0b3JlIDE4CmxvYWQgMTYKbG9hZCAxNwpsb2FkIDE4CmNhbGxzdWIgY2xhaW1zbWlfNQppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTA6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpzdG9yZSAxMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCnN0b3JlIDExCnR4bmEgQXBwbGljYXRpb25BcmdzIDMKc3RvcmUgMTIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNApzdG9yZSAxMwp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCnN0b3JlIDE0CmxvYWQgMTQKZ3R4bnMgVHlwZUVudW0KaW50Y18xIC8vIHBheQo9PQphc3NlcnQKbG9hZCAxMApsb2FkIDExCmxvYWQgMTIKbG9hZCAxMwpsb2FkIDE0CmNhbGxzdWIgdHJhbnNmZXJzbWlfNApzdG9yZSAxNQpieXRlY18zIC8vIDB4MTUxZjdjNzUKbG9hZCAxNQpjb25jYXQKbG9nCmludGNfMSAvLyAxCnJldHVybgptYWluX2wxMToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpzdG9yZSAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKc3RvcmUgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmJ0b2kKc3RvcmUgMgp0eG5hIEFwcGxpY2F0aW9uQXJncyA0CmJ0b2kKc3RvcmUgMwp0eG5hIEFwcGxpY2F0aW9uQXJncyA1CmJ0b2kKc3RvcmUgNAp0eG5hIEFwcGxpY2F0aW9uQXJncyA2CmJ0b2kKc3RvcmUgNQp0eG5hIEFwcGxpY2F0aW9uQXJncyA3CnN0b3JlIDYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOApzdG9yZSA3CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0Kc3RvcmUgOApsb2FkIDgKZ3R4bnMgVHlwZUVudW0KaW50Y18xIC8vIHBheQo9PQphc3NlcnQKbG9hZCAwCmxvYWQgMQpsb2FkIDIKbG9hZCAzCmxvYWQgNApsb2FkIDUKbG9hZCA2CmxvYWQgNwpsb2FkIDgKY2FsbHN1YiBhZGRfMwpzdG9yZSA5CmJ5dGVjXzMgLy8gMHgxNTFmN2M3NQpsb2FkIDkKaXRvYgpjb25jYXQKbG9nCmludGNfMSAvLyAxCnJldHVybgptYWluX2wxMjoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQpibnogbWFpbl9sMTQKZXJyCm1haW5fbDE0Ogp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAo9PQphc3NlcnQKY2FsbHN1YiBjcmVhdGVfMQppbnRjXzEgLy8gMQpyZXR1cm4KCi8vIGVuY29kZV91dmFyaW50X2ltcGwKZW5jb2RldXZhcmludGltcGxfMDoKcHJvdG8gMiAxCmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgLTIKaW50YyA0IC8vIDEyOAo+PQpibnogZW5jb2RldXZhcmludGltcGxfMF9sMgpmcmFtZV9kaWcgLTIKaW50YyA1IC8vIDI1NQomCml0b2IKZXh0cmFjdCA3IDEKYiBlbmNvZGV1dmFyaW50aW1wbF8wX2wzCmVuY29kZXV2YXJpbnRpbXBsXzBfbDI6CmZyYW1lX2RpZyAtMgpwdXNoaW50IDcgLy8gNwpzaHIKZnJhbWVfZGlnIC0yCmludGMgNSAvLyAyNTUKJgppbnRjIDQgLy8gMTI4CnwKaXRvYgpleHRyYWN0IDcgMQpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzAKZW5jb2RldXZhcmludGltcGxfMF9sMzoKY29uY2F0CnJldHN1YgoKLy8gY3JlYXRlCmNyZWF0ZV8xOgpwcm90byAwIDAKcHVzaGJ5dGVzIDB4NzY2NTcyNzM2OTZmNmUgLy8gInZlcnNpb24iCnB1c2hieXRlcyAweDMwMmUzMzJlMzAgLy8gIjAuMy4wIgphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIGlubmVyX29wdGluX3NtaV90b19sb2NrZXIKaW5uZXJvcHRpbnNtaXRvbG9ja2VyXzI6CnByb3RvIDMgMAppbnRjXzAgLy8gMApmcmFtZV9kaWcgLTIKaW50Y18wIC8vIDAKIT0KYm56IGlubmVyb3B0aW5zbWl0b2xvY2tlcl8yX2w0CmludGNfMCAvLyAwCmlubmVyb3B0aW5zbWl0b2xvY2tlcl8yX2wyOgpmcmFtZV9idXJ5IDAKaXR4bl9iZWdpbgppbnRjXzEgLy8gcGF5Cml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC0xCml0eG5fZmllbGQgUmVjZWl2ZXIKaW50YyA2IC8vIDIwMDAwMApmcmFtZV9kaWcgMAorCml0eG5fZmllbGQgQW1vdW50Cmdsb2JhbCBNaW5UeG5GZWUKcHVzaGludCAyIC8vIDIKKgppdHhuX2ZpZWxkIEZlZQppdHhuX25leHQKZnJhbWVfZGlnIC0xCml0eG5fZmllbGQgU2VuZGVyCnB1c2hpbnQgNiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KaW50Y18xIC8vIE9wdEluCml0eG5fZmllbGQgT25Db21wbGV0aW9uCmZyYW1lX2RpZyAtMwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKZnJhbWVfZGlnIC0yCmludGNfMCAvLyAwCiE9CmJ6IGlubmVyb3B0aW5zbWl0b2xvY2tlcl8yX2w1Cml0eG5fbmV4dApwdXNoaW50IDQgLy8gYXhmZXIKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTEKaXR4bl9maWVsZCBTZW5kZXIKZnJhbWVfZGlnIC0xCml0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEFzc2V0QW1vdW50CmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIFhmZXJBc3NldApiIGlubmVyb3B0aW5zbWl0b2xvY2tlcl8yX2w1CmlubmVyb3B0aW5zbWl0b2xvY2tlcl8yX2w0OgpwdXNoaW50IDIwMDAgLy8gMjAwMApiIGlubmVyb3B0aW5zbWl0b2xvY2tlcl8yX2wyCmlubmVyb3B0aW5zbWl0b2xvY2tlcl8yX2w1OgppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIGFkZAphZGRfMzoKcHJvdG8gOSAxCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIiIKaW50Y18wIC8vIDAKYnl0ZWNfMCAvLyAiIgpmcmFtZV9kaWcgLTEKZ3R4bnMgU2VuZGVyCmZyYW1lX2RpZyAtMwo9PQovLyBNYW5hZ2VyIGFkZHJlc3MgbXVzdCBtYXRjaCBmZWUgdHhuIHNlbmRlcgphc3NlcnQKZnJhbWVfZGlnIC0zCmZyYW1lX2J1cnkgMQppdHhuX2JlZ2luCnB1c2hpbnQgNiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KcHVzaGJ5dGVzIDB4MDgyMDA2MDAwMTA4MDM4MDAxZmYwMTI2MGYwMDA3NmQ2MTZlNjE2NzY1NzIwYjYxNjM3NDY5NzY2NTVmNzM3NTYyNzNlMTA1MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OTA1NzA3MjY5NjM2NTA0MTUxZjdjNzUwODczNzU2MjVmNzQ3OTcwNjUwOTZjNjk2NjY1NjM3OTYzNmM2NTA4NmQ2MTc4NWY3Mzc1NjI3MzBhNzQ2Zjc0NjE2YzVmNzM3NTYyNzMwNDZlNjE2ZDY1MDc1MDcyNmY2NzcyNjE2ZDA3NjM2ZjY5NmU1ZjY5NjQwYTYzNzI2NTYxNzQ2NTY0NWY2MTc0MDc3NjY1NzI3MzY5NmY2ZTMxMWIyMjEyNDAwMjg3MzYxYTAwODAwNDE3ZDcxNTVhMTI0MDAyMzYzNjFhMDA4MDA0Yzg2ZmRiMDExMjQwMDIxNzM2MWEwMDgwMDQwOTFlMTMyZjEyNDAwMWVmMzYxYTAwODAwNDc0ZWJhYTBiMTI0MDAxYTQzNjFhMDA4MDA0YTljMGVjYzAxMjQwMDE4NDM2MWEwMDgwMDRkYzcxNmU1MDEyNDAwMTM4MzYxYTAwODAwNGMxNjg2ZmVkMTI0MDAxMTEzNjFhMDA4MDA0MWVjNWU5OGExMjQwMDBlOTM2MWEwMDgwMDQzNTQ5Mzg2ODEyNDAwMGM5MzYxYTAwODAwNDdiMmVjYzMxMTI0MDAwOWUzNjFhMDA4MDA0OTJhOTBhZjYxMjQwMDA3NDM2MWEwMDgwMDQ4MmQ1N2ZjYzEyNDAwMDQ5MzYxYTAwODAwNDI4ZTFlYThmMTI0MDAwMWUzNjFhMDA4MDA0MjQzNzhkM2MxMjQwMDAwMTAwMzExOTgxMDUxMjMxMTgyMjEzMTA0NDg4MDllMjIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDM2MWEwMTM1NDkzNjFhMDIxNzM1NGEzNDQ5MzQ0YTg4MDkyMTIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDMxMTYyMzA5MzU0ODM0NDgzODEwMjMxMjQ0MzQ0ODg4MDg0NzIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDM2MWEwMTIyNTU4ODA4MDQzNTQ3MjcwNTM0NDcxNjUwYjAyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDEzNTQ1MzYxYTAyMTczNTQ2MzQ0NTM0NDY4ODA3OTYyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDExNzg4MDc2OTIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDM2MWEwMTg4MDcyMjM1NDQyNzA1MzQ0NDE2NTBiMDIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDM2MWEwMTg4MDZmNDM1NDMyNzA1MzQ0MzUwYjAyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDEzNTNlMzYxYTAyMTczNTNmMzExNjgxMDIwOTM1NDAzNDQwMzgxMDIzMTI0NDMxMTYyMzA5MzU0MTM0M2UzNDNmMzQ0MDM0NDE4ODA0ZjEzNTQyMjcwNTM0NDIxNjUwYjAyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDExNzg4MDRiOTIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDM2MWEwMTE3MzUzOTM2MWEwMjE3MzUzYTM2MWEwMzE3MzUzYjM2MWEwNDE3MzUzYzMxMTYyMzA5MzUzZDM0M2QzODEwMjMxMjQ0MzQzOTM0M2EzNDNiMzQzYzM0M2Q4ODA0MDMyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDExNzg4MDNkYzM1MzgyNzA1MzQzODUwYjAyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDE4ODAzYWUyMzQzMzExOTIyMTIzMTE4MjIxMjEwNDQzNjFhMDEzNTMxMzYxYTAyMzUzMjM2MWEwMzM1MzMzNjFhMDQxNzM1MzQzNjFhMDUxNzM1MzUzNjFhMDYxNzM1MzYzNjFhMDcxNzM1MzczNDMxMzQzMjM0MzMzNDM0MzQzNTM0MzYzNDM3ODgwMmZkMjM0MzMxMTkyMzEyNDAwMDEzMzExOTgxMDIxMjQwMDAwMTAwMzExODIyMTM0NDg4MDM0YjIzNDMzMTE4MjIxMzQ0ODgwMzNkMjM0MzhhMDEwMTgwMGEzMDMxMzIzMzM0MzUzNjM3MzgzOThiZmYyMzU4ODk4YTAxMDE4YmZmMjIxMjQwMDAyMjhiZmY4MTBhMGEyMjBkNDAwMDBkMjg4YmZmODEwYTE4ODhmZmNmNTA0MjAwMGU4YmZmODEwYTBhODhmZmQ3NDJmZmU5ODAwMTMwODk4YTAyMDE4YmZmOGJmZTIxMDQwZjQwMDAwYzhiZmUyMTA1MWExNjU3MDcwMTQyMDAxNDhiZmU4MTA3OTE4YmZlMjEwNTFhMjEwNDE5MTY1NzA3MDE4OGZmZDM1MDg5OGEwMzAxYjEyNWIyMTAyM2IyMjIyMmIyMjMyM2IyMjQ4YmZlYjIyNThiZmRiMjI2OGJmZmIyMjczMjBhYjIyOTMyMGFiMjJhMzIwYWIyMmIzMjBhYjIyYzIyYjIwMWIzYjQzYzg5OGEwMzAwYjE4MTA0YjIxMDhiZmRiMjExMjNiMjEyOGJmZWIyMTM4YmZmYjIxNDIyYjIwMWIzODk4YTAxMDBiMTI1YjIxMDhiZmZiMjIxMjJiMjAxYjM4OThhMDIwMDhiZmU4YmZmNzAwMDM1MjgzNTI3MzQyODM0MjcyMjBkMTA0MDAwMTU4YmZmODhmZmQ0MmE2NDIyMTM0MTAwMTUyYTJhNjQyMzA5Njc0MjAwMGM4YmZmOGJmZTMyMGE4OGZmOWY0MmZmZGY4YmZlYmM0ODg5OGEwMjAxOGJmZTIyMTI0MDAwNGI4YmZmMjMxMjQwMDAzOThiZmY4MTAyMTI0MDAwMjY4YmZmMjUxMjQwMDAxNDhiZmY4MTA0MTI0MDAwMDEwMDMyMDc4MTgwZTc4NDBmMDg0MjAwMjIzMjA3ODE4MDljYjUwNzA4NDIwMDE3MzIwNzgxODBjZWRhMDMwODQyMDAwYzMyMDc4MTgwOWE5ZTAxMDg0MjAwMDEyMjg5OGEwMTAwMjgyMjQ3MDUyODIyNDkyODQ5OGJmZjE2YmQzNTE0MzUxMzM0MTQ0MTAwMTU4YmZmMTZiZTM1MTYzNTE1MzQxNjQ0MzQxNThjMDA4YjAwMjQ1YjhjMDE4YjAwODExMDViOGMwMjhiMDA4MTE4NWI4YzAzOGIwMDgxMjA1YjhjMDQ4YjAwODEyODViOGMwNThiMDUyMzA4OGMwNjhiZmYxNjhiMDExNjUwOGIwMjE2NTA4YjAzMTY1MDhiMDQxNjUwOGIwNjE2NTA4YzA3OGJmZjE2YmM0ODhiZmYxNjhiMDdiZjg5OGEwMjAxMjgyMjQ3MDI4YmZlMTZiZDM1MTAzNTBmMzQxMDQwMDAwNSAvLyAweDA4MjAwNjAwMDEwODAzODAwMWZmMDEyNjBmMDAwNzZkNjE2ZTYxNjc2NTcyMGI2MTYzNzQ2OTc2NjU1ZjczNzU2MjczZTEwNTA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkwNTcwNzI2OTYzNjUwNDE1MWY3Yzc1MDg3Mzc1NjI1Zjc0Nzk3MDY1MDk2YzY5NjY2NTYzNzk2MzZjNjUwODZkNjE3ODVmNzM3NTYyNzMwYTc0NmY3NDYxNmM1ZjczNzU2MjczMDQ2ZTYxNmQ2NTA3NTA3MjZmNjc3MjYxNmQwNzYzNmY2OTZlNWY2OTY0MGE2MzcyNjU2MTc0NjU2NDVmNjE3NDA3NzY2NTcyNzM2OTZmNmUzMTFiMjIxMjQwMDI4NzM2MWEwMDgwMDQxN2Q3MTU1YTEyNDAwMjM2MzYxYTAwODAwNGM4NmZkYjAxMTI0MDAyMTczNjFhMDA4MDA0MDkxZTEzMmYxMjQwMDFlZjM2MWEwMDgwMDQ3NGViYWEwYjEyNDAwMWE0MzYxYTAwODAwNGE5YzBlY2MwMTI0MDAxODQzNjFhMDA4MDA0ZGM3MTZlNTAxMjQwMDEzODM2MWEwMDgwMDRjMTY4NmZlZDEyNDAwMTExMzYxYTAwODAwNDFlYzVlOThhMTI0MDAwZTkzNjFhMDA4MDA0MzU0OTM4NjgxMjQwMDBjOTM2MWEwMDgwMDQ3YjJlY2MzMTEyNDAwMDllMzYxYTAwODAwNDkyYTkwYWY2MTI0MDAwNzQzNjFhMDA4MDA0ODJkNTdmY2MxMjQwMDA0OTM2MWEwMDgwMDQyOGUxZWE4ZjEyNDAwMDFlMzYxYTAwODAwNDI0Mzc4ZDNjMTI0MDAwMDEwMDMxMTk4MTA1MTIzMTE4MjIxMzEwNDQ4ODA5ZTIyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDEzNTQ5MzYxYTAyMTczNTRhMzQ0OTM0NGE4ODA5MjEyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzMTE2MjMwOTM1NDgzNDQ4MzgxMDIzMTI0NDM0NDg4ODA4NDcyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDEyMjU1ODgwODA0MzU0NzI3MDUzNDQ3MTY1MGIwMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxMzU0NTM2MWEwMjE3MzU0NjM0NDUzNDQ2ODgwNzk2MjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxMTc4ODA3NjkyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDE4ODA3MjIzNTQ0MjcwNTM0NDQxNjUwYjAyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDE4ODA2ZjQzNTQzMjcwNTM0NDM1MGIwMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxMzUzZTM2MWEwMjE3MzUzZjMxMTY4MTAyMDkzNTQwMzQ0MDM4MTAyMzEyNDQzMTE2MjMwOTM1NDEzNDNlMzQzZjM0NDAzNDQxODgwNGYxMzU0MjI3MDUzNDQyMTY1MGIwMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxMTc4ODA0YjkyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDExNzM1MzkzNjFhMDIxNzM1M2EzNjFhMDMxNzM1M2IzNjFhMDQxNzM1M2MzMTE2MjMwOTM1M2QzNDNkMzgxMDIzMTI0NDM0MzkzNDNhMzQzYjM0M2MzNDNkODgwNDAzMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxMTc4ODAzZGMzNTM4MjcwNTM0Mzg1MGIwMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxODgwM2FlMjM0MzMxMTkyMjEyMzExODIyMTIxMDQ0MzYxYTAxMzUzMTM2MWEwMjM1MzIzNjFhMDMzNTMzMzYxYTA0MTczNTM0MzYxYTA1MTczNTM1MzYxYTA2MTczNTM2MzYxYTA3MTczNTM3MzQzMTM0MzIzNDMzMzQzNDM0MzUzNDM2MzQzNzg4MDJmZDIzNDMzMTE5MjMxMjQwMDAxMzMxMTk4MTAyMTI0MDAwMDEwMDMxMTgyMjEzNDQ4ODAzNGIyMzQzMzExODIyMTM0NDg4MDMzZDIzNDM4YTAxMDE4MDBhMzAzMTMyMzMzNDM1MzYzNzM4Mzk4YmZmMjM1ODg5OGEwMTAxOGJmZjIyMTI0MDAwMjI4YmZmODEwYTBhMjIwZDQwMDAwZDI4OGJmZjgxMGExODg4ZmZjZjUwNDIwMDBlOGJmZjgxMGEwYTg4ZmZkNzQyZmZlOTgwMDEzMDg5OGEwMjAxOGJmZjhiZmUyMTA0MGY0MDAwMGM4YmZlMjEwNTFhMTY1NzA3MDE0MjAwMTQ4YmZlODEwNzkxOGJmZTIxMDUxYTIxMDQxOTE2NTcwNzAxODhmZmQzNTA4OThhMDMwMWIxMjViMjEwMjNiMjIyMjJiMjIzMjNiMjI0OGJmZWIyMjU4YmZkYjIyNjhiZmZiMjI3MzIwYWIyMjkzMjBhYjIyYTMyMGFiMjJiMzIwYWIyMmMyMmIyMDFiM2I0M2M4OThhMDMwMGIxODEwNGIyMTA4YmZkYjIxMTIzYjIxMjhiZmViMjEzOGJmZmIyMTQyMmIyMDFiMzg5OGEwMTAwYjEyNWIyMTA4YmZmYjIyMTIyYjIwMWIzODk4YTAyMDA4YmZlOGJmZjcwMDAzNTI4MzUyNzM0MjgzNDI3MjIwZDEwNDAwMDE1OGJmZjg4ZmZkNDJhNjQyMjEzNDEwMDE1MmEyYTY0MjMwOTY3NDIwMDBjOGJmZjhiZmUzMjBhODhmZjlmNDJmZmRmOGJmZWJjNDg4OThhMDIwMThiZmUyMjEyNDAwMDRiOGJmZjIzMTI0MDAwMzk4YmZmODEwMjEyNDAwMDI2OGJmZjI1MTI0MDAwMTQ4YmZmODEwNDEyNDAwMDAxMDAzMjA3ODE4MGU3ODQwZjA4NDIwMDIyMzIwNzgxODA5Y2I1MDcwODQyMDAxNzMyMDc4MTgwY2VkYTAzMDg0MjAwMGMzMjA3ODE4MDlhOWUwMTA4NDIwMDAxMjI4OThhMDEwMDI4MjI0NzA1MjgyMjQ5Mjg0OThiZmYxNmJkMzUxNDM1MTMzNDE0NDEwMDE1OGJmZjE2YmUzNTE2MzUxNTM0MTY0NDM0MTU4YzAwOGIwMDI0NWI4YzAxOGIwMDgxMTA1YjhjMDI4YjAwODExODViOGMwMzhiMDA4MTIwNWI4YzA0OGIwMDgxMjg1YjhjMDU4YjA1MjMwODhjMDY4YmZmMTY4YjAxMTY1MDhiMDIxNjUwOGIwMzE2NTA4YjA0MTY1MDhiMDYxNjUwOGMwNzhiZmYxNmJjNDg4YmZmMTY4YjA3YmY4OThhMDIwMTI4MjI0NzAyOGJmZTE2YmQzNTEwMzUwZjM0MTA0MDAwMDUKaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW1QYWdlcwpwdXNoYnl0ZXMgMHg4YmZmNDIwMDY1OGJmZTE2YmUzNTEyMzUxMTM0MTI0NDM0MTE4YzAwOGIwMDI0NWI4YzAxOGIwMDgxMTA1YjhjMDI4YjAwODExODViOGMwMzhiMDMzMjA3MGM4YjAzMjIwZDEwNDAwMDMzOGIwMTIyMTI0MDAwMTk4YjAxMjMxMjQwMDAwNThiZmY0MjAwMjI4YmZlODhmZjJhOGJmZjhiMDIwOTQyMDAxNThiZmU4OGZmMWQ4YmZmOGJmZjhiMDIwYjgxNjQwYTA5NDIwMDAyOGJmZjhjMDA4OThhMDEwMTIyOGJmZjIyMTI0MDAwNDE4YmZmMjMxMjQwMDAzMjhiZmY4MTAyMTI0MDAwMjI4YmZmMjUxMjQwMDAxMjhiZmY4MTA0MTI0MDAwMDEwMDI3MDQ2NDgxMGMwYjQyMDAxYzI3MDQ2NDgxMDYwYjQyMDAxMzI3MDQ2NDI1MGI0MjAwMGIyNzA0NjQyMzBiNDIwMDAzMjcwNDY0OGMwMDhiZmY4YjAwODhmZjI3OGMwMDg5OGEwMTAwMjcwNjY0MjIxMjhiZmYyMzEyMTE4YmZmODEwMjEyMTE4YmZmMjUxMjExOGJmZjgxMDQxMjExNDQ4OThhMDcwMDJhMjI2NzI3MGMyMjY3MjcwZDIyNjcyNzA3MjI2NzI5MzIwOTY3MjcwODIyNjcyNzBhODAwNzY0NjU2NjYxNzU2Yzc0NjcyNzA0MjI2NzI3MDYyMjY3MjcwOTIyNjcyNzBlMjg2NzI3MGU4YmY5NTcwMjAwNjcyNzBhOGJmYTU3MDIwMDY3Mjk4YmZiNjcyNzA2OGJmYzY3MjcwNDhiZmQ2NzI3MDg4YmZlNjcyNzBjOGJmZjY3MjcwZDMyMDc2Nzg5OGEwMDAwODk4YTAwMDAyMzQzOGEwMTAwMzEwMDMyMDkxMjQ0Mjk2NDhiZmYxMzQ0Mjk4YmZmNjc4OThhMDEwMTI4OGJmZjE2YmUzNTAxMzUwMDM0MDE0NDM0MDA4YzAwODk4YTA1MDAyMjQ3MDIyODIyNDkyODQ5MzEwMDI5NjQxMjQ0OGJmZjM4MDAyOTY0MTI0NDhiZmYzODA4ODFjNDkwMDEwZjQ0OGJmYzIyMTI4YmZjMjMxMjExNDQ4YmZiMTZiZDM1MDMzNTAyMzQwMzIzMTM0NDMyMDc4YzAwOGJmZTIyMGQ0MDAwMDQyMjQyMDAwNThiMDA4YmZlMDg4YzAxMjI4YzAyOGJmYjE2OGJmYzE2NTA4YmZkMTY1MDhiMDExNjUwOGIwMDE2NTA4YjAyMTY1MDhjMDM4YmZiMTZiYzQ4OGJmYjE2OGIwM2JmODk4YTAxMDAzMTAwMjk2NDEyNDQ4YmZmMTZiZDM1MDUzNTA0MzQwNTIzMTI0NDhiZmYxNmJjNDg4OThhMDQwMTIyNDcwMjI4NDkyMjQ3MDMyODIyNDkyODQ5OGJmZDg4ZmVhMjI3MDY2NDhiZmQ4OGZjZjI4YzAxOGJmZDg4ZmUzODhjMDI4YmZjOGJmZTM4MDAxMjQ0MjcwYjIyMzUwNzIyMzUwODI4MzUwOTI4MzUwYTI5NjQxNTI4ODhmYzAxMjk2NDUwMzUwOTM0MGEyYjM0MDcyNDUyNTAzNDA5NTAzNTBhMzQwODM0MDkxNTA4MjMwOTM1MDgyNDIzMDgzNTA3MzIwOTE1Mjg4OGZiZDkzMjA5NTAzNTA5MzQwYTJiMzQwNzgxMGM1MjUwMzQwOTUwMzUwYTM0MDgzNDA5MTUwODIzMDkzNTA4ODEwYzIzMDgzNTA3MzQwYTJiMzQwNzRiMDExNTUyNTAzNTBhMzQwYTUwMDM4YzAzOGIwMzE1ODEyMDEyNDQ4YmZmMzgxMDIzMTI4YmZmMzgwODhiMDIxMjEwOGJmZjM4MDc4YjAzMTIxMDhiZmYzODEwODEwNDEyOGJmZjM4MTI4YjAyMTIxMDhiZmYzODE0OGIwMzEyMTAxMTQ0MjcwODY0MjIwZDQwMDAzYzhiZmNiZDM1MGMzNTBiMzQwYzQwMDAwOTJhMmE2NDIzMDg2NzQyMDAzMzhiZmNiZTM1MGUzNTBkMzQwZTQ0MzQwZDhjMDQ4YjA0ODExODViOGMwNThiMDUyMjEzNDAwMDAyMjI0MzhiMDUzMjA3MGM0NDQyMDAwYzJhNjQyMzA4MjcwODY0MGU0NDQyZmZiODI3MDkyNzA5NjQyMzA4Njc4MDAxMjMyNzA5NjQ4OGZhZGQ1MDgwMDMyMDJkMjA1MDI3MGE2NDUwODAwMzUzNTQ1MDgwNDI2OTcwNjY3MzNhMmYyZjYyNjE2Njc5NjI2NTY5NjM2NDY0N2EzNzZiNjI3NTc4NjE2YTZhMzY2MjZmNjIzNTYyNmE3MTc0Nzc2NTcxMzY3NzYzNjg2YjY0NmI2OTcxMzQ3Njc2Njg3NzcyNzc3MjZlNjUzNzY5N2EzNDY2MzIzNTc4Njk4OGZhZTUzNTA2MzQwNjIyMTM0NDI3MDY2NDhjMDYzNDA2OGMwNzMyMDc4YzA4OGIwNjE2OGIwNzE2NTA4YjA4MTY1MDhiMDExNjUwOGJmZDE2NTA4YzA5OGJmY2JjNDg4YmZjOGIwOWJmMzQwNjhjMDA4OThhMDEwMTI4OGJmZmJlMzUxODM1MTczNDE4NDQzNDE3OGMwMDg5OGEwMTAxMjIyODIyOGJmZmJkMzUxYTM1MTkzNDFhNDAwMDA2MjI4YzAwNDIwMDFjOGJmZmJlMzUxYzM1MWIzNDFjNDQzNDFiOGMwMThiMDE4MTE4NWI4YzAyOGIwMjMyMDcwZDhjMDA4OThhMDEwMDMxMDA4YmZmNzAwMDM1MWUzNTFkMzQxZTQ0OGJmZjMyMGEzMTAwODhmYTgwODk4YTAyMDAyODMxMDBiZDM1MjAzNTFmMzQyMDQ0MzEwMDhiZmY3MDAwMzUyMjM1MjEzNDIyMzQyMTIyMGQxMDQxMDAwOThiZmYzMTAwMzIwYTg4ZmE1NDMxMDBiZTM1MjQzNTIzMzQyNDQ0MzQyMzhjMDA4YmZlYmM0ODhiZmU4YjAwYmYzMTAwYmM0ODg5OGEwMTAxMjIyODIyMzEwMGJkMzUyNjM1MjUzNDI2NDQzMTAwOGMwMThiMDExNTgxMjAxMjQ0OGJmZmMwMzA4YzAyOGIwMThiMDI4OGZhM2M4YmZmYzAzMDhjMDA4OThhMDEwMDI4MzEwMDI5NjQxMjQ0MzEwMDI5NjQxMjQ0OGJmZjM4MDAyOTY0MTI0NDI3MGIyMjM1MjkyMjM1MmEyODM1MmIyODM1MmMyOTY0MTUyODg4Zjk3YTI5NjQ1MDM1MmIzNDJjMmIzNDI5MjQ1MjUwMzQyYjUwMzUyYzM0MmEzNDJiMTUwODIzMDkzNTJhMjQyMzA4MzUyOTMyMDkxNTI4ODhmOTUyMzIwOTUwMzUyYjM0MmMyYjM0Mjk4MTBjNTI1MDM0MmI1MDM1MmMzNDJhMzQyYjE1MDgyMzA5MzUyYTgxMGMyMzA4MzUyOTM0MmMyYjM0Mjk0YjAxMTU1MjUwMzUyYzM0MmM1MDAzOGMwMDhiMDAxNTgxMjAxMjQ0OGJmZjM4MDc4YjAwMTI0NDJhNjQyMjBkNDAwMDBhOGJmZjM4MDgyMjEyNDQ0MjAwMGQ4YmZmMzgwODMyMDAyNTBiMmE2NDBiMGY0NDI3MDcyMzY3ODk4YTAyMDAyODI3MDc2NDIzMTI0NDI3MGIyMjM1MmQyMjM1MmUyODM1MmYyODM1MzAyOTY0MTUyODg4ZjhjYzI5NjQ1MDM1MmYzNDMwMmIzNDJkMjQ1MjUwMzQyZjUwMzUzMDM0MmUzNDJmMTUwODIzMDkzNTJlMjQyMzA4MzUyZDMyMDkxNTI4ODhmOGE0MzIwOTUwMzUyZjM0MzAyYjM0MmQ4MTBjNTI1MDM0MmY1MDM1MzAzNDJlMzQyZjE1MDgyMzA5MzUyZTgxMGMyMzA4MzUyZDM0MzAyYjM0MmQ0YjAxMTU1MjUwMzUzMDM0MzA1MDAzOGMwMDhiMDAxNTgxMjAxMjQ0OGIwMDMxMTYzODAwMTI0NDMxMTYzODIwMzIwMzEyNDQzMTE2MzgwOTMyMDMxMjQ0OGJmZThiZmY4OGY4ZDc4OThhMDAwMDMxMDAzMjA5MTI0NDI3MDc2NDIzMTI0NDJhNjQyMjEyNDQ4OSAvLyAweDhiZmY0MjAwNjU4YmZlMTZiZTM1MTIzNTExMzQxMjQ0MzQxMThjMDA4YjAwMjQ1YjhjMDE4YjAwODExMDViOGMwMjhiMDA4MTE4NWI4YzAzOGIwMzMyMDcwYzhiMDMyMjBkMTA0MDAwMzM4YjAxMjIxMjQwMDAxOThiMDEyMzEyNDAwMDA1OGJmZjQyMDAyMjhiZmU4OGZmMmE4YmZmOGIwMjA5NDIwMDE1OGJmZTg4ZmYxZDhiZmY4YmZmOGIwMjBiODE2NDBhMDk0MjAwMDI4YmZmOGMwMDg5OGEwMTAxMjI4YmZmMjIxMjQwMDA0MThiZmYyMzEyNDAwMDMyOGJmZjgxMDIxMjQwMDAyMjhiZmYyNTEyNDAwMDEyOGJmZjgxMDQxMjQwMDAwMTAwMjcwNDY0ODEwYzBiNDIwMDFjMjcwNDY0ODEwNjBiNDIwMDEzMjcwNDY0MjUwYjQyMDAwYjI3MDQ2NDIzMGI0MjAwMDMyNzA0NjQ4YzAwOGJmZjhiMDA4OGZmMjc4YzAwODk4YTAxMDAyNzA2NjQyMjEyOGJmZjIzMTIxMThiZmY4MTAyMTIxMThiZmYyNTEyMTE4YmZmODEwNDEyMTE0NDg5OGEwNzAwMmEyMjY3MjcwYzIyNjcyNzBkMjI2NzI3MDcyMjY3MjkzMjA5NjcyNzA4MjI2NzI3MGE4MDA3NjQ2NTY2NjE3NTZjNzQ2NzI3MDQyMjY3MjcwNjIyNjcyNzA5MjI2NzI3MGUyODY3MjcwZThiZjk1NzAyMDA2NzI3MGE4YmZhNTcwMjAwNjcyOThiZmI2NzI3MDY4YmZjNjcyNzA0OGJmZDY3MjcwODhiZmU2NzI3MGM4YmZmNjcyNzBkMzIwNzY3ODk4YTAwMDA4OThhMDAwMDIzNDM4YTAxMDAzMTAwMzIwOTEyNDQyOTY0OGJmZjEzNDQyOThiZmY2Nzg5OGEwMTAxMjg4YmZmMTZiZTM1MDEzNTAwMzQwMTQ0MzQwMDhjMDA4OThhMDUwMDIyNDcwMjI4MjI0OTI4NDkzMTAwMjk2NDEyNDQ4YmZmMzgwMDI5NjQxMjQ0OGJmZjM4MDg4MWM0OTAwMTBmNDQ4YmZjMjIxMjhiZmMyMzEyMTE0NDhiZmIxNmJkMzUwMzM1MDIzNDAzMjMxMzQ0MzIwNzhjMDA4YmZlMjIwZDQwMDAwNDIyNDIwMDA1OGIwMDhiZmUwODhjMDEyMjhjMDI4YmZiMTY4YmZjMTY1MDhiZmQxNjUwOGIwMTE2NTA4YjAwMTY1MDhiMDIxNjUwOGMwMzhiZmIxNmJjNDg4YmZiMTY4YjAzYmY4OThhMDEwMDMxMDAyOTY0MTI0NDhiZmYxNmJkMzUwNTM1MDQzNDA1MjMxMjQ0OGJmZjE2YmM0ODg5OGEwNDAxMjI0NzAyMjg0OTIyNDcwMzI4MjI0OTI4NDk4YmZkODhmZWEyMjcwNjY0OGJmZDg4ZmNmMjhjMDE4YmZkODhmZTM4OGMwMjhiZmM4YmZlMzgwMDEyNDQyNzBiMjIzNTA3MjIzNTA4MjgzNTA5MjgzNTBhMjk2NDE1Mjg4OGZjMDEyOTY0NTAzNTA5MzQwYTJiMzQwNzI0NTI1MDM0MDk1MDM1MGEzNDA4MzQwOTE1MDgyMzA5MzUwODI0MjMwODM1MDczMjA5MTUyODg4ZmJkOTMyMDk1MDM1MDkzNDBhMmIzNDA3ODEwYzUyNTAzNDA5NTAzNTBhMzQwODM0MDkxNTA4MjMwOTM1MDg4MTBjMjMwODM1MDczNDBhMmIzNDA3NGIwMTE1NTI1MDM1MGEzNDBhNTAwMzhjMDM4YjAzMTU4MTIwMTI0NDhiZmYzODEwMjMxMjhiZmYzODA4OGIwMjEyMTA4YmZmMzgwNzhiMDMxMjEwOGJmZjM4MTA4MTA0MTI4YmZmMzgxMjhiMDIxMjEwOGJmZjM4MTQ4YjAzMTIxMDExNDQyNzA4NjQyMjBkNDAwMDNjOGJmY2JkMzUwYzM1MGIzNDBjNDAwMDA5MmEyYTY0MjMwODY3NDIwMDMzOGJmY2JlMzUwZTM1MGQzNDBlNDQzNDBkOGMwNDhiMDQ4MTE4NWI4YzA1OGIwNTIyMTM0MDAwMDIyMjQzOGIwNTMyMDcwYzQ0NDIwMDBjMmE2NDIzMDgyNzA4NjQwZTQ0NDJmZmI4MjcwOTI3MDk2NDIzMDg2NzgwMDEyMzI3MDk2NDg4ZmFkZDUwODAwMzIwMmQyMDUwMjcwYTY0NTA4MDAzNTM1NDUwODA0MjY5NzA2NjczM2EyZjJmNjI2MTY2Nzk2MjY1Njk2MzY0NjQ3YTM3NmI2Mjc1Nzg2MTZhNmEzNjYyNmY2MjM1NjI2YTcxNzQ3NzY1NzEzNjc3NjM2ODZiNjQ2YjY5NzEzNDc2NzY2ODc3NzI3NzcyNmU2NTM3Njk3YTM0NjYzMjM1Nzg2OTg4ZmFlNTM1MDYzNDA2MjIxMzQ0MjcwNjY0OGMwNjM0MDY4YzA3MzIwNzhjMDg4YjA2MTY4YjA3MTY1MDhiMDgxNjUwOGIwMTE2NTA4YmZkMTY1MDhjMDk4YmZjYmM0ODhiZmM4YjA5YmYzNDA2OGMwMDg5OGEwMTAxMjg4YmZmYmUzNTE4MzUxNzM0MTg0NDM0MTc4YzAwODk4YTAxMDEyMjI4MjI4YmZmYmQzNTFhMzUxOTM0MWE0MDAwMDYyMjhjMDA0MjAwMWM4YmZmYmUzNTFjMzUxYjM0MWM0NDM0MWI4YzAxOGIwMTgxMTg1YjhjMDI4YjAyMzIwNzBkOGMwMDg5OGEwMTAwMzEwMDhiZmY3MDAwMzUxZTM1MWQzNDFlNDQ4YmZmMzIwYTMxMDA4OGZhODA4OThhMDIwMDI4MzEwMGJkMzUyMDM1MWYzNDIwNDQzMTAwOGJmZjcwMDAzNTIyMzUyMTM0MjIzNDIxMjIwZDEwNDEwMDA5OGJmZjMxMDAzMjBhODhmYTU0MzEwMGJlMzUyNDM1MjMzNDI0NDQzNDIzOGMwMDhiZmViYzQ4OGJmZThiMDBiZjMxMDBiYzQ4ODk4YTAxMDEyMjI4MjIzMTAwYmQzNTI2MzUyNTM0MjY0NDMxMDA4YzAxOGIwMTE1ODEyMDEyNDQ4YmZmYzAzMDhjMDI4YjAxOGIwMjg4ZmEzYzhiZmZjMDMwOGMwMDg5OGEwMTAwMjgzMTAwMjk2NDEyNDQzMTAwMjk2NDEyNDQ4YmZmMzgwMDI5NjQxMjQ0MjcwYjIyMzUyOTIyMzUyYTI4MzUyYjI4MzUyYzI5NjQxNTI4ODhmOTdhMjk2NDUwMzUyYjM0MmMyYjM0MjkyNDUyNTAzNDJiNTAzNTJjMzQyYTM0MmIxNTA4MjMwOTM1MmEyNDIzMDgzNTI5MzIwOTE1Mjg4OGY5NTIzMjA5NTAzNTJiMzQyYzJiMzQyOTgxMGM1MjUwMzQyYjUwMzUyYzM0MmEzNDJiMTUwODIzMDkzNTJhODEwYzIzMDgzNTI5MzQyYzJiMzQyOTRiMDExNTUyNTAzNTJjMzQyYzUwMDM4YzAwOGIwMDE1ODEyMDEyNDQ4YmZmMzgwNzhiMDAxMjQ0MmE2NDIyMGQ0MDAwMGE4YmZmMzgwODIyMTI0NDQyMDAwZDhiZmYzODA4MzIwMDI1MGIyYTY0MGIwZjQ0MjcwNzIzNjc4OThhMDIwMDI4MjcwNzY0MjMxMjQ0MjcwYjIyMzUyZDIyMzUyZTI4MzUyZjI4MzUzMDI5NjQxNTI4ODhmOGNjMjk2NDUwMzUyZjM0MzAyYjM0MmQyNDUyNTAzNDJmNTAzNTMwMzQyZTM0MmYxNTA4MjMwOTM1MmUyNDIzMDgzNTJkMzIwOTE1Mjg4OGY4YTQzMjA5NTAzNTJmMzQzMDJiMzQyZDgxMGM1MjUwMzQyZjUwMzUzMDM0MmUzNDJmMTUwODIzMDkzNTJlODEwYzIzMDgzNTJkMzQzMDJiMzQyZDRiMDExNTUyNTAzNTMwMzQzMDUwMDM4YzAwOGIwMDE1ODEyMDEyNDQ4YjAwMzExNjM4MDAxMjQ0MzExNjM4MjAzMjAzMTI0NDMxMTYzODA5MzIwMzEyNDQ4YmZlOGJmZjg4ZjhkNzg5OGEwMDAwMzEwMDMyMDkxMjQ0MjcwNzY0MjMxMjQ0MmE2NDIyMTI0NDg5Cml0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKcHVzaGJ5dGVzIDB4MDg4MTAwNDMgLy8gMHgwODgxMDA0MwppdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKaW50Y18xIC8vIDEKaXR4bl9maWVsZCBFeHRyYVByb2dyYW1QYWdlcwpwdXNoaW50IDMgLy8gMwppdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQppbnRjXzIgLy8gOAppdHhuX2ZpZWxkIEdsb2JhbE51bVVpbnQKcHVzaGJ5dGVzIDB4MTdkNzE1NWEgLy8gMHgxN2Q3MTU1YQppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTkKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKZnJhbWVfZGlnIC04Cml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAxCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAtNwppdG9iCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAtNgppdG9iCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAtNQppdG9iCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAtNAppdG9iCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCml0eG5fc3VibWl0Cml0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAyCmZyYW1lX2J1cnkgMApieXRlY18yIC8vICJQcm9ncmFtIgppbnRjXzAgLy8gMApzdG9yZSAxOQppbnRjXzAgLy8gMApzdG9yZSAyMApieXRlY18wIC8vICIiCnN0b3JlIDIxCmJ5dGVjXzAgLy8gIiIKc3RvcmUgMjIKZnJhbWVfZGlnIDEKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8wCmZyYW1lX2RpZyAxCmNvbmNhdApzdG9yZSAyMQpsb2FkIDIyCmJ5dGVjXzEgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgMTkKaW50Y18yIC8vIDgKc3Vic3RyaW5nMwpjb25jYXQKbG9hZCAyMQpjb25jYXQKc3RvcmUgMjIKbG9hZCAyMApsb2FkIDIxCmxlbgorCmludGNfMSAvLyAxCi0Kc3RvcmUgMjAKaW50Y18yIC8vIDgKaW50Y18xIC8vIDEKKwpzdG9yZSAxOQpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpsZW4KYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzAKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKY29uY2F0CnN0b3JlIDIxCmxvYWQgMjIKYnl0ZWNfMSAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCAxOQppbnRjXzMgLy8gMTIKc3Vic3RyaW5nMwpjb25jYXQKbG9hZCAyMQpjb25jYXQKc3RvcmUgMjIKbG9hZCAyMApsb2FkIDIxCmxlbgorCmludGNfMSAvLyAxCi0Kc3RvcmUgMjAKaW50Y18zIC8vIDEyCmludGNfMSAvLyAxCisKc3RvcmUgMTkKbG9hZCAyMgpieXRlY18xIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDE5CmRpZyAxCmxlbgpzdWJzdHJpbmczCmNvbmNhdApzdG9yZSAyMgpsb2FkIDIyCmNvbmNhdApzaGE1MTJfMjU2CmZyYW1lX2J1cnkgMwpmcmFtZV9kaWcgMwpsZW4KaXRvYgpleHRyYWN0IDYgMApmcmFtZV9kaWcgMwpjb25jYXQKZnJhbWVfYnVyeSAzCmZyYW1lX2RpZyAzCmV4dHJhY3QgMiAwCmZyYW1lX2RpZyAtMgo9PQphc3NlcnQKZnJhbWVfZGlnIDIKZnJhbWVfZGlnIC00CmZyYW1lX2RpZyAtMgpjYWxsc3ViIGlubmVyb3B0aW5zbWl0b2xvY2tlcl8yCmZyYW1lX2RpZyAzCmV4dHJhY3QgMiAwCmZyYW1lX2RpZyAtMgo9PQphc3NlcnQKaXR4bl9iZWdpbgpmcmFtZV9kaWcgMwpleHRyYWN0IDIgMAppdHhuX2ZpZWxkIFNlbmRlcgppbnRjXzEgLy8gcGF5Cml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIDMKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBSZWNlaXZlcgpmcmFtZV9kaWcgMwpleHRyYWN0IDIgMAppdHhuX2ZpZWxkIFJla2V5VG8KaW50YyA3IC8vIDEwMDAwMAppdHhuX2ZpZWxkIEFtb3VudApnbG9iYWwgTWluVHhuRmVlCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CnJldHN1YgoKLy8gdHJhbnNmZXJfc21pCnRyYW5zZmVyc21pXzQ6CnByb3RvIDUgMQpieXRlY18wIC8vICIiCmR1cG4gMwppbnRjXzAgLy8gMApkdXAKYnl0ZWNfMCAvLyAiIgpkdXAKZnJhbWVfZGlnIC0zCmJveF9sZW4Kc3RvcmUgMjQKc3RvcmUgMjMKbG9hZCAyNAppbnRjXzAgLy8gMAo9PQovLyBOZXcgb3duZXIgaGFzIHBlbmRpbmcgc3Vic2NyaXB0aW9uIHRyYW5zZmVycwphc3NlcnQKYnl0ZWNfMiAvLyAiUHJvZ3JhbSIKaW50Y18wIC8vIDAKc3RvcmUgMjUKaW50Y18wIC8vIDAKc3RvcmUgMjYKYnl0ZWNfMCAvLyAiIgpzdG9yZSAyNwpieXRlY18wIC8vICIiCnN0b3JlIDI4CmZyYW1lX2RpZyAtMQpndHhucyBTZW5kZXIKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8wCmZyYW1lX2RpZyAtMQpndHhucyBTZW5kZXIKY29uY2F0CnN0b3JlIDI3CmxvYWQgMjgKYnl0ZWNfMSAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCAyNQppbnRjXzIgLy8gOApzdWJzdHJpbmczCmNvbmNhdApsb2FkIDI3CmNvbmNhdApzdG9yZSAyOApsb2FkIDI2CmxvYWQgMjcKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSAyNgppbnRjXzIgLy8gOAppbnRjXzEgLy8gMQorCnN0b3JlIDI1Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmxlbgpieXRlY18wIC8vICIiCmNhbGxzdWIgZW5jb2RldXZhcmludGltcGxfMApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpjb25jYXQKc3RvcmUgMjcKbG9hZCAyOApieXRlY18xIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDI1CmludGNfMyAvLyAxMgpzdWJzdHJpbmczCmNvbmNhdApsb2FkIDI3CmNvbmNhdApzdG9yZSAyOApsb2FkIDI2CmxvYWQgMjcKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSAyNgppbnRjXzMgLy8gMTIKaW50Y18xIC8vIDEKKwpzdG9yZSAyNQpsb2FkIDI4CmJ5dGVjXzEgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgMjUKZGlnIDEKbGVuCnN1YnN0cmluZzMKY29uY2F0CnN0b3JlIDI4CmxvYWQgMjgKY29uY2F0CnNoYTUxMl8yNTYKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCmxlbgpwdXNoaW50IDMyIC8vIDMyCj09CmFzc2VydApmcmFtZV9kaWcgMQpmcmFtZV9kaWcgLTQKPT0KLy8gT2xkIGxvY2tlciBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIGFjY291bnQgcmVmZXJlbmNlCmFzc2VydApieXRlY18yIC8vICJQcm9ncmFtIgppbnRjXzAgLy8gMApzdG9yZSAyOQppbnRjXzAgLy8gMApzdG9yZSAzMApieXRlY18wIC8vICIiCnN0b3JlIDMxCmJ5dGVjXzAgLy8gIiIKc3RvcmUgMzIKZnJhbWVfZGlnIC0zCmxlbgpieXRlY18wIC8vICIiCmNhbGxzdWIgZW5jb2RldXZhcmludGltcGxfMApmcmFtZV9kaWcgLTMKY29uY2F0CnN0b3JlIDMxCmxvYWQgMzIKYnl0ZWNfMSAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCAyOQppbnRjXzIgLy8gOApzdWJzdHJpbmczCmNvbmNhdApsb2FkIDMxCmNvbmNhdApzdG9yZSAzMgpsb2FkIDMwCmxvYWQgMzEKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSAzMAppbnRjXzIgLy8gOAppbnRjXzEgLy8gMQorCnN0b3JlIDI5Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmxlbgpieXRlY18wIC8vICIiCmNhbGxzdWIgZW5jb2RldXZhcmludGltcGxfMApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpjb25jYXQKc3RvcmUgMzEKbG9hZCAzMgpieXRlY18xIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDI5CmludGNfMyAvLyAxMgpzdWJzdHJpbmczCmNvbmNhdApsb2FkIDMxCmNvbmNhdApzdG9yZSAzMgpsb2FkIDMwCmxvYWQgMzEKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSAzMAppbnRjXzMgLy8gMTIKaW50Y18xIC8vIDEKKwpzdG9yZSAyOQpsb2FkIDMyCmJ5dGVjXzEgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgMjkKZGlnIDEKbGVuCnN1YnN0cmluZzMKY29uY2F0CnN0b3JlIDMyCmxvYWQgMzIKY29uY2F0CnNoYTUxMl8yNTYKZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAyCmxlbgpwdXNoaW50IDMyIC8vIDMyCj09CmFzc2VydApmcmFtZV9kaWcgMgpmcmFtZV9kaWcgLTIKPT0KLy8gTmV3IGxvY2tlciBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIGFjY291bnQgcmVmZXJlbmNlCmFzc2VydAppdHhuX2JlZ2luCmludGNfMSAvLyBwYXkKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTIKaXR4bl9maWVsZCBSZWNlaXZlcgppbnRjIDYgLy8gMjAwMDAwCml0eG5fZmllbGQgQW1vdW50Cmdsb2JhbCBNaW5UeG5GZWUKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKaXR4bl9iZWdpbgpmcmFtZV9kaWcgLTQKaXR4bl9maWVsZCBTZW5kZXIKcHVzaGludCA2IC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpwdXNoaW50IDIgLy8gQ2xvc2VPdXQKaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KZnJhbWVfZGlnIC01Cml0eG5fZmllbGQgQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdAppdHhuX2JlZ2luCnB1c2hpbnQgNiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC01Cml0eG5fZmllbGQgQXBwbGljYXRpb25JRApwdXNoYnl0ZXMgMHhjODZmZGIwMSAvLyAidXBkYXRlX21hbmFnZXIoYWRkcmVzcyl2b2lkIgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKaXR4bl9zdWJtaXQKaXR4bl9iZWdpbgpmcmFtZV9kaWcgLTQKaXR4bl9maWVsZCBTZW5kZXIKaW50Y18xIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtNAppdHhuX2ZpZWxkIFJlY2VpdmVyCmZyYW1lX2RpZyAtNAppdHhuX2ZpZWxkIFJla2V5VG8KaW50YyA3IC8vIDEwMDAwMAppdHhuX2ZpZWxkIEFtb3VudApnbG9iYWwgTWluVHhuRmVlCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTUKaXRvYgpjb25jYXQKZnJhbWVfYnVyeSAzCmZyYW1lX2RpZyAtMwpib3hfZGVsCnBvcApmcmFtZV9kaWcgLTMKZnJhbWVfZGlnIDMKYm94X3B1dApmcmFtZV9kaWcgLTMKYm94X2dldApzdG9yZSAzNApzdG9yZSAzMwpsb2FkIDM0CmFzc2VydApsb2FkIDMzCmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIGNsYWltX3NtaQpjbGFpbXNtaV81Ogpwcm90byAzIDAKYnl0ZWNfMCAvLyAiIgpkdXAKaW50Y18wIC8vIDAKYnl0ZWNfMiAvLyAiUHJvZ3JhbSIKaW50Y18wIC8vIDAKc3RvcmUgMzUKaW50Y18wIC8vIDAKc3RvcmUgMzYKYnl0ZWNfMCAvLyAiIgpzdG9yZSAzNwpieXRlY18wIC8vICIiCnN0b3JlIDM4CmZyYW1lX2RpZyAtMwpsZW4KYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzAKZnJhbWVfZGlnIC0zCmNvbmNhdApzdG9yZSAzNwpsb2FkIDM4CmJ5dGVjXzEgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgMzUKaW50Y18yIC8vIDgKc3Vic3RyaW5nMwpjb25jYXQKbG9hZCAzNwpjb25jYXQKc3RvcmUgMzgKbG9hZCAzNgpsb2FkIDM3CmxlbgorCmludGNfMSAvLyAxCi0Kc3RvcmUgMzYKaW50Y18yIC8vIDgKaW50Y18xIC8vIDEKKwpzdG9yZSAzNQpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpsZW4KYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzAKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKY29uY2F0CnN0b3JlIDM3CmxvYWQgMzgKYnl0ZWNfMSAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCAzNQppbnRjXzMgLy8gMTIKc3Vic3RyaW5nMwpjb25jYXQKbG9hZCAzNwpjb25jYXQKc3RvcmUgMzgKbG9hZCAzNgpsb2FkIDM3CmxlbgorCmludGNfMSAvLyAxCi0Kc3RvcmUgMzYKaW50Y18zIC8vIDEyCmludGNfMSAvLyAxCisKc3RvcmUgMzUKbG9hZCAzOApieXRlY18xIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDM1CmRpZyAxCmxlbgpzdWJzdHJpbmczCmNvbmNhdApzdG9yZSAzOApsb2FkIDM4CmNvbmNhdApzaGE1MTJfMjU2CmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMApsZW4KcHVzaGludCAzMiAvLyAzMgo9PQphc3NlcnQKdHhuIFNlbmRlcgpib3hfZ2V0CnN0b3JlIDQwCnN0b3JlIDM5CmxvYWQgNDAKYXNzZXJ0CmxvYWQgMzkKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAxCnB1c2hpbnQgMzIgLy8gMzIKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAyCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKPT0KYXNzZXJ0CmZyYW1lX2RpZyAyCmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgMApjYWxsc3ViIGlubmVyb3B0aW5zbWl0b2xvY2tlcl8yCml0eG5fYmVnaW4KZnJhbWVfZGlnIDAKaXR4bl9maWVsZCBTZW5kZXIKaW50Y18xIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAwCml0eG5fZmllbGQgUmVjZWl2ZXIKZnJhbWVfZGlnIDAKaXR4bl9maWVsZCBSZWtleVRvCmludGNfMCAvLyAwCml0eG5fZmllbGQgQW1vdW50CmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CmZyYW1lX2RpZyAtMwpib3hfZGVsCnBvcApyZXRzdWIKCi8vIHJla2V5X2xvY2tlcl9iYWNrCnJla2V5bG9ja2VyYmFja182Ogpwcm90byAxIDAKYnl0ZWNfMCAvLyAiIgpieXRlY18yIC8vICJQcm9ncmFtIgppbnRjXzAgLy8gMApzdG9yZSA0MQppbnRjXzAgLy8gMApzdG9yZSA0MgpieXRlY18wIC8vICIiCnN0b3JlIDQzCmJ5dGVjXzAgLy8gIiIKc3RvcmUgNDQKdHhuIFNlbmRlcgpsZW4KYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzAKdHhuIFNlbmRlcgpjb25jYXQKc3RvcmUgNDMKbG9hZCA0NApieXRlY18xIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDQxCmludGNfMiAvLyA4CnN1YnN0cmluZzMKY29uY2F0CmxvYWQgNDMKY29uY2F0CnN0b3JlIDQ0CmxvYWQgNDIKbG9hZCA0MwpsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDQyCmludGNfMiAvLyA4CmludGNfMSAvLyAxCisKc3RvcmUgNDEKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8wCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmNvbmNhdApzdG9yZSA0Mwpsb2FkIDQ0CmJ5dGVjXzEgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgNDEKaW50Y18zIC8vIDEyCnN1YnN0cmluZzMKY29uY2F0CmxvYWQgNDMKY29uY2F0CnN0b3JlIDQ0CmxvYWQgNDIKbG9hZCA0MwpsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDQyCmludGNfMyAvLyAxMgppbnRjXzEgLy8gMQorCnN0b3JlIDQxCmxvYWQgNDQKYnl0ZWNfMSAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCA0MQpkaWcgMQpsZW4Kc3Vic3RyaW5nMwpjb25jYXQKc3RvcmUgNDQKbG9hZCA0NApjb25jYXQKc2hhNTEyXzI1NgpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDAKY29uY2F0CmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMApleHRyYWN0IDIgMApmcmFtZV9kaWcgLTEKPT0KLy8gTG9ja2VyIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggYWNjb3VudCByZWZlcmVuY2UKYXNzZXJ0Cml0eG5fYmVnaW4KZnJhbWVfZGlnIDAKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBTZW5kZXIKaW50Y18xIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAwCmV4dHJhY3QgMiAwCml0eG5fZmllbGQgUmVjZWl2ZXIKZnJhbWVfZGlnIDAKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBSZWtleVRvCmludGNfMCAvLyAwCml0eG5fZmllbGQgQW1vdW50CmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CnJldHN1YgoKLy8gZGVsZXRlX3NtaQpkZWxldGVzbWlfNzoKcHJvdG8gMSAwCmJ5dGVjXzAgLy8gIiIKYnl0ZWNfMiAvLyAiUHJvZ3JhbSIKaW50Y18wIC8vIDAKc3RvcmUgNDUKaW50Y18wIC8vIDAKc3RvcmUgNDYKYnl0ZWNfMCAvLyAiIgpzdG9yZSA0NwpieXRlY18wIC8vICIiCnN0b3JlIDQ4CnR4biBTZW5kZXIKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8wCnR4biBTZW5kZXIKY29uY2F0CnN0b3JlIDQ3CmxvYWQgNDgKYnl0ZWNfMSAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCA0NQppbnRjXzIgLy8gOApzdWJzdHJpbmczCmNvbmNhdApsb2FkIDQ3CmNvbmNhdApzdG9yZSA0OApsb2FkIDQ2CmxvYWQgNDcKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSA0NgppbnRjXzIgLy8gOAppbnRjXzEgLy8gMQorCnN0b3JlIDQ1Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmxlbgpieXRlY18wIC8vICIiCmNhbGxzdWIgZW5jb2RldXZhcmludGltcGxfMApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpjb25jYXQKc3RvcmUgNDcKbG9hZCA0OApieXRlY18xIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDQ1CmludGNfMyAvLyAxMgpzdWJzdHJpbmczCmNvbmNhdApsb2FkIDQ3CmNvbmNhdApzdG9yZSA0OApsb2FkIDQ2CmxvYWQgNDcKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSA0NgppbnRjXzMgLy8gMTIKaW50Y18xIC8vIDEKKwpzdG9yZSA0NQpsb2FkIDQ4CmJ5dGVjXzEgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgNDUKZGlnIDEKbGVuCnN1YnN0cmluZzMKY29uY2F0CnN0b3JlIDQ4CmxvYWQgNDgKY29uY2F0CnNoYTUxMl8yNTYKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmxlbgpwdXNoaW50IDMyIC8vIDMyCj09CmFzc2VydAppdHhuX2JlZ2luCmZyYW1lX2RpZyAwCml0eG5fZmllbGQgU2VuZGVyCnB1c2hpbnQgNiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KcHVzaGludCAyIC8vIENsb3NlT3V0Cml0eG5fZmllbGQgT25Db21wbGV0aW9uCmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKaXR4bl9iZWdpbgpwdXNoaW50IDYgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKcHVzaGJ5dGVzIDB4MjQzNzhkM2MgLy8gImRlbGV0ZSgpdm9pZCIKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCml0eG5fZmllbGQgT25Db21wbGV0aW9uCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0Cml0eG5fYmVnaW4KZnJhbWVfZGlnIDAKaXR4bl9maWVsZCBTZW5kZXIKaW50Y18xIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAwCml0eG5fZmllbGQgUmVjZWl2ZXIKZnJhbWVfZGlnIDAKaXR4bl9maWVsZCBSZWtleVRvCmludGNfMCAvLyAwCml0eG5fZmllbGQgQW1vdW50CmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CnJldHN1Yg=="; - override clearProgram = - "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu"; - override methods: algosdk.ABIMethod[] = [ - new algosdk.ABIMethod({ - name: "add", - desc: "Adds a new Subscription Management Instance (SMI) to the SMR.\nArgs: fee_txn (abi.PaymentTransaction): The payment transaction containing the transaction fee. version (abi.String): The version of the Subtopia contracts. name (abi.String): The name of the SMI. sub_type (abi.Uint64): The type of subscription. price (abi.Uint64): The price of the subscription. max_subs (abi.Uint64): The maximum number of subscribers allowed. coin_id (abi.Uint64): The ID of the coin used for payment. output (abi.Uint64): The output of the created SMI.", - args: [ - { type: "string", name: "version", desc: "" }, - { type: "string", name: "name", desc: "" }, - { type: "uint64", name: "sub_type", desc: "" }, - { type: "uint64", name: "price", desc: "" }, - { type: "uint64", name: "max_subs", desc: "" }, - { type: "uint64", name: "coin_id", desc: "" }, - { type: "address", name: "manager", desc: "" }, - { type: "address", name: "locker", desc: "" }, - { type: "pay", name: "fee_txn", desc: "" }, - ], - returns: { type: "uint64", desc: "" }, - }), - new algosdk.ABIMethod({ - name: "transfer_smi", - desc: "Transfers a Subscription Management Instance (SMI) to a new owner.\nArgs: transfer_fee_txn (abi.PaymentTransaction): The payment transaction containing the transfer fee. new_owner (abi.Address): The address of the new owner. smi_id (abi.Uint64): The ID of the SMI to be transferred. output (PendingTransfer): The output of the pending transfer.", - args: [ - { type: "uint64", name: "smi_id", desc: "" }, - { type: "address", name: "old_locker", desc: "" }, - { type: "address", name: "new_owner", desc: "" }, - { type: "address", name: "new_locker", desc: "" }, - { type: "pay", name: "transfer_fee_txn", desc: "" }, - ], - returns: { type: "(address,uint64)", desc: "" }, - }), - new algosdk.ABIMethod({ - name: "claim_smi", - desc: "Claims a transferred Subscription Management Instance (SMI) by the new owner.", - args: [ - { - type: "address", - name: "new_owner", - desc: "The address of the new owner.", - }, - { type: "application", name: "smi", desc: "The SMI to be claimed." }, - { - type: "uint64", - name: "coin_id", - desc: "The ID of the coin in which SMI fees are paid.", - }, - ], - returns: { type: "void", desc: "" }, - }), - new algosdk.ABIMethod({ - name: "rekey_locker_back", - desc: "Rekeys the locker back to itself.", - args: [ - { - type: "address", - name: "locker_address", - desc: "The address of the locker.", - }, - ], - returns: { type: "void", desc: "" }, - }), - new algosdk.ABIMethod({ - name: "delete_smi", - desc: "", - args: [{ type: "uint64", name: "smi_id", desc: "" }], - returns: { type: "void", desc: "" }, - }), - ]; - async add( - args: { - version: string; - name: string; - sub_type: bigint; - price: bigint; - max_subs: bigint; - coin_id: bigint; - manager: string; - locker: string; - fee_txn: algosdk.TransactionWithSigner | algosdk.Transaction; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.add( - { - version: args.version, - name: args.name, - sub_type: args.sub_type, - price: args.price, - max_subs: args.max_subs, - coin_id: args.coin_id, - manager: args.manager, - locker: args.locker, - fee_txn: args.fee_txn, - }, - txnParams - ) - ); - return new bkr.ABIResult(result, result.returnValue as bigint); - } - async transfer_smi( - args: { - smi_id: bigint; - old_locker: string; - new_owner: string; - new_locker: string; - transfer_fee_txn: algosdk.TransactionWithSigner | algosdk.Transaction; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.transfer_smi( - { - smi_id: args.smi_id, - old_locker: args.old_locker, - new_owner: args.new_owner, - new_locker: args.new_locker, - transfer_fee_txn: args.transfer_fee_txn, - }, - txnParams - ) - ); - return new bkr.ABIResult( - result, - PendingTransfer.decodeResult(result.returnValue) - ); - } - async claim_smi( - args: { - new_owner: string; - smi: bigint; - coin_id: bigint; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.claim_smi( - { new_owner: args.new_owner, smi: args.smi, coin_id: args.coin_id }, - txnParams - ) - ); - return new bkr.ABIResult(result); - } - async rekey_locker_back( - args: { - locker_address: string; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.rekey_locker_back( - { locker_address: args.locker_address }, - txnParams - ) - ); - return new bkr.ABIResult(result); - } - async delete_smi( - args: { - smi_id: bigint; - }, - txnParams?: bkr.TransactionOverrides - ): Promise> { - const result = await this._execute( - await this.compose.delete_smi({ smi_id: args.smi_id }, txnParams) - ); - return new bkr.ABIResult(result); - } - compose = { - add: async ( - args: { - version: string; - name: string; - sub_type: bigint; - price: bigint; - max_subs: bigint; - coin_id: bigint; - manager: string; - locker: string; - fee_txn: algosdk.TransactionWithSigner | algosdk.Transaction; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "add"), - { - version: args.version, - name: args.name, - sub_type: args.sub_type, - price: args.price, - max_subs: args.max_subs, - coin_id: args.coin_id, - manager: args.manager, - locker: args.locker, - fee_txn: args.fee_txn, - }, - txnParams, - atc - ); - }, - transfer_smi: async ( - args: { - smi_id: bigint; - old_locker: string; - new_owner: string; - new_locker: string; - transfer_fee_txn: algosdk.TransactionWithSigner | algosdk.Transaction; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "transfer_smi"), - { - smi_id: args.smi_id, - old_locker: args.old_locker, - new_owner: args.new_owner, - new_locker: args.new_locker, - transfer_fee_txn: args.transfer_fee_txn, - }, - txnParams, - atc - ); - }, - claim_smi: async ( - args: { - new_owner: string; - smi: bigint; - coin_id: bigint; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "claim_smi"), - { new_owner: args.new_owner, smi: args.smi, coin_id: args.coin_id }, - txnParams, - atc - ); - }, - rekey_locker_back: async ( - args: { - locker_address: string; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "rekey_locker_back"), - { locker_address: args.locker_address }, - txnParams, - atc - ); - }, - delete_smi: async ( - args: { - smi_id: bigint; - }, - txnParams?: bkr.TransactionOverrides, - atc?: algosdk.AtomicTransactionComposer - ): Promise => { - return this._addMethodCall( - algosdk.getMethodByName(this.methods, "delete_smi"), - { smi_id: args.smi_id }, - txnParams, - atc - ); - }, - }; -} - -/* c8 ignore stop */ diff --git a/src/enums/index.ts b/src/enums/index.ts index e038cb7..963c912 100644 --- a/src/enums/index.ts +++ b/src/enums/index.ts @@ -16,6 +16,14 @@ export enum SubscriptionExpirationType { ANNUAL = 4, } +export enum Duration { + UNLIMITED = 0, + MONTH = 2592000, + QUARTER = 7776000, + SEMI_ANNUAL = 15552000, + ANNUAL = 31536000, +} + export enum PriceNormalizationType { RAW = 0, PRETTY = 1, @@ -30,3 +38,13 @@ export enum DiscountType { PERCENTAGE = 0, FIXED = 1, } + +export enum ChainType { + TESTNET = "testnet", + MAINNET = "mainnet", +} + +export enum LockerType { + CREATOR = 0, + USER = 1, +} diff --git a/src/index.ts b/src/index.ts index ef91d71..18453e9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,8 +3,8 @@ // Copyright (C) 2023 Altynbek Orumbayev // ============================================================================= -import { SubtopiaClient } from "./clients/SubtopiaClient"; -import { SubtopiaAdminClient } from "./clients/SubtopiaAdminClient"; +// import { SubtopiaClient } from "./clients/SubtopiaClient"; +// import { SubtopiaAdminClient } from "./clients/SubtopiaAdminClient"; import { getLocker, loadApplicationState, @@ -48,8 +48,8 @@ import { export { PriceNormalizationType, - SubtopiaAdminClient, - SubtopiaClient, + // SubtopiaAdminClient, + // SubtopiaClient, SubscriptionType, SubscriptionExpirationType, DiscountType, diff --git a/src/interfaces/index.ts b/src/interfaces/index.ts index 4ac8f61..ece8296 100644 --- a/src/interfaces/index.ts +++ b/src/interfaces/index.ts @@ -15,6 +15,24 @@ import { TransactionSignerAccount } from "@algorandfoundation/algokit-utils/type // === Boxes === +export interface RawDiscount { + duration: bigint; + discount_type: bigint; + discount_value: bigint; + expires_at: bigint; + created_at: bigint; + total_claims: bigint; +} + +export interface ApplicationSpec { + approval: Uint8Array; + clear: Uint8Array; + globalNumUint: number; + globalNumByteSlice: number; + localNumUint: number; + localNumByteSlice: number; +} + export interface SubscriptionRecord { createdAt: Date; expiresAt: Date | undefined; diff --git a/src/utils/index.ts b/src/utils/index.ts index c4562a2..225c665 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -20,11 +20,9 @@ import algosdk, { } from "algosdk"; import AlgodClient from "algosdk/dist/types/client/v2/algod/algod"; import { StateValue, State, ApplicationClient } from "beaker-ts"; -import { APP_SPEC as SmiAppSpec } from "../contracts/SMI"; -import { APP_SPEC as SmlAppSpec } from "../contracts/SML"; -import { SML_TEAL } from "../contracts/sml_client"; import { + ApplicationSpec, AssetMetadata, Locker, LockerRekeyParameters, @@ -33,8 +31,6 @@ import { import { DEFAULT_AWAIT_ROUNDS, ALGO_ASSET } from "../constants"; import { PriceNormalizationType, SubscriptionExpirationType } from "../enums"; import { APP_PAGE_MAX_SIZE } from "@algorandfoundation/algokit-utils/types/app"; -import { AppSpec } from "@algorandfoundation/algokit-utils/types/app-spec"; -import { algos } from "@algorandfoundation/algokit-utils"; /* c8 ignore start */ function strOrHex(v: Buffer): string { @@ -121,7 +117,7 @@ export async function getLocker( registryAddress: string ): Promise { // load sml.teal file into string - let sml = SML_TEAL; + let sml = "SML_TEAL"; // replace TMPL_CREATOR_ADDRESS with decoded creator address sml = sml.replace(`TMPL_CREATOR_ADDRESS`, addressToHex(creatorAddress)); @@ -314,25 +310,10 @@ export function expirationTypeToMonths( // Price MBR calculations export async function calculateExtraPages( - approval: string, - clear: string, - algodClient: AlgodClient + approval: Uint8Array, + clear: Uint8Array ): Promise { - const approvalCompiled = await algodClient - .compile(Buffer.from(approval, "base64").toString("utf-8")) - .do(); - const approvalDecoded = new Uint8Array( - Buffer.from(approvalCompiled.result, "base64") - ); - const clearCompiled = await algodClient - .compile(Buffer.from(clear, "base64").toString("utf-8")) - .do(); - const clearDecoded = new Uint8Array( - Buffer.from(clearCompiled.result, "base64") - ); - return Math.floor( - (approvalDecoded.length + clearDecoded.length) / APP_PAGE_MAX_SIZE - ); + return Math.floor((approval.length + clear.length) / APP_PAGE_MAX_SIZE); } export function calculateBoxMbr( @@ -369,6 +350,24 @@ export function calculateRegistryLockerBoxCreateMbr( ); } +export function calculateInfrastructureDiscountBoxCreateMbr(): number { + const uint64TypeByteLen = new ABIUintType(64).byteLen(); + const discountTypeByteLen = uint64TypeByteLen * 6; // 6 Uint64s in Discount tuple + return calculateBoxMbr(uint64TypeByteLen, discountTypeByteLen, "create"); +} + +export function calculateInfrastructureSubscriptionBoxCreateMbr( + subscriberAddress: string +): number { + const uint64TypeByteLen = new ABIUintType(64).byteLen(); + const subscriptionTypeByteLen = uint64TypeByteLen * 5; // 5 Uint64s in Subscription tuple + return calculateBoxMbr( + decodeAddress(subscriberAddress).publicKey, + subscriptionTypeByteLen, + "create" + ); +} + export function calculateCreationMbr( extraProgramPages: number, globalNumUint: number, @@ -382,41 +381,29 @@ export function calculateCreationMbr( } export async function calculateSmiCreationMbr( - algodClient: AlgodClient + applicationSpec: ApplicationSpec ): Promise { const extraPages = await calculateExtraPages( - SmiAppSpec.source.approval, - SmiAppSpec.source.clear, - algodClient + applicationSpec.approval, + applicationSpec.clear ); return calculateCreationMbr( extraPages, - SmiAppSpec.state.global.num_uints, - SmiAppSpec.state.global.num_byte_slices + applicationSpec.globalNumUint, + applicationSpec.globalNumByteSlice ); } export async function calculateSmlCreationMbr( - algodClient: AlgodClient + applicationSpec: ApplicationSpec ): Promise { const extraPages = await calculateExtraPages( - SmlAppSpec.source.approval, - SmlAppSpec.source.clear, - algodClient + applicationSpec.approval, + applicationSpec.clear ); return calculateCreationMbr( extraPages, - SmlAppSpec.state.global.num_uints, - SmlAppSpec.state.global.num_byte_slices + applicationSpec.globalNumUint, + applicationSpec.globalNumByteSlice ); } - -export function convertCentsToAlgos( - totalCents: number, - priceOfAlgo: number -): number { - const microAlgos = (totalCents * 10000 * Math.pow(10, 6)) / priceOfAlgo; - const algos = microAlgos / 10000; - const roundedAlgos = Math.floor(algos / 10000) * 10000; - return roundedAlgos < 100_000 ? 100_000 : roundedAlgos; -} diff --git a/tests/subtopia.test.ts b/tests/subtopia.test.ts index e3563eb..fdfb57d 100644 --- a/tests/subtopia.test.ts +++ b/tests/subtopia.test.ts @@ -1,42 +1,27 @@ import { - decodeAddress, mnemonicToSecretKey, makeBasicAccountTransactionSigner, + generateAccount, } from "algosdk"; import "dotenv/config"; -import { - getLocker, - SubscriptionType, - SubtopiaAdminClient, - SubtopiaClient, -} from "../src/index"; +import { SubscriptionType } from "../src/index"; import { it, describe, expect } from "vitest"; import { SubtopiaRegistry } from "../src/clients/SubtopiaRegistry"; +import { SubtopiaInfrastructure } from "../src/clients/SubtopiaInfrastructure"; import { - getRandomAccount, - generateRandomAsset, - getRandomElement, -} from "./utils"; -import { - expirationTypeToMonths, - normalizePrice, - optOutAsset, - rekeyLocker, -} from "../src/utils"; -import { - DiscountType, - PriceNormalizationType, + ChainType, + LockerType, SubscriptionExpirationType, } from "../src/enums"; -import { assert } from "console"; import { algos, ensureFunded, getAlgoClient, - microAlgos, + getAppGlobalState, transactionSignerAccount, } from "@algorandfoundation/algokit-utils"; +import { TESTNET_SUBTOPIA_REGISTRY_ID } from "../src/constants"; const TIME_BASED_EXPIRATION_TYPES = [ SubscriptionExpirationType.MONTHLY, @@ -52,7 +37,7 @@ const algodClient = getAlgoClient({ const dispenserAccount = mnemonicToSecretKey( process.env["TESTNET_SUBTOPIA_DISPENSER_MNEMONIC"] as string ); -const testnetRegistryId = Number(process.env["TESTNET_SUBTOPIA_REGISTRY_ID"]); +const testnetRegistryId = TESTNET_SUBTOPIA_REGISTRY_ID; const creatorAccount = mnemonicToSecretKey( process.env["TESTNET_SUBTOPIA_CREATOR_MNEMONIC"] as string @@ -72,993 +57,1075 @@ await ensureFunded( algodClient ); +const generateRandomAccount = async () => { + const account = generateAccount(); + + await ensureFunded( + { + accountToFund: account, + fundingSource: dispenserAccount, + minSpendingBalance: algos(2), + }, + algodClient + ); + + return account; +}; + describe("subtopia", () => { it( - "should correctly add and remove infrastructure", + "should correctly add infra, create subscription, delete subscription and delete infra", async () => { // Setup const subtopiaRegistryClient = await SubtopiaRegistry.init( algodClient, creatorSignerAccount, - testnetRegistryId + ChainType.TESTNET ); - let lockerId = await subtopiaRegistryClient.getLocker( - creatorAccount.addr - ); - if (lockerId === undefined) { + let lockerID = await SubtopiaRegistry.getLocker({ + registryID: subtopiaRegistryClient.appID, + algodClient: algodClient, + ownerAddress: creatorAccount.addr, + }); + if (lockerID === undefined) { const response = await subtopiaRegistryClient.createLocker({ creator: creatorSignerAccount, + lockerType: LockerType.CREATOR, }); - lockerId = response.lockerId; + lockerID = response.lockerID; } // Test const response = await subtopiaRegistryClient.createInfrastructure({ - name: "Cool infrastructure", + productName: "Notflix", + subscriptionName: "Premium", price: 1, subType: SubscriptionType.UNLIMITED, maxSubs: 0, coinID: 0, - lockerId: lockerId, - }); - - expect(response.infrastructureId).toBeGreaterThan(0); - - // const content = await SubtopiaClient.getInfrastructureState( - // algodClient, - // infrastructureID - // ); - - // const contentWithNoNormalization = - // await SubtopiaClient.getInfrastructureState( - // algodClient, - // infrastructureID, - // false - // ); - - // // Assert - // expect(content.price).toBe(1); - // expect(contentWithNoNormalization.price).toBe(1 * 1e6); - // expect(result).toBeDefined(); - // expect(result.txID).toBeDefined(); - }, - { timeout: 1e6 } - ); - - it( - "should correctly add infrastructure with already rekeyed locker", - async () => { - // Setup - const { dummyRegistryId, dummyRegistryAddress } = - await setupDummyRegistry(); - - const locker = await getLocker( - algodClient, - adminAccount.addr, - dummyRegistryAddress - ); - - await rekeyLocker({ - client: algodClient, - locker: locker.lsig, - creatorAddress: adminAccount.addr, - creatorSigner: adminAccount.signer, - registryAddress: dummyRegistryAddress, - registrySigner: adminAccount.signer, - rekeyToAddress: dummyRegistryAddress, - }); - - // Test - const result = await SubtopiaAdminClient.addInfrastructure({ - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - smrID: dummyRegistryId, - name: "Cool infrastructure", - price: 1, - client: algodClient, - subType: SubscriptionType.UNLIMITED, - maxSubs: 0, - coinID: 0, - }); - - const infrastructureID = Number(result.returnValue); - - const content = await SubtopiaClient.getInfrastructureState( - algodClient, - infrastructureID - ); - - const contentWithNoNormalization = - await SubtopiaClient.getInfrastructureState( - algodClient, - infrastructureID, - false - ); - - // Assert - expect(content.price).toBe(1); - expect(contentWithNoNormalization.price).toBe(1 * 1e6); - expect(result).toBeDefined(); - expect(result.txID).toBeDefined(); - }, - { timeout: 1e6 } - ); - - it.each([ - [SubscriptionExpirationType.UNLIMITED, DiscountType.FIXED, 1], - [SubscriptionExpirationType.MONTHLY, DiscountType.FIXED, 2], - [SubscriptionExpirationType.QUARTERLY, DiscountType.FIXED, 3], - [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.FIXED, 4], - [SubscriptionExpirationType.ANNUAL, DiscountType.FIXED, 10], - [SubscriptionExpirationType.UNLIMITED, DiscountType.PERCENTAGE, 1], - [SubscriptionExpirationType.MONTHLY, DiscountType.PERCENTAGE, 2], - [SubscriptionExpirationType.QUARTERLY, DiscountType.PERCENTAGE, 3], - [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.PERCENTAGE, 4], - [SubscriptionExpirationType.ANNUAL, DiscountType.PERCENTAGE, 10], - ])( - "should correctly create discount of type %i, %i and %i on SMI", - async (expirationType, discountType, discountValue) => { - // Setup - const { dummyRegistryId } = await setupDummyRegistry(); - const randomAsset = await generateRandomAsset(algodClient, adminAccount); - - const response = await SubtopiaAdminClient.addInfrastructure({ - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - smrID: dummyRegistryId, - name: "Cool infrastructure", - price: 1, - client: algodClient, - subType: - expirationType === SubscriptionExpirationType.UNLIMITED - ? SubscriptionType.UNLIMITED - : SubscriptionType.TIME_BASED, - maxSubs: 0, - coinID: randomAsset.index, - }); - const infrastructureID = Number(response.returnValue); - - // Test - const discount = await SubtopiaClient.createDiscount( - { - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - smiID: infrastructureID, - smrID: dummyRegistryId, - discount: { - expirationType: expirationType, - discountType: discountType, - discountValue: discountValue, - }, - }, - { client: algodClient } - ); - - // Assert - expect(discount).toBeDefined(); - expect(discount.txID).toBeDefined(); - - const discountRecord = await SubtopiaClient.getDiscountRecordForType( - algodClient, - infrastructureID, - expirationType - ); - - const smiState = await SubtopiaClient.getInfrastructureState( - algodClient, - infrastructureID - ); - assert(smiState.discounts[0] === discountRecord); - assert(smiState.discounts.length === 1); - - expect(discountRecord).toBeDefined(); - expect(discountRecord.discountType).toBe(discountType); - expect(discountRecord.discountValue).toBe( - discountType === DiscountType.FIXED - ? normalizePrice( - discountValue, - randomAsset.decimals, - PriceNormalizationType.RAW - ) - : discountValue - ); - expect(discountRecord.expirationType).toBe(expirationType); - - await SubtopiaClient.deleteDiscount( - { - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - smiID: infrastructureID, - smrID: dummyRegistryId, - expirationType: expirationType, - }, - { client: algodClient } - ); - - // Should be deleted - await expect( - SubtopiaClient.getDiscountRecordForType( - algodClient, - infrastructureID, - expirationType - ) - ).rejects.toThrowError(); - - const postDeleteSmiState = await SubtopiaClient.getInfrastructureState( - algodClient, - infrastructureID - ); - assert(postDeleteSmiState.discounts.length === 0); - }, - { timeout: 1e6 } - ); - - it.each([ - [SubscriptionExpirationType.UNLIMITED, undefined, 0], - [SubscriptionExpirationType.UNLIMITED, DiscountType.FIXED, 1], - [SubscriptionExpirationType.MONTHLY, DiscountType.FIXED, 2], - [SubscriptionExpirationType.QUARTERLY, DiscountType.FIXED, 3], - [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.FIXED, 4], - [SubscriptionExpirationType.ANNUAL, DiscountType.FIXED, 10], - [SubscriptionExpirationType.UNLIMITED, DiscountType.PERCENTAGE, 1], - [SubscriptionExpirationType.MONTHLY, DiscountType.PERCENTAGE, 2], - [SubscriptionExpirationType.QUARTERLY, DiscountType.PERCENTAGE, 3], - [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.PERCENTAGE, 4], - [SubscriptionExpirationType.ANNUAL, DiscountType.PERCENTAGE, 10], - ])( - "should correctly purchase subscription with algo and discount of type %i, %i and %i", - async ( - expirationType: SubscriptionExpirationType, - discountType: DiscountType | undefined, - discountValue: number - ) => { - // Setup - const { dummyRegistryId } = await setupDummyRegistry(); - - const response = await SubtopiaAdminClient.addInfrastructure({ - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - smrID: dummyRegistryId, - name: "Cool infrastructure", - price: 20, - client: algodClient, - subType: - expirationType === SubscriptionExpirationType.UNLIMITED - ? SubscriptionType.UNLIMITED - : SubscriptionType.TIME_BASED, - maxSubs: 0, - coinID: 0, + lockerID: lockerID, }); - const infrastructureID = Number(response.returnValue); - - // Test - const subscriber = await getRandomAccount( - algodClient, - adminAccount.addr, - adminAccount.signer - ); - - if (discountType !== undefined) { - await SubtopiaClient.createDiscount( - { - creator: { - address: adminAccount.addr, - signer: adminAccount.signer, - }, - smiID: infrastructureID, - smrID: dummyRegistryId, - discount: { - expirationType: expirationType, - discountType: discountType, - discountValue: discountValue, - }, - }, - { client: algodClient } - ); - } + expect(response.infrastructureID).toBeGreaterThan(0); - const result = await SubtopiaClient.subscribe( - { - subscriber: { - address: subscriber.address, - signer: subscriber.signer, - }, - smiID: infrastructureID, - smrID: dummyRegistryId, - expirationType: expirationType, - }, - { - client: algodClient, - } + const randomSubscriber = await generateRandomAccount(); + const randomSubscriberSigner = transactionSignerAccount( + makeBasicAccountTransactionSigner(randomSubscriber), + randomSubscriber.addr ); - if (discountType !== undefined) { - const discountBox = await SubtopiaClient.getDiscountRecordForType( - algodClient, - infrastructureID, - expirationType - ); - - expect(discountBox).toBeDefined(); - expect(discountBox.totalClaims).toBe(1); - expect(discountBox.discountType).toBe(discountType); - expect(discountBox.expirationType).toBe(expirationType); - } - - const claimResult = await SubtopiaClient.claimSubscriptionPass( - { - smiID: infrastructureID, - subID: Number(result.returnValue), - subscriber: { - address: subscriber.address, - signer: subscriber.signer, - }, - }, - { - client: algodClient, - } - ); - - const boxContent = await SubtopiaClient.getSubscriptionRecordForAccount( + const productClient = await SubtopiaInfrastructure.init( algodClient, - subscriber.address, - infrastructureID + response.infrastructureID, + creatorSignerAccount ); - // Assert - expect(boxContent.subID).toBe(Number(result.returnValue)); - expect(boxContent.expirationType).toBe(expirationType); - expect(result).toBeDefined(); - expect(result.txID).toBeDefined(); - expect(result.returnValue).toBeGreaterThan(0); - expect(claimResult).toBeDefined(); - - const balance = algodClient.accountAssetInformation( - subscriber.address, - Number(result.returnValue) - ); - expect(balance).toBeDefined(); - expect(balance["assetID"]).toBe(Number(result.returnValue)); - - await SubtopiaClient.unsubscribe( - { - smiID: infrastructureID, - subscriber: { - address: subscriber.address, - signer: subscriber.signer, - }, - }, - { - client: algodClient, - } - ); - - if (discountType !== undefined) { - await SubtopiaClient.deleteDiscount( - { - creator: { - address: adminAccount.addr, - signer: adminAccount.signer, - }, - smiID: infrastructureID, - smrID: dummyRegistryId, - expirationType: expirationType, - }, - { client: algodClient } - ); - } - }, - { timeout: 1e6 } - ); - - it.each([ - [SubscriptionExpirationType.UNLIMITED, undefined, 0], - [SubscriptionExpirationType.UNLIMITED, DiscountType.FIXED, 1], - [SubscriptionExpirationType.MONTHLY, DiscountType.FIXED, 2], - [SubscriptionExpirationType.QUARTERLY, DiscountType.FIXED, 3], - [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.FIXED, 4], - [SubscriptionExpirationType.ANNUAL, DiscountType.FIXED, 10], - [SubscriptionExpirationType.UNLIMITED, DiscountType.PERCENTAGE, 1], - [SubscriptionExpirationType.MONTHLY, DiscountType.PERCENTAGE, 2], - [SubscriptionExpirationType.QUARTERLY, DiscountType.PERCENTAGE, 3], - [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.PERCENTAGE, 4], - [SubscriptionExpirationType.ANNUAL, DiscountType.PERCENTAGE, 10], - ])( - "should correctly purchase subscription with custom ASA and discount of type %i %i %i", - async (expirationType, discountType, discountValue) => { - // Setup - const { dummyRegistryId } = await setupDummyRegistry(); - - const randomAsset = await generateRandomAsset( - algodClient, - adminAccount, - undefined, - 1000 * expirationTypeToMonths(expirationType) - ); - - const response = await SubtopiaAdminClient.addInfrastructure({ - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - smrID: dummyRegistryId, - name: "Cool infrastructure", - price: 1 + discountValue, - client: algodClient, - coinID: randomAsset.index, - subType: - expirationType === SubscriptionExpirationType.UNLIMITED - ? SubscriptionType.UNLIMITED - : SubscriptionType.TIME_BASED, - maxSubs: 0, + const subscribeResponse = await productClient.createSubscription({ + subscriber: randomSubscriberSigner, + expirationType: SubscriptionExpirationType.UNLIMITED, }); - const infrastructureID = Number(response.returnValue); + expect(subscribeResponse.subscriptionId).toBeGreaterThan(0); - // Test - const subscriber = await getRandomAccount( - algodClient, - adminAccount.addr, - adminAccount.signer, - randomAsset - ); - - if (discountType !== undefined) { - const response = await SubtopiaClient.createDiscount( - { - creator: { - address: adminAccount.addr, - signer: adminAccount.signer, - }, - smiID: infrastructureID, - smrID: dummyRegistryId, - discount: { - expirationType: expirationType, - discountType: discountType, - discountValue: discountValue, - }, - }, - { client: algodClient } - ); - console.log(response); - } - - const result = await SubtopiaClient.subscribe( - { - subscriber: { - address: subscriber.address, - signer: subscriber.signer, - }, - smiID: infrastructureID, - smrID: dummyRegistryId, - expirationType: expirationType, - }, - { - client: algodClient, - } - ); - - const claimResult = await SubtopiaClient.claimSubscriptionPass( - { - smiID: infrastructureID, - subID: Number(result.returnValue), - subscriber: { - address: subscriber.address, - signer: subscriber.signer, - }, - }, + const deleteSubscriptionResponse = await productClient.deleteSubscription( { - client: algodClient, + subscriber: randomSubscriberSigner, + subscriptionID: subscribeResponse.subscriptionId, } ); - const boxContent = await SubtopiaClient.getSubscriptionRecordForAccount( - algodClient, - subscriber.address, - infrastructureID - ); - - // Assert - expect(boxContent.subID).toBe(Number(result.returnValue)); - expect(result).toBeDefined(); - expect(result.txID).toBeDefined(); - expect(result.returnValue).toBeGreaterThan(0); - expect(claimResult).toBeDefined(); - - const balance = algodClient.accountAssetInformation( - subscriber.address, - Number(result.returnValue) - ); - expect(balance).toBeDefined(); - expect(balance["assetID"]).toBe(Number(result.returnValue)); - }, - { timeout: 1e6 } - ); - - it( - "should correctly claim revenue with algo", - async () => { - // Setup - const { dummyRegistryId } = await setupDummyRegistry(); - - const randomSubType = getRandomElement([ - SubscriptionType.TIME_BASED, - SubscriptionType.UNLIMITED, - ]); - - const response = await SubtopiaAdminClient.addInfrastructure({ - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - smrID: dummyRegistryId, - name: "Cool infrastructure", - price: 1, - client: algodClient, - subType: randomSubType, - maxSubs: 0, - coinID: 0, - }); - - const infrastructureID = Number(response.returnValue); - - // Test - const subscriber = await getRandomAccount( - algodClient, - adminAccount.addr, - adminAccount.signer - ); - - const randomExpirationType = - randomSubType === SubscriptionType.TIME_BASED - ? getRandomElement(TIME_BASED_EXPIRATION_TYPES) - : undefined; + expect(deleteSubscriptionResponse.txId).toBeDefined(); - const subResponse = await SubtopiaClient.subscribe( - { - subscriber: { - address: subscriber.address, - signer: subscriber.signer, - }, - smiID: infrastructureID, - smrID: dummyRegistryId, - expirationType: randomExpirationType, - }, - { - client: algodClient, - } - ); - - await optOutAsset( - algodClient, - subscriber, - Number(subResponse.returnValue) - ); - - const claimResponse = await SubtopiaClient.claimRevenue( - { - user: { - address: adminAccount.addr, - signer: adminAccount.signer, - }, - smrID: dummyRegistryId, - }, - { - client: algodClient, - } - ); - - // Assert - expect(claimResponse).toBeDefined(); - }, - { timeout: 1e6 } - ); - - it.each([[SubscriptionType.UNLIMITED], [SubscriptionType.TIME_BASED]])( - "should correctly delete SMI of type %i with N subscribers before deleting SMI", - async (randomSubType) => { - // Setup - const { dummyRegistryId } = await setupDummyRegistry(); - - const addResponse = await SubtopiaAdminClient.addInfrastructure({ - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - smrID: dummyRegistryId, - name: "Cool infrastructure", - price: 1, - client: algodClient, - subType: randomSubType, - maxSubs: 0, - coinID: 0, - }); - - const infrastructureID = Number(addResponse.returnValue); - - // Test - // Create 50 subscribers - for (let index = 0; index < 50; index++) { - const subscriber = await getRandomAccount( - algodClient, - adminAccount.addr, - adminAccount.signer - ); - - const randomExpirationType = - randomSubType === SubscriptionType.TIME_BASED - ? getRandomElement(TIME_BASED_EXPIRATION_TYPES) - : undefined; - - const result = await SubtopiaClient.subscribe( - { - subscriber: { - address: subscriber.address, - signer: subscriber.signer, - }, - smiID: infrastructureID, - smrID: dummyRegistryId, - expirationType: randomExpirationType, - }, - { - client: algodClient, - } - ); - - const claimResult = await SubtopiaClient.claimSubscriptionPass( - { - smiID: infrastructureID, - subID: Number(result.returnValue), - subscriber: { - address: subscriber.address, - signer: subscriber.signer, - }, - }, - { - client: algodClient, - } - ); - - const boxContent = await SubtopiaClient.getSubscriptionRecordForAccount( - algodClient, - subscriber.address, - infrastructureID - ); - - // Assert - expect(boxContent.subID).toBe(Number(result.returnValue)); - expect(boxContent.expirationType).toBe(randomExpirationType ?? 0); - expect(result).toBeDefined(); - expect(result.txID).toBeDefined(); - expect(result.returnValue).toBeGreaterThan(0); - expect(claimResult).toBeDefined(); - - const balance = algodClient.accountAssetInformation( - subscriber.address, - Number(result.returnValue) - ); - expect(balance).toBeDefined(); - expect(balance["assetID"]).toBe(Number(result.returnValue)); - } - - const deleteResponse = await SubtopiaClient.deleteSubscription( - { - smiID: infrastructureID, - smrID: dummyRegistryId, - user: { - address: adminAccount.addr, - signer: adminAccount.signer, - }, - }, - { - client: algodClient, - } - ); - - expect(deleteResponse.txID).toBeDefined(); - - // Should be deleted - await expect( - SubtopiaClient.getInfrastructureState(algodClient, infrastructureID) - ).rejects.toThrowError(); - }, - { timeout: 1e6 } - ); - - it( - "should correctly transfer SMI to new owner", - async () => { - // Setup - const { dummyRegistryId } = await setupDummyRegistry(); - - const randomSubType = getRandomElement([ - SubscriptionType.TIME_BASED, - SubscriptionType.UNLIMITED, - ]); - const response = await SubtopiaAdminClient.addInfrastructure({ - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - smrID: dummyRegistryId, - name: "Cool infrastructure", - price: 1, - client: algodClient, - subType: randomSubType, - maxSubs: 0, - coinID: 0, - }); - const infrastructureID = Number(response.returnValue); - - const oldOwner = await getRandomAccount( - algodClient, - adminAccount.addr, - adminAccount.signer - ); - - const randomExpirationType = - randomSubType === SubscriptionType.TIME_BASED - ? getRandomElement(TIME_BASED_EXPIRATION_TYPES) - : undefined; - const result = await SubtopiaClient.subscribe( - { - subscriber: { address: oldOwner.address, signer: oldOwner.signer }, - smiID: infrastructureID, - smrID: dummyRegistryId, - expirationType: randomExpirationType, - }, - { - client: algodClient, - } - ); - - // Test - const newOwner = await getRandomAccount( - algodClient, - adminAccount.addr, - adminAccount.signer - ); - - const oldBoxBeforeTransfer = await algodClient - .getApplicationBoxByName( - infrastructureID, - decodeAddress(oldOwner.address).publicKey - ) - .do(); - - const transferResult = await SubtopiaClient.transferSubscriptionPass( - { - newOwnerAddress: newOwner.address, - oldOwner: { - address: oldOwner.address, - signer: oldOwner.signer, - }, - smiID: infrastructureID, - subID: Number(result.returnValue), - }, - { client: algodClient } - ); - - // Assert - await expect( + const content = await getAppGlobalState( + response.infrastructureID, algodClient - .getApplicationBoxByName( - infrastructureID, - decodeAddress(oldOwner.address).publicKey - ) - .do() - ).rejects.toThrowError(); - const newBoxAfterTransfer = algodClient.getApplicationBoxByName( - infrastructureID, - decodeAddress(oldOwner.address).publicKey ); - expect(transferResult).toBeDefined(); - expect(oldBoxBeforeTransfer).toBeDefined(); - expect(newBoxAfterTransfer).toBeDefined(); - }, - { timeout: 1e6 } - ); - - it( - "should correctly unsubscribe/delete purchased Subscription", - async () => { - // Setup - const { dummyRegistryId } = await setupDummyRegistry(); - - const response = await SubtopiaAdminClient.addInfrastructure({ - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - smrID: dummyRegistryId, - name: "Cool infrastructure", - price: 1, - client: algodClient, - subType: SubscriptionType.UNLIMITED, - maxSubs: 0, - coinID: 0, - }); - const infrastructureID = Number(response.returnValue); - - const subscriber = await getRandomAccount( - algodClient, - adminAccount.addr, - adminAccount.signer - ); - - const randomExpirationType = getRandomElement( - TIME_BASED_EXPIRATION_TYPES - ); - const result = await SubtopiaClient.subscribe( - { - subscriber: { - address: subscriber.address, - signer: subscriber.signer, - }, - smiID: infrastructureID, - smrID: dummyRegistryId, - expirationType: randomExpirationType, - }, - { - client: algodClient, - } - ); - - // Test - const boxContent = await SubtopiaClient.getSubscriptionRecordForAccount( - algodClient, - subscriber.address, - infrastructureID - ); - - const deleteResult = await SubtopiaClient.unsubscribe( - { - subscriber: { - address: subscriber.address, - signer: subscriber.signer, - }, - smiID: infrastructureID, - }, - { - client: algodClient, - } - ); - - // Assert - expect(boxContent.subID).toBe(Number(result.returnValue)); - expect(deleteResult.returnValue).toBe(result.returnValue); - await expect( - algodClient - .getApplicationBoxByName( - infrastructureID, - decodeAddress(subscriber.address).publicKey - ) - .do() - ).rejects.toThrowError(); - expect(deleteResult).toBeDefined(); - expect(deleteResult.txID).toBeDefined(); - }, - { timeout: 1e6 } - ); - - it( - "should correctly transfer SMI ownership to new creator and claim", - async () => { - // Setup - const { dummyRegistryId } = await setupDummyRegistry(); - - const response = await SubtopiaAdminClient.addInfrastructure({ - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - smrID: dummyRegistryId, - name: "Cool infrastructure", - price: 1, - client: algodClient, - subType: SubscriptionType.UNLIMITED, - maxSubs: 0, - coinID: 0, - }); - const infrastructureID = Number(response.returnValue); - - // Test - const newOwner = await getRandomAccount( - algodClient, - adminAccount.addr, - adminAccount.signer - ); - - const transferResult = await SubtopiaAdminClient.transferInfrastructure({ - client: algodClient, - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - newCreatorAddress: newOwner.address, - smiID: infrastructureID, - smrID: dummyRegistryId, - }); - - const boxContent = - await SubtopiaAdminClient.getPendingTransferRecordForAccount( - algodClient, - newOwner.address, - dummyRegistryId - ); - - await SubtopiaAdminClient.claimInfrastructure({ - client: algodClient, - creator: { address: newOwner.address, signer: newOwner.signer }, - smiID: infrastructureID, - smrID: dummyRegistryId, - }); // Assert - const expectedLocker = await getLocker( - algodClient, - newOwner.address, - dummyRegistry.appAddress - ); - - expect(boxContent).toBeDefined(); - expect(boxContent?.smiID).toBe(infrastructureID); - expect(boxContent?.locker).toBe(expectedLocker.lsig.address()); - expect( - await SubtopiaAdminClient.getPendingTransferRecordForAccount( - algodClient, - newOwner.address, - dummyRegistryId - ) - ).toBe(undefined); - expect(transferResult.txID).toBeDefined(); + expect(content.price.value).toBe(1000000); }, { timeout: 1e6 } ); - it( - "should correctly transfer SMI ownership to new creator and claim", - async () => { - // Setup - const { dummyRegistryId } = await setupDummyRegistry(); - const randomAsset = await generateRandomAsset(algodClient, adminAccount); - - const response = await SubtopiaAdminClient.addInfrastructure({ - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - smrID: dummyRegistryId, - name: "Cool infrastructure", - price: 1, - client: algodClient, - subType: SubscriptionType.UNLIMITED, - maxSubs: 0, - coinID: randomAsset.index, - }); - const infrastructureID = Number(response.returnValue); - - // Test - const newOwner = await getRandomAccount( - algodClient, - adminAccount.addr, - adminAccount.signer - ); - - const transferResult = await SubtopiaAdminClient.transferInfrastructure({ - client: algodClient, - creator: { address: adminAccount.addr, signer: adminAccount.signer }, - newCreatorAddress: newOwner.address, - smiID: infrastructureID, - smrID: dummyRegistryId, - }); - - const boxContent = - await SubtopiaAdminClient.getPendingTransferRecordForAccount( - algodClient, - newOwner.address, - dummyRegistryId - ); - - await SubtopiaAdminClient.claimInfrastructure({ - client: algodClient, - creator: { address: newOwner.address, signer: newOwner.signer }, - smiID: infrastructureID, - smrID: dummyRegistryId, - }); - - // Assert - const expectedLocker = await getLocker( - algodClient, - newOwner.address, - dummyRegistry.appAddress - ); - - expect(boxContent).toBeDefined(); - expect(boxContent?.smiID).toBe(infrastructureID); - expect(boxContent?.locker).toBe(expectedLocker.lsig.address()); - expect( - await SubtopiaAdminClient.getPendingTransferRecordForAccount( - algodClient, - newOwner.address, - dummyRegistryId - ) - ).toBe(undefined); - expect(transferResult.txID).toBeDefined(); - }, - { timeout: 1e6 } - ); + // it( + // "should correctly add and transfer infrastructure", + // async () => { + // const subtopiaRegistryClient = await SubtopiaRegistry.init( + // algodClient, + // creatorSignerAccount, + // ChainType.TESTNET + // ); + // const newOwner = await generateRandomAccount(); + + // let lockerId = await subtopiaRegistryClient.getLocker( + // creatorAccount.addr + // ); + // if (lockerId === undefined) { + // const response = await subtopiaRegistryClient.createLocker({ + // creator: creatorSignerAccount, + // }); + // lockerId = response.lockerId; + // } + + // // Test + // const response = await subtopiaRegistryClient.createInfrastructure({ + // name: "Cool infrastructure", + // price: 1, + // subType: SubscriptionType.UNLIMITED, + // maxSubs: 0, + // coinID: 0, + // lockerId: lockerId, + // }); + + // expect(response.infrastructureId).toBeGreaterThan(0); + + // const transferResponse = + // await subtopiaRegistryClient.transferInfrastructure({ + // smiId: response.infrastructureId, + // newOwnerAddress: newOwner.addr, + // }); + + // expect(transferResponse.txId).toBeDefined(); + // }, + // { + // timeout: 1e6, + // } + // ); + + // it( + // "should correctly add infrastructure with already rekeyed locker", + // async () => { + // // Setup + // const { dummyRegistryId, dummyRegistryAddress } = + // await setupDummyRegistry(); + + // const locker = await getLocker( + // algodClient, + // adminAccount.addr, + // dummyRegistryAddress + // ); + + // await rekeyLocker({ + // client: algodClient, + // locker: locker.lsig, + // creatorAddress: adminAccount.addr, + // creatorSigner: adminAccount.signer, + // registryAddress: dummyRegistryAddress, + // registrySigner: adminAccount.signer, + // rekeyToAddress: dummyRegistryAddress, + // }); + + // // Test + // const result = await SubtopiaAdminClient.addInfrastructure({ + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // smrID: dummyRegistryId, + // name: "Cool infrastructure", + // price: 1, + // client: algodClient, + // subType: SubscriptionType.UNLIMITED, + // maxSubs: 0, + // coinID: 0, + // }); + + // const infrastructureID = Number(result.returnValue); + + // const content = await SubtopiaClient.getInfrastructureState( + // algodClient, + // infrastructureID + // ); + + // const contentWithNoNormalization = + // await SubtopiaClient.getInfrastructureState( + // algodClient, + // infrastructureID, + // false + // ); + + // // Assert + // expect(content.price).toBe(1); + // expect(contentWithNoNormalization.price).toBe(1 * 1e6); + // expect(result).toBeDefined(); + // expect(result.txID).toBeDefined(); + // }, + // { timeout: 1e6 } + // ); + + // it.each([ + // [SubscriptionExpirationType.UNLIMITED, DiscountType.FIXED, 1], + // [SubscriptionExpirationType.MONTHLY, DiscountType.FIXED, 2], + // [SubscriptionExpirationType.QUARTERLY, DiscountType.FIXED, 3], + // [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.FIXED, 4], + // [SubscriptionExpirationType.ANNUAL, DiscountType.FIXED, 10], + // [SubscriptionExpirationType.UNLIMITED, DiscountType.PERCENTAGE, 1], + // [SubscriptionExpirationType.MONTHLY, DiscountType.PERCENTAGE, 2], + // [SubscriptionExpirationType.QUARTERLY, DiscountType.PERCENTAGE, 3], + // [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.PERCENTAGE, 4], + // [SubscriptionExpirationType.ANNUAL, DiscountType.PERCENTAGE, 10], + // ])( + // "should correctly create discount of type %i, %i and %i on SMI", + // async (expirationType, discountType, discountValue) => { + // // Setup + // const { dummyRegistryId } = await setupDummyRegistry(); + // const randomAsset = await generateRandomAsset(algodClient, adminAccount); + + // const response = await SubtopiaAdminClient.addInfrastructure({ + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // smrID: dummyRegistryId, + // name: "Cool infrastructure", + // price: 1, + // client: algodClient, + // subType: + // expirationType === SubscriptionExpirationType.UNLIMITED + // ? SubscriptionType.UNLIMITED + // : SubscriptionType.TIME_BASED, + // maxSubs: 0, + // coinID: randomAsset.index, + // }); + // const infrastructureID = Number(response.returnValue); + + // // Test + // const discount = await SubtopiaClient.createDiscount( + // { + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // discount: { + // expirationType: expirationType, + // discountType: discountType, + // discountValue: discountValue, + // }, + // }, + // { client: algodClient } + // ); + + // // Assert + // expect(discount).toBeDefined(); + // expect(discount.txID).toBeDefined(); + + // const discountRecord = await SubtopiaClient.getDiscountRecordForType( + // algodClient, + // infrastructureID, + // expirationType + // ); + + // const smiState = await SubtopiaClient.getInfrastructureState( + // algodClient, + // infrastructureID + // ); + // assert(smiState.discounts[0] === discountRecord); + // assert(smiState.discounts.length === 1); + + // expect(discountRecord).toBeDefined(); + // expect(discountRecord.discountType).toBe(discountType); + // expect(discountRecord.discountValue).toBe( + // discountType === DiscountType.FIXED + // ? normalizePrice( + // discountValue, + // randomAsset.decimals, + // PriceNormalizationType.RAW + // ) + // : discountValue + // ); + // expect(discountRecord.expirationType).toBe(expirationType); + + // await SubtopiaClient.deleteDiscount( + // { + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // expirationType: expirationType, + // }, + // { client: algodClient } + // ); + + // // Should be deleted + // await expect( + // SubtopiaClient.getDiscountRecordForType( + // algodClient, + // infrastructureID, + // expirationType + // ) + // ).rejects.toThrowError(); + + // const postDeleteSmiState = await SubtopiaClient.getInfrastructureState( + // algodClient, + // infrastructureID + // ); + // assert(postDeleteSmiState.discounts.length === 0); + // }, + // { timeout: 1e6 } + // ); + + // it.each([ + // [SubscriptionExpirationType.UNLIMITED, undefined, 0], + // [SubscriptionExpirationType.UNLIMITED, DiscountType.FIXED, 1], + // [SubscriptionExpirationType.MONTHLY, DiscountType.FIXED, 2], + // [SubscriptionExpirationType.QUARTERLY, DiscountType.FIXED, 3], + // [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.FIXED, 4], + // [SubscriptionExpirationType.ANNUAL, DiscountType.FIXED, 10], + // [SubscriptionExpirationType.UNLIMITED, DiscountType.PERCENTAGE, 1], + // [SubscriptionExpirationType.MONTHLY, DiscountType.PERCENTAGE, 2], + // [SubscriptionExpirationType.QUARTERLY, DiscountType.PERCENTAGE, 3], + // [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.PERCENTAGE, 4], + // [SubscriptionExpirationType.ANNUAL, DiscountType.PERCENTAGE, 10], + // ])( + // "should correctly purchase subscription with algo and discount of type %i, %i and %i", + // async ( + // expirationType: SubscriptionExpirationType, + // discountType: DiscountType | undefined, + // discountValue: number + // ) => { + // // Setup + // const { dummyRegistryId } = await setupDummyRegistry(); + + // const response = await SubtopiaAdminClient.addInfrastructure({ + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // smrID: dummyRegistryId, + // name: "Cool infrastructure", + // price: 20, + // client: algodClient, + // subType: + // expirationType === SubscriptionExpirationType.UNLIMITED + // ? SubscriptionType.UNLIMITED + // : SubscriptionType.TIME_BASED, + // maxSubs: 0, + // coinID: 0, + // }); + + // const infrastructureID = Number(response.returnValue); + + // // Test + // const subscriber = await getRandomAccount( + // algodClient, + // adminAccount.addr, + // adminAccount.signer + // ); + + // if (discountType !== undefined) { + // await SubtopiaClient.createDiscount( + // { + // creator: { + // address: adminAccount.addr, + // signer: adminAccount.signer, + // }, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // discount: { + // expirationType: expirationType, + // discountType: discountType, + // discountValue: discountValue, + // }, + // }, + // { client: algodClient } + // ); + // } + + // const result = await SubtopiaClient.subscribe( + // { + // subscriber: { + // address: subscriber.address, + // signer: subscriber.signer, + // }, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // expirationType: expirationType, + // }, + // { + // client: algodClient, + // } + // ); + + // if (discountType !== undefined) { + // const discountBox = await SubtopiaClient.getDiscountRecordForType( + // algodClient, + // infrastructureID, + // expirationType + // ); + + // expect(discountBox).toBeDefined(); + // expect(discountBox.totalClaims).toBe(1); + // expect(discountBox.discountType).toBe(discountType); + // expect(discountBox.expirationType).toBe(expirationType); + // } + + // const claimResult = await SubtopiaClient.claimSubscriptionPass( + // { + // smiID: infrastructureID, + // subID: Number(result.returnValue), + // subscriber: { + // address: subscriber.address, + // signer: subscriber.signer, + // }, + // }, + // { + // client: algodClient, + // } + // ); + + // const boxContent = await SubtopiaClient.getSubscriptionRecordForAccount( + // algodClient, + // subscriber.address, + // infrastructureID + // ); + + // // Assert + // expect(boxContent.subID).toBe(Number(result.returnValue)); + // expect(boxContent.expirationType).toBe(expirationType); + // expect(result).toBeDefined(); + // expect(result.txID).toBeDefined(); + // expect(result.returnValue).toBeGreaterThan(0); + // expect(claimResult).toBeDefined(); + + // const balance = algodClient.accountAssetInformation( + // subscriber.address, + // Number(result.returnValue) + // ); + // expect(balance).toBeDefined(); + // expect(balance["assetID"]).toBe(Number(result.returnValue)); + + // await SubtopiaClient.unsubscribe( + // { + // smiID: infrastructureID, + // subscriber: { + // address: subscriber.address, + // signer: subscriber.signer, + // }, + // }, + // { + // client: algodClient, + // } + // ); + + // if (discountType !== undefined) { + // await SubtopiaClient.deleteDiscount( + // { + // creator: { + // address: adminAccount.addr, + // signer: adminAccount.signer, + // }, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // expirationType: expirationType, + // }, + // { client: algodClient } + // ); + // } + // }, + // { timeout: 1e6 } + // ); + + // it.each([ + // [SubscriptionExpirationType.UNLIMITED, undefined, 0], + // [SubscriptionExpirationType.UNLIMITED, DiscountType.FIXED, 1], + // [SubscriptionExpirationType.MONTHLY, DiscountType.FIXED, 2], + // [SubscriptionExpirationType.QUARTERLY, DiscountType.FIXED, 3], + // [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.FIXED, 4], + // [SubscriptionExpirationType.ANNUAL, DiscountType.FIXED, 10], + // [SubscriptionExpirationType.UNLIMITED, DiscountType.PERCENTAGE, 1], + // [SubscriptionExpirationType.MONTHLY, DiscountType.PERCENTAGE, 2], + // [SubscriptionExpirationType.QUARTERLY, DiscountType.PERCENTAGE, 3], + // [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.PERCENTAGE, 4], + // [SubscriptionExpirationType.ANNUAL, DiscountType.PERCENTAGE, 10], + // ])( + // "should correctly purchase subscription with custom ASA and discount of type %i %i %i", + // async (expirationType, discountType, discountValue) => { + // // Setup + // const { dummyRegistryId } = await setupDummyRegistry(); + + // const randomAsset = await generateRandomAsset( + // algodClient, + // adminAccount, + // undefined, + // 1000 * expirationTypeToMonths(expirationType) + // ); + + // const response = await SubtopiaAdminClient.addInfrastructure({ + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // smrID: dummyRegistryId, + // name: "Cool infrastructure", + // price: 1 + discountValue, + // client: algodClient, + // coinID: randomAsset.index, + // subType: + // expirationType === SubscriptionExpirationType.UNLIMITED + // ? SubscriptionType.UNLIMITED + // : SubscriptionType.TIME_BASED, + // maxSubs: 0, + // }); + + // const infrastructureID = Number(response.returnValue); + + // // Test + // const subscriber = await getRandomAccount( + // algodClient, + // adminAccount.addr, + // adminAccount.signer, + // randomAsset + // ); + + // if (discountType !== undefined) { + // const response = await SubtopiaClient.createDiscount( + // { + // creator: { + // address: adminAccount.addr, + // signer: adminAccount.signer, + // }, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // discount: { + // expirationType: expirationType, + // discountType: discountType, + // discountValue: discountValue, + // }, + // }, + // { client: algodClient } + // ); + // console.log(response); + // } + + // const result = await SubtopiaClient.subscribe( + // { + // subscriber: { + // address: subscriber.address, + // signer: subscriber.signer, + // }, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // expirationType: expirationType, + // }, + // { + // client: algodClient, + // } + // ); + + // const claimResult = await SubtopiaClient.claimSubscriptionPass( + // { + // smiID: infrastructureID, + // subID: Number(result.returnValue), + // subscriber: { + // address: subscriber.address, + // signer: subscriber.signer, + // }, + // }, + // { + // client: algodClient, + // } + // ); + + // const boxContent = await SubtopiaClient.getSubscriptionRecordForAccount( + // algodClient, + // subscriber.address, + // infrastructureID + // ); + + // // Assert + // expect(boxContent.subID).toBe(Number(result.returnValue)); + // expect(result).toBeDefined(); + // expect(result.txID).toBeDefined(); + // expect(result.returnValue).toBeGreaterThan(0); + // expect(claimResult).toBeDefined(); + + // const balance = algodClient.accountAssetInformation( + // subscriber.address, + // Number(result.returnValue) + // ); + // expect(balance).toBeDefined(); + // expect(balance["assetID"]).toBe(Number(result.returnValue)); + // }, + // { timeout: 1e6 } + // ); + + // it( + // "should correctly claim revenue with algo", + // async () => { + // // Setup + // const { dummyRegistryId } = await setupDummyRegistry(); + + // const randomSubType = getRandomElement([ + // SubscriptionType.TIME_BASED, + // SubscriptionType.UNLIMITED, + // ]); + + // const response = await SubtopiaAdminClient.addInfrastructure({ + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // smrID: dummyRegistryId, + // name: "Cool infrastructure", + // price: 1, + // client: algodClient, + // subType: randomSubType, + // maxSubs: 0, + // coinID: 0, + // }); + + // const infrastructureID = Number(response.returnValue); + + // // Test + // const subscriber = await getRandomAccount( + // algodClient, + // adminAccount.addr, + // adminAccount.signer + // ); + + // const randomExpirationType = + // randomSubType === SubscriptionType.TIME_BASED + // ? getRandomElement(TIME_BASED_EXPIRATION_TYPES) + // : undefined; + + // const subResponse = await SubtopiaClient.subscribe( + // { + // subscriber: { + // address: subscriber.address, + // signer: subscriber.signer, + // }, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // expirationType: randomExpirationType, + // }, + // { + // client: algodClient, + // } + // ); + + // await optOutAsset( + // algodClient, + // subscriber, + // Number(subResponse.returnValue) + // ); + + // const claimResponse = await SubtopiaClient.claimRevenue( + // { + // user: { + // address: adminAccount.addr, + // signer: adminAccount.signer, + // }, + // smrID: dummyRegistryId, + // }, + // { + // client: algodClient, + // } + // ); + + // // Assert + // expect(claimResponse).toBeDefined(); + // }, + // { timeout: 1e6 } + // ); + + // it.each([[SubscriptionType.UNLIMITED], [SubscriptionType.TIME_BASED]])( + // "should correctly delete SMI of type %i with N subscribers before deleting SMI", + // async (randomSubType) => { + // // Setup + // const { dummyRegistryId } = await setupDummyRegistry(); + + // const addResponse = await SubtopiaAdminClient.addInfrastructure({ + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // smrID: dummyRegistryId, + // name: "Cool infrastructure", + // price: 1, + // client: algodClient, + // subType: randomSubType, + // maxSubs: 0, + // coinID: 0, + // }); + + // const infrastructureID = Number(addResponse.returnValue); + + // // Test + // // Create 50 subscribers + // for (let index = 0; index < 50; index++) { + // const subscriber = await getRandomAccount( + // algodClient, + // adminAccount.addr, + // adminAccount.signer + // ); + + // const randomExpirationType = + // randomSubType === SubscriptionType.TIME_BASED + // ? getRandomElement(TIME_BASED_EXPIRATION_TYPES) + // : undefined; + + // const result = await SubtopiaClient.subscribe( + // { + // subscriber: { + // address: subscriber.address, + // signer: subscriber.signer, + // }, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // expirationType: randomExpirationType, + // }, + // { + // client: algodClient, + // } + // ); + + // const claimResult = await SubtopiaClient.claimSubscriptionPass( + // { + // smiID: infrastructureID, + // subID: Number(result.returnValue), + // subscriber: { + // address: subscriber.address, + // signer: subscriber.signer, + // }, + // }, + // { + // client: algodClient, + // } + // ); + + // const boxContent = await SubtopiaClient.getSubscriptionRecordForAccount( + // algodClient, + // subscriber.address, + // infrastructureID + // ); + + // // Assert + // expect(boxContent.subID).toBe(Number(result.returnValue)); + // expect(boxContent.expirationType).toBe(randomExpirationType ?? 0); + // expect(result).toBeDefined(); + // expect(result.txID).toBeDefined(); + // expect(result.returnValue).toBeGreaterThan(0); + // expect(claimResult).toBeDefined(); + + // const balance = algodClient.accountAssetInformation( + // subscriber.address, + // Number(result.returnValue) + // ); + // expect(balance).toBeDefined(); + // expect(balance["assetID"]).toBe(Number(result.returnValue)); + // } + + // const deleteResponse = await SubtopiaClient.deleteSubscription( + // { + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // user: { + // address: adminAccount.addr, + // signer: adminAccount.signer, + // }, + // }, + // { + // client: algodClient, + // } + // ); + + // expect(deleteResponse.txID).toBeDefined(); + + // // Should be deleted + // await expect( + // SubtopiaClient.getInfrastructureState(algodClient, infrastructureID) + // ).rejects.toThrowError(); + // }, + // { timeout: 1e6 } + // ); + + // it( + // "should correctly transfer SMI to new owner", + // async () => { + // // Setup + // const { dummyRegistryId } = await setupDummyRegistry(); + + // const randomSubType = getRandomElement([ + // SubscriptionType.TIME_BASED, + // SubscriptionType.UNLIMITED, + // ]); + // const response = await SubtopiaAdminClient.addInfrastructure({ + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // smrID: dummyRegistryId, + // name: "Cool infrastructure", + // price: 1, + // client: algodClient, + // subType: randomSubType, + // maxSubs: 0, + // coinID: 0, + // }); + // const infrastructureID = Number(response.returnValue); + + // const oldOwner = await getRandomAccount( + // algodClient, + // adminAccount.addr, + // adminAccount.signer + // ); + + // const randomExpirationType = + // randomSubType === SubscriptionType.TIME_BASED + // ? getRandomElement(TIME_BASED_EXPIRATION_TYPES) + // : undefined; + // const result = await SubtopiaClient.subscribe( + // { + // subscriber: { address: oldOwner.address, signer: oldOwner.signer }, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // expirationType: randomExpirationType, + // }, + // { + // client: algodClient, + // } + // ); + + // // Test + // const newOwner = await getRandomAccount( + // algodClient, + // adminAccount.addr, + // adminAccount.signer + // ); + + // const oldBoxBeforeTransfer = await algodClient + // .getApplicationBoxByName( + // infrastructureID, + // decodeAddress(oldOwner.address).publicKey + // ) + // .do(); + + // const transferResult = await SubtopiaClient.transferSubscriptionPass( + // { + // newOwnerAddress: newOwner.address, + // oldOwner: { + // address: oldOwner.address, + // signer: oldOwner.signer, + // }, + // smiID: infrastructureID, + // subID: Number(result.returnValue), + // }, + // { client: algodClient } + // ); + + // // Assert + // await expect( + // algodClient + // .getApplicationBoxByName( + // infrastructureID, + // decodeAddress(oldOwner.address).publicKey + // ) + // .do() + // ).rejects.toThrowError(); + // const newBoxAfterTransfer = algodClient.getApplicationBoxByName( + // infrastructureID, + // decodeAddress(oldOwner.address).publicKey + // ); + // expect(transferResult).toBeDefined(); + // expect(oldBoxBeforeTransfer).toBeDefined(); + // expect(newBoxAfterTransfer).toBeDefined(); + // }, + // { timeout: 1e6 } + // ); + + // it( + // "should correctly unsubscribe/delete purchased Subscription", + // async () => { + // // Setup + // const { dummyRegistryId } = await setupDummyRegistry(); + + // const response = await SubtopiaAdminClient.addInfrastructure({ + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // smrID: dummyRegistryId, + // name: "Cool infrastructure", + // price: 1, + // client: algodClient, + // subType: SubscriptionType.UNLIMITED, + // maxSubs: 0, + // coinID: 0, + // }); + // const infrastructureID = Number(response.returnValue); + + // const subscriber = await getRandomAccount( + // algodClient, + // adminAccount.addr, + // adminAccount.signer + // ); + + // const randomExpirationType = getRandomElement( + // TIME_BASED_EXPIRATION_TYPES + // ); + // const result = await SubtopiaClient.subscribe( + // { + // subscriber: { + // address: subscriber.address, + // signer: subscriber.signer, + // }, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // expirationType: randomExpirationType, + // }, + // { + // client: algodClient, + // } + // ); + + // // Test + // const boxContent = await SubtopiaClient.getSubscriptionRecordForAccount( + // algodClient, + // subscriber.address, + // infrastructureID + // ); + + // const deleteResult = await SubtopiaClient.unsubscribe( + // { + // subscriber: { + // address: subscriber.address, + // signer: subscriber.signer, + // }, + // smiID: infrastructureID, + // }, + // { + // client: algodClient, + // } + // ); + + // // Assert + // expect(boxContent.subID).toBe(Number(result.returnValue)); + // expect(deleteResult.returnValue).toBe(result.returnValue); + // await expect( + // algodClient + // .getApplicationBoxByName( + // infrastructureID, + // decodeAddress(subscriber.address).publicKey + // ) + // .do() + // ).rejects.toThrowError(); + // expect(deleteResult).toBeDefined(); + // expect(deleteResult.txID).toBeDefined(); + // }, + // { timeout: 1e6 } + // ); + + // it( + // "should correctly transfer SMI ownership to new creator and claim", + // async () => { + // // Setup + // const { dummyRegistryId } = await setupDummyRegistry(); + + // const response = await SubtopiaAdminClient.addInfrastructure({ + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // smrID: dummyRegistryId, + // name: "Cool infrastructure", + // price: 1, + // client: algodClient, + // subType: SubscriptionType.UNLIMITED, + // maxSubs: 0, + // coinID: 0, + // }); + // const infrastructureID = Number(response.returnValue); + + // // Test + // const newOwner = await getRandomAccount( + // algodClient, + // adminAccount.addr, + // adminAccount.signer + // ); + + // const transferResult = await SubtopiaAdminClient.transferInfrastructure({ + // client: algodClient, + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // newCreatorAddress: newOwner.address, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // }); + + // const boxContent = + // await SubtopiaAdminClient.getPendingTransferRecordForAccount( + // algodClient, + // newOwner.address, + // dummyRegistryId + // ); + + // await SubtopiaAdminClient.claimInfrastructure({ + // client: algodClient, + // creator: { address: newOwner.address, signer: newOwner.signer }, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // }); + + // // Assert + // const expectedLocker = await getLocker( + // algodClient, + // newOwner.address, + // dummyRegistry.appAddress + // ); + + // expect(boxContent).toBeDefined(); + // expect(boxContent?.smiID).toBe(infrastructureID); + // expect(boxContent?.locker).toBe(expectedLocker.lsig.address()); + // expect( + // await SubtopiaAdminClient.getPendingTransferRecordForAccount( + // algodClient, + // newOwner.address, + // dummyRegistryId + // ) + // ).toBe(undefined); + // expect(transferResult.txID).toBeDefined(); + // }, + // { timeout: 1e6 } + // ); + + // it( + // "should correctly transfer SMI ownership to new creator and claim", + // async () => { + // // Setup + // const { dummyRegistryId } = await setupDummyRegistry(); + // const randomAsset = await generateRandomAsset(algodClient, adminAccount); + + // const response = await SubtopiaAdminClient.addInfrastructure({ + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // smrID: dummyRegistryId, + // name: "Cool infrastructure", + // price: 1, + // client: algodClient, + // subType: SubscriptionType.UNLIMITED, + // maxSubs: 0, + // coinID: randomAsset.index, + // }); + // const infrastructureID = Number(response.returnValue); + + // // Test + // const newOwner = await getRandomAccount( + // algodClient, + // adminAccount.addr, + // adminAccount.signer + // ); + + // const transferResult = await SubtopiaAdminClient.transferInfrastructure({ + // client: algodClient, + // creator: { address: adminAccount.addr, signer: adminAccount.signer }, + // newCreatorAddress: newOwner.address, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // }); + + // const boxContent = + // await SubtopiaAdminClient.getPendingTransferRecordForAccount( + // algodClient, + // newOwner.address, + // dummyRegistryId + // ); + + // await SubtopiaAdminClient.claimInfrastructure({ + // client: algodClient, + // creator: { address: newOwner.address, signer: newOwner.signer }, + // smiID: infrastructureID, + // smrID: dummyRegistryId, + // }); + + // // Assert + // const expectedLocker = await getLocker( + // algodClient, + // newOwner.address, + // dummyRegistry.appAddress + // ); + + // expect(boxContent).toBeDefined(); + // expect(boxContent?.smiID).toBe(infrastructureID); + // expect(boxContent?.locker).toBe(expectedLocker.lsig.address()); + // expect( + // await SubtopiaAdminClient.getPendingTransferRecordForAccount( + // algodClient, + // newOwner.address, + // dummyRegistryId + // ) + // ).toBe(undefined); + // expect(transferResult.txID).toBeDefined(); + // }, + // { timeout: 1e6 } + // ); }); diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index ee0dae6..0000000 --- a/yarn.lock +++ /dev/null @@ -1,6189 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@algorandfoundation/algokit-utils@^2.3.1": - version "2.3.1" - resolved "https://registry.npmjs.org/@algorandfoundation/algokit-utils/-/algokit-utils-2.3.1.tgz" - integrity sha512-SI5W6YLWdflCxtNHYVyPDnAA5f7D1RxFnfJ5Aw2RgBtm9LFyZEkYAz9q4zTaQWgFvRDTqkTDh0swdJex3XWgDA== - dependencies: - algosdk "^2.3.0" - algosdk2-2 "npm:algosdk@2.2.0" - buffer "^6.0.3" - -"@ampproject/remapping@^2.2.0", "@ampproject/remapping@^2.2.1": - version "2.2.1" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.21.4": - version "7.21.4" - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/compat-data@^7.22.0": - version "7.22.3" - -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.21.4": - version "7.22.1" - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.22.0" - "@babel/helper-compilation-targets" "^7.22.1" - "@babel/helper-module-transforms" "^7.22.1" - "@babel/helpers" "^7.22.0" - "@babel/parser" "^7.22.0" - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/generator@^7.22.0", "@babel/generator@^7.22.3": - version "7.22.3" - dependencies: - "@babel/types" "^7.22.3" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.22.1": - version "7.22.1" - dependencies: - "@babel/compat-data" "^7.22.0" - "@babel/helper-validator-option" "^7.21.0" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-environment-visitor@^7.22.1": - version "7.22.1" - -"@babel/helper-function-name@^7.21.0": - version "7.21.0" - dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" - -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-imports@^7.21.4": - version "7.21.4" - dependencies: - "@babel/types" "^7.21.4" - -"@babel/helper-module-transforms@^7.22.1": - version "7.22.1" - dependencies: - "@babel/helper-environment-visitor" "^7.22.1" - "@babel/helper-module-imports" "^7.21.4" - "@babel/helper-simple-access" "^7.21.5" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.0" - -"@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2": - version "7.21.5" - -"@babel/helper-simple-access@^7.21.5": - version "7.21.5" - dependencies: - "@babel/types" "^7.21.5" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.21.5": - version "7.21.5" - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - -"@babel/helper-validator-option@^7.21.0": - version "7.21.0" - -"@babel/helpers@^7.22.0": - version "7.22.3" - dependencies: - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.3" - -"@babel/highlight@^7.18.6": - version "7.18.6" - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.21.9", "@babel/parser@^7.22.0", "@babel/parser@^7.22.4": - version "7.22.4" - -"@babel/plugin-transform-react-jsx-self@^7.21.0": - version "7.21.0" - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-react-jsx-source@^7.19.6": - version "7.19.6" - dependencies: - "@babel/helper-plugin-utils" "^7.19.0" - -"@babel/template@^7.20.7", "@babel/template@^7.21.9": - version "7.21.9" - dependencies: - "@babel/code-frame" "^7.21.4" - "@babel/parser" "^7.21.9" - "@babel/types" "^7.21.5" - -"@babel/traverse@^7.22.1": - version "7.22.4" - dependencies: - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.22.3" - "@babel/helper-environment-visitor" "^7.22.1" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.22.4" - "@babel/types" "^7.22.4" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.18.6", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.22.0", "@babel/types@^7.22.3", "@babel/types@^7.22.4": - version "7.22.4" - dependencies: - "@babel/helper-string-parser" "^7.21.5" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@commitlint/config-validator@^17.4.4": - version "17.4.4" - resolved "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz" - integrity sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg== - dependencies: - "@commitlint/types" "^17.4.4" - ajv "^8.11.0" - -"@commitlint/execute-rule@^17.4.0": - version "17.4.0" - resolved "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz" - integrity sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA== - -"@commitlint/load@>6.1.1": - version "17.5.0" - resolved "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz" - integrity sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q== - dependencies: - "@commitlint/config-validator" "^17.4.4" - "@commitlint/execute-rule" "^17.4.0" - "@commitlint/resolve-extends" "^17.4.4" - "@commitlint/types" "^17.4.4" - "@types/node" "*" - chalk "^4.1.0" - cosmiconfig "^8.0.0" - cosmiconfig-typescript-loader "^4.0.0" - lodash.isplainobject "^4.0.6" - lodash.merge "^4.6.2" - lodash.uniq "^4.5.0" - resolve-from "^5.0.0" - ts-node "^10.8.1" - typescript "^4.6.4 || ^5.0.0" - -"@commitlint/resolve-extends@^17.4.4": - version "17.4.4" - resolved "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz" - integrity sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A== - dependencies: - "@commitlint/config-validator" "^17.4.4" - "@commitlint/types" "^17.4.4" - import-fresh "^3.0.0" - lodash.mergewith "^4.6.2" - resolve-from "^5.0.0" - resolve-global "^1.0.0" - -"@commitlint/types@^17.4.4": - version "17.4.4" - resolved "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz" - integrity sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ== - dependencies: - chalk "^4.1.0" - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@csstools/selector-specificity@^2.0.2": - version "2.2.0" - resolved "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz" - integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== - -"@esbuild/darwin-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz" - integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== - -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0": - version "4.5.1" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz" - integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== - -"@eslint/eslintrc@^2.0.3": - version "2.0.3" - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.5.2" - 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" - -"@eslint/js@8.42.0": - version "8.42.0" - -"@feki.de/semantic-release-yarn@1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@feki.de/semantic-release-yarn/-/semantic-release-yarn-1.0.1.tgz" - integrity sha512-7y6PSJfJAnKu35exuPO32Iiy9e+Nab577bk4y+kO8Led3Zl/UcjiZxaYZenXZjMZg6Ms9vhNEXvUWUA3D9f5Pg== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - execa "^5.0.0" - fs-extra "^10.0.0" - lodash "^4.17.15" - nerf-dart "^1.0.0" - normalize-url "^6.0.0" - rc "^1.2.8" - read-pkg "^5.0.0" - registry-auth-token "^4.0.0" - semver "^7.1.2" - tempy "^1.0.0" - -"@gar/promisify@^1.1.3": - version "1.1.3" - -"@humanwhocodes/config-array@^0.11.10": - version "0.11.10" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz" - integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@isaacs/cliui@^8.0.2": - 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" - -"@isaacs/string-locale-compare@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz" - integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== - -"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": - version "0.1.3" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@nodelib/fs.scandir@2.1.5": - 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" - -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - 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@^1.2.3", "@nodelib/fs.walk@^1.2.8": - 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" - -"@npmcli/arborist@^6.2.9": - version "6.2.9" - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/fs" "^3.1.0" - "@npmcli/installed-package-contents" "^2.0.2" - "@npmcli/map-workspaces" "^3.0.2" - "@npmcli/metavuln-calculator" "^5.0.0" - "@npmcli/name-from-folder" "^2.0.0" - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/package-json" "^3.0.0" - "@npmcli/query" "^3.0.0" - "@npmcli/run-script" "^6.0.0" - bin-links "^4.0.1" - cacache "^17.0.4" - common-ancestor-path "^1.0.1" - hosted-git-info "^6.1.1" - json-parse-even-better-errors "^3.0.0" - json-stringify-nice "^1.1.4" - minimatch "^9.0.0" - nopt "^7.0.0" - npm-install-checks "^6.0.0" - npm-package-arg "^10.1.0" - npm-pick-manifest "^8.0.1" - npm-registry-fetch "^14.0.3" - npmlog "^7.0.1" - pacote "^15.0.8" - parse-conflict-json "^3.0.0" - proc-log "^3.0.0" - promise-all-reject-late "^1.0.0" - promise-call-limit "^1.0.2" - read-package-json-fast "^3.0.2" - semver "^7.3.7" - ssri "^10.0.1" - treeverse "^3.0.0" - walk-up-path "^3.0.1" - -"@npmcli/config@^6.1.7": - version "6.1.7" - dependencies: - "@npmcli/map-workspaces" "^3.0.2" - ini "^4.1.0" - nopt "^7.0.0" - proc-log "^3.0.0" - read-package-json-fast "^3.0.2" - semver "^7.3.5" - walk-up-path "^3.0.1" - -"@npmcli/disparity-colors@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz" - integrity sha512-5R/z157/f20Fi0Ou4ZttL51V0xz0EdPEOauFtPCEYOLInDBRCj1/TxOJ5aGTrtShxEshN2d+hXb9ZKSi5RLBcg== - dependencies: - ansi-styles "^4.3.0" - -"@npmcli/fs@^2.1.0": - version "2.1.2" - dependencies: - "@gar/promisify" "^1.1.3" - semver "^7.3.5" - -"@npmcli/fs@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz" - integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== - dependencies: - semver "^7.3.5" - -"@npmcli/git@^4.0.0", "@npmcli/git@^4.0.1": - version "4.0.4" - dependencies: - "@npmcli/promise-spawn" "^6.0.0" - lru-cache "^7.4.4" - npm-pick-manifest "^8.0.0" - proc-log "^3.0.0" - promise-inflight "^1.0.1" - promise-retry "^2.0.1" - semver "^7.3.5" - which "^3.0.0" - -"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.0.2": - version "2.0.2" - resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz" - integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== - dependencies: - npm-bundled "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -"@npmcli/map-workspaces@^3.0.2", "@npmcli/map-workspaces@^3.0.4": - version "3.0.4" - resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz" - integrity sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg== - dependencies: - "@npmcli/name-from-folder" "^2.0.0" - glob "^10.2.2" - minimatch "^9.0.0" - read-package-json-fast "^3.0.0" - -"@npmcli/metavuln-calculator@^5.0.0": - version "5.0.1" - resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz" - integrity sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q== - dependencies: - cacache "^17.0.0" - json-parse-even-better-errors "^3.0.0" - pacote "^15.0.0" - semver "^7.3.5" - -"@npmcli/move-file@^2.0.0": - version "2.0.1" - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@npmcli/name-from-folder@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz" - integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== - -"@npmcli/node-gyp@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz" - integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== - -"@npmcli/package-json@^3.0.0", "@npmcli/package-json@^3.1.0": - version "3.1.0" - dependencies: - glob "^10.2.2" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^5.0.0" - npm-normalize-package-bin "^3.0.1" - -"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": - version "6.0.2" - resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz" - integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== - dependencies: - which "^3.0.0" - -"@npmcli/query@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@npmcli/query/-/query-3.0.0.tgz" - integrity sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA== - dependencies: - postcss-selector-parser "^6.0.10" - -"@npmcli/run-script@^6.0.0", "@npmcli/run-script@^6.0.2": - version "6.0.2" - resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz" - integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== - dependencies: - "@npmcli/node-gyp" "^3.0.0" - "@npmcli/promise-spawn" "^6.0.0" - node-gyp "^9.0.0" - read-package-json-fast "^3.0.0" - which "^3.0.0" - -"@octokit/auth-token@^3.0.0": - version "3.0.3" - dependencies: - "@octokit/types" "^9.0.0" - -"@octokit/core@^4.0.0", "@octokit/core@^4.2.1", "@octokit/core@>=3", "@octokit/core@>=4": - version "4.2.1" - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.5" - dependencies: - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^5.0.0": - version "5.0.6" - resolved "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz" - integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== - dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^17.2.0": - version "17.2.0" - -"@octokit/plugin-paginate-rest@^6.1.2": - version "6.1.2" - dependencies: - "@octokit/tsconfig" "^1.0.2" - "@octokit/types" "^9.2.3" - -"@octokit/plugin-retry@^4.1.3": - version "4.1.6" - dependencies: - "@octokit/types" "^9.0.0" - bottleneck "^2.15.3" - -"@octokit/plugin-throttling@^6.0.0": - version "6.0.0" - dependencies: - "@octokit/types" "^9.0.0" - bottleneck "^2.15.3" - -"@octokit/request-error@^3.0.0": - version "3.0.3" - resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz" - integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^6.0.0": - version "6.2.5" - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/tsconfig@^1.0.2": - version "1.0.2" - -"@octokit/types@^9.0.0", "@octokit/types@^9.2.3": - version "9.2.3" - dependencies: - "@octokit/openapi-types" "^17.2.0" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@pnpm/config.env-replace@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz" - integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== - -"@pnpm/network.ca-file@^1.0.1": - version "1.0.2" - resolved "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz" - integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== - dependencies: - graceful-fs "4.2.10" - -"@pnpm/npm-conf@^2.1.0": - version "2.2.0" - dependencies: - "@pnpm/config.env-replace" "^1.1.0" - "@pnpm/network.ca-file" "^1.0.1" - config-chain "^1.1.11" - -"@semantic-release/changelog@6.0.3": - version "6.0.3" - resolved "https://registry.npmjs.org/@semantic-release/changelog/-/changelog-6.0.3.tgz" - integrity sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - fs-extra "^11.0.0" - lodash "^4.17.4" - -"@semantic-release/commit-analyzer@^10.0.0": - version "10.0.0" - dependencies: - conventional-changelog-angular "^5.0.0" - conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.2.3" - debug "^4.0.0" - import-from "^4.0.0" - lodash-es "^4.17.21" - micromatch "^4.0.2" - -"@semantic-release/error@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz" - integrity sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw== - -"@semantic-release/git@10.0.1": - version "10.0.1" - resolved "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz" - integrity sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w== - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^3.0.0" - debug "^4.0.0" - dir-glob "^3.0.0" - execa "^5.0.0" - lodash "^4.17.4" - micromatch "^4.0.0" - p-reduce "^2.0.0" - -"@semantic-release/github@^9.0.0": - version "9.0.0" - dependencies: - "@octokit/core" "^4.2.1" - "@octokit/plugin-paginate-rest" "^6.1.2" - "@octokit/plugin-retry" "^4.1.3" - "@octokit/plugin-throttling" "^6.0.0" - "@semantic-release/error" "^3.0.0" - aggregate-error "^4.0.1" - debug "^4.3.4" - dir-glob "^3.0.1" - globby "^13.1.4" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.0" - issue-parser "^6.0.0" - lodash-es "^4.17.21" - mime "^3.0.0" - p-filter "^3.0.0" - url-join "^5.0.0" - -"@semantic-release/npm@^10.0.2": - version "10.0.3" - dependencies: - "@semantic-release/error" "^3.0.0" - aggregate-error "^4.0.1" - execa "^7.0.0" - fs-extra "^11.0.0" - lodash-es "^4.17.21" - nerf-dart "^1.0.0" - normalize-url "^8.0.0" - npm "^9.5.0" - rc "^1.2.8" - read-pkg "^8.0.0" - registry-auth-token "^5.0.0" - semver "^7.1.2" - tempy "^3.0.0" - -"@semantic-release/release-notes-generator@^11.0.0": - version "11.0.2" - dependencies: - conventional-changelog-angular "^5.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-filter "^2.0.0" - conventional-commits-parser "^3.2.3" - debug "^4.0.0" - get-stream "^7.0.0" - import-from "^4.0.0" - into-stream "^7.0.0" - lodash-es "^4.17.21" - read-pkg-up "^9.0.0" - -"@sigstore/protobuf-specs@^0.1.0": - version "0.1.0" - resolved "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz" - integrity sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ== - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@tufjs/canonical-json@1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz" - integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== - -"@tufjs/models@1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz" - integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== - dependencies: - "@tufjs/canonical-json" "1.0.0" - minimatch "^9.0.0" - -"@types/chai-subset@^1.3.3": - version "1.3.3" - resolved "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz" - integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== - dependencies: - "@types/chai" "*" - -"@types/chai@*", "@types/chai@^4.3.5": - version "4.3.5" - resolved "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz" - integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== - -"@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - -"@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - -"@types/node@*", "@types/node@^18.13.0", "@types/node@>= 14": - version "18.16.16" - -"@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.1": - version "2.4.1" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/prop-types@*": - version "15.7.5" - resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/react-dom@^18.0.9": - version "18.2.4" - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@^18.0.26": - version "18.2.8" - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.3" - resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz" - integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== - -"@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== - -"@typescript-eslint/eslint-plugin@^5.46.0": - version "5.59.8" - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.59.8" - "@typescript-eslint/type-utils" "5.59.8" - "@typescript-eslint/utils" "5.59.8" - debug "^4.3.4" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.46.0": - version "5.59.8" - dependencies: - "@typescript-eslint/scope-manager" "5.59.8" - "@typescript-eslint/types" "5.59.8" - "@typescript-eslint/typescript-estree" "5.59.8" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.59.8": - version "5.59.8" - dependencies: - "@typescript-eslint/types" "5.59.8" - "@typescript-eslint/visitor-keys" "5.59.8" - -"@typescript-eslint/type-utils@5.59.8": - version "5.59.8" - dependencies: - "@typescript-eslint/typescript-estree" "5.59.8" - "@typescript-eslint/utils" "5.59.8" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.59.8": - version "5.59.8" - -"@typescript-eslint/typescript-estree@5.59.8": - version "5.59.8" - dependencies: - "@typescript-eslint/types" "5.59.8" - "@typescript-eslint/visitor-keys" "5.59.8" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.59.8": - version "5.59.8" - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.59.8" - "@typescript-eslint/types" "5.59.8" - "@typescript-eslint/typescript-estree" "5.59.8" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.59.8": - version "5.59.8" - dependencies: - "@typescript-eslint/types" "5.59.8" - eslint-visitor-keys "^3.3.0" - -"@vitejs/plugin-react@^4.0.0": - version "4.0.0" - dependencies: - "@babel/core" "^7.21.4" - "@babel/plugin-transform-react-jsx-self" "^7.21.0" - "@babel/plugin-transform-react-jsx-source" "^7.19.6" - react-refresh "^0.14.0" - -"@vitest/coverage-c8@^0.31.0": - version "0.31.4" - resolved "https://registry.npmjs.org/@vitest/coverage-c8/-/coverage-c8-0.31.4.tgz" - integrity sha512-VPx368m4DTcpA/P0v3YdVxl4QOSh1DbUcXURLRvDShrIB5KxOgfzw4Bn2R8AhAe/GyiWW/FIsJ/OJdYXCCiC1w== - dependencies: - "@ampproject/remapping" "^2.2.1" - c8 "^7.13.0" - magic-string "^0.30.0" - picocolors "^1.0.0" - std-env "^3.3.2" - -"@vitest/expect@0.31.4": - version "0.31.4" - resolved "https://registry.npmjs.org/@vitest/expect/-/expect-0.31.4.tgz" - integrity sha512-tibyx8o7GUyGHZGyPgzwiaPaLDQ9MMuCOrc03BYT0nryUuhLbL7NV2r/q98iv5STlwMgaKuFJkgBW/8iPKwlSg== - dependencies: - "@vitest/spy" "0.31.4" - "@vitest/utils" "0.31.4" - chai "^4.3.7" - -"@vitest/runner@0.31.4": - version "0.31.4" - resolved "https://registry.npmjs.org/@vitest/runner/-/runner-0.31.4.tgz" - integrity sha512-Wgm6UER+gwq6zkyrm5/wbpXGF+g+UBB78asJlFkIOwyse0pz8lZoiC6SW5i4gPnls/zUcPLWS7Zog0LVepXnpg== - dependencies: - "@vitest/utils" "0.31.4" - concordance "^5.0.4" - p-limit "^4.0.0" - pathe "^1.1.0" - -"@vitest/snapshot@0.31.4": - version "0.31.4" - resolved "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.31.4.tgz" - integrity sha512-LemvNumL3NdWSmfVAMpXILGyaXPkZbG5tyl6+RQSdcHnTj6hvA49UAI8jzez9oQyE/FWLKRSNqTGzsHuk89LRA== - dependencies: - magic-string "^0.30.0" - pathe "^1.1.0" - pretty-format "^27.5.1" - -"@vitest/spy@0.31.4": - version "0.31.4" - resolved "https://registry.npmjs.org/@vitest/spy/-/spy-0.31.4.tgz" - integrity sha512-3ei5ZH1s3aqbEyftPAzSuunGICRuhE+IXOmpURFdkm5ybUADk+viyQfejNk6q8M5QGX8/EVKw+QWMEP3DTJDag== - dependencies: - tinyspy "^2.1.0" - -"@vitest/utils@0.31.4": - version "0.31.4" - resolved "https://registry.npmjs.org/@vitest/utils/-/utils-0.31.4.tgz" - integrity sha512-DobZbHacWznoGUfYU8XDPY78UubJxXfMNY1+SUdOp1NsI34eopSA6aZMeaGu10waSOeYwE8lxrd/pLfT0RMxjQ== - dependencies: - concordance "^5.0.4" - loupe "^2.3.6" - pretty-format "^27.5.1" - -abbrev@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.1.1, acorn-walk@^8.2.0: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.4.1, acorn@^8.8.0, acorn@^8.8.2: - version "8.8.2" - -agent-base@^6.0.2, agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agent-base@^7.0.2, agent-base@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz" - integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== - dependencies: - debug "^4.3.4" - -agentkeepalive@^4.2.1: - version "4.3.0" - resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz" - integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== - dependencies: - debug "^4.1.0" - depd "^2.0.0" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -aggregate-error@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz" - integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== - dependencies: - clean-stack "^4.0.0" - indent-string "^5.0.0" - -aggregate-error@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz" - integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== - dependencies: - clean-stack "^4.0.0" - indent-string "^5.0.0" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - 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" - -ajv@^8.0.1: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@^8.11.0: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -algo-msgpack-with-bigint@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz" - integrity sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ== - -algosdk@^2.2.0, algosdk@^2.3.0, algosdk@2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/algosdk/-/algosdk-2.3.0.tgz" - integrity sha512-voxoY2eue2CkzwkTh6UNN5JUeVOBL9qoNX3N/+OYwS2/Xd17ACSs6tLV/6dZumEgPa40ZL8TkO4zQF/ysDpy8w== - dependencies: - algo-msgpack-with-bigint "^2.1.1" - buffer "^6.0.3" - cross-fetch "^3.1.5" - hi-base32 "^0.5.1" - js-sha256 "^0.9.0" - js-sha3 "^0.8.0" - js-sha512 "^0.8.0" - json-bigint "^1.0.0" - tweetnacl "^1.0.3" - vlq "^2.0.4" - -"algosdk2-2@npm:algosdk@2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/algosdk/-/algosdk-2.2.0.tgz" - integrity sha512-FG3u/60DzjMK9Cffy9itst7WcfsTgZKfsD1r8pT33PfsA7r8NoXiUSL7cf0fNWFus6S3E14BpE2CY64VJ8KV1A== - dependencies: - algo-msgpack-with-bigint "^2.1.1" - buffer "^6.0.3" - cross-fetch "^3.1.5" - hi-base32 "^0.5.1" - js-sha256 "^0.9.0" - js-sha3 "^0.8.0" - js-sha512 "^0.8.0" - json-bigint "^1.0.0" - tweetnacl "^1.0.3" - vlq "^2.0.4" - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-escapes@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz" - integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== - dependencies: - type-fest "^3.0.0" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - 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" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0: - 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" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -ansicolors@~0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz" - integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== - -"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -archy@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -are-we-there-yet@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz" - integrity sha512-nSXlV+u3vtVjRgihdTzbfWYzxPWGo424zPgQbHD0ZqIla3jqYAewDcvee0Ua2hjS5IfTAmjGlx1Jf0PKwjZDEw== - dependencies: - delegates "^1.0.0" - readable-stream "^4.1.0" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -argv-formatter@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz" - integrity sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw== - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" - integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -balanced-match@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz" - integrity sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -beaker-ts@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/beaker-ts/-/beaker-ts-0.1.2.tgz" - integrity sha512-PWjLRdZTsVeClgqwa5HD61UnvRTlJx2mx5Y53Ln4821LN5oJ/nrbhhDEfqOysOmA2+bVQT/B43c8XGjtbMKuOQ== - dependencies: - commander "^9.4.0" - typescript "^4.7.4" - -before-after-hook@^2.2.0: - version "2.2.3" - resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz" - integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== - -bignumber.js@^9.0.0: - version "9.1.1" - resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz" - integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== - -bin-links@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/bin-links/-/bin-links-4.0.1.tgz" - integrity sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA== - dependencies: - cmd-shim "^6.0.0" - npm-normalize-package-bin "^3.0.0" - read-cmd-shim "^4.0.0" - write-file-atomic "^5.0.0" - -binary-extensions@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -blueimp-md5@^2.10.0: - version "2.19.0" - resolved "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz" - integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== - -bottleneck@^2.15.3: - version "2.19.5" - resolved "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz" - integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - 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" - -braces@^3.0.2: - 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" - -browserslist@^4.21.3, "browserslist@>= 4.21.0": - version "4.21.7" - dependencies: - caniuse-lite "^1.0.30001489" - electron-to-chromium "^1.4.411" - node-releases "^2.0.12" - update-browserslist-db "^1.0.11" - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -c8@^7.13.0: - version "7.14.0" - resolved "https://registry.npmjs.org/c8/-/c8-7.14.0.tgz" - integrity sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@istanbuljs/schema" "^0.1.3" - find-up "^5.0.0" - foreground-child "^2.0.0" - istanbul-lib-coverage "^3.2.0" - istanbul-lib-report "^3.0.0" - istanbul-reports "^3.1.4" - rimraf "^3.0.2" - test-exclude "^6.0.0" - v8-to-istanbul "^9.0.0" - yargs "^16.2.0" - yargs-parser "^20.2.9" - -cac@^6.7.14: - version "6.7.14" - resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - -cacache@^16.1.0: - version "16.1.3" - dependencies: - "@npmcli/fs" "^2.1.0" - "@npmcli/move-file" "^2.0.0" - chownr "^2.0.0" - fs-minipass "^2.1.0" - glob "^8.0.1" - infer-owner "^1.0.4" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - mkdirp "^1.0.4" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^9.0.0" - tar "^6.1.11" - unique-filename "^2.0.0" - -cacache@^17.0.0, cacache@^17.0.4, cacache@^17.1.2: - version "17.1.2" - dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^7.7.1" - minipass "^5.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - -cachedir@2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz" - integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30001489: - version "1.0.30001492" - -cardinal@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz" - integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== - dependencies: - ansicolors "~0.3.2" - redeyed "~2.1.0" - -chai@^4.3.7: - version "4.3.7" - resolved "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz" - integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^4.1.2" - get-func-name "^2.0.0" - loupe "^2.3.1" - pathval "^1.1.1" - type-detect "^4.0.5" - -chalk@^2.0.0: - 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" - -chalk@^2.3.2: - 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" - -chalk@^2.4.1: - 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" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^5.2.0: - version "5.2.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" - integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^3.6.1, ci-info@^3.7.1, ci-info@^3.8.0: - version "3.8.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -cidr-regex@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/cidr-regex/-/cidr-regex-3.1.1.tgz" - integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== - dependencies: - ip-regex "^4.1.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -clean-stack@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz" - integrity sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg== - dependencies: - escape-string-regexp "5.0.0" - -cli-columns@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/cli-columns/-/cli-columns-4.0.0.tgz" - integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== - dependencies: - string-width "^4.2.3" - strip-ansi "^6.0.1" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.9.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz" - integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== - -cli-table3@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -cmd-shim@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz" - integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== - -color-convert@^1.9.0: - 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" - -color-convert@^2.0.1: - 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" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -colord@^2.9.3: - version "2.9.3" - resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -columnify@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz" - integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== - dependencies: - strip-ansi "^6.0.1" - wcwidth "^1.0.0" - -commander@^9.4.0: - version "9.5.0" - resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -commitizen@^4.0.3, commitizen@4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/commitizen/-/commitizen-4.3.0.tgz" - integrity sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw== - dependencies: - cachedir "2.3.0" - cz-conventional-changelog "3.3.0" - dedent "0.7.0" - detect-indent "6.1.0" - find-node-modules "^2.1.2" - find-root "1.1.0" - fs-extra "9.1.0" - glob "7.2.3" - inquirer "8.2.5" - is-utf8 "^0.2.1" - lodash "4.17.21" - minimist "1.2.7" - strip-bom "4.0.0" - strip-json-comments "3.1.1" - -common-ancestor-path@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz" - integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== - -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concordance@^5.0.4: - version "5.0.4" - resolved "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz" - integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw== - dependencies: - date-time "^3.1.0" - esutils "^2.0.3" - fast-diff "^1.2.0" - js-string-escape "^1.0.1" - lodash "^4.17.15" - md5-hex "^3.0.1" - semver "^7.3.2" - well-known-symbols "^2.0.0" - -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -conventional-changelog-angular@^5.0.0: - version "5.0.13" - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-writer@^5.0.0: - version "5.0.1" - dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" - handlebars "^4.7.7" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" - -conventional-commit-types@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz" - integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== - -conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.7: - version "2.0.7" - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.2.3: - version "3.2.4" - dependencies: - is-text-path "^1.0.1" - JSONStream "^1.0.4" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -convert-source-map@^1.6.0, convert-source-map@^1.7.0: - 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== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig-typescript-loader@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz" - integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q== - -cosmiconfig@^7.1.0: - 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" - -cosmiconfig@^8.0.0, cosmiconfig@>=7: - version "8.1.3" - dependencies: - import-fresh "^3.2.1" - js-yaml "^4.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-fetch@^3.1.5: - version "3.1.6" - resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz" - integrity sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g== - dependencies: - node-fetch "^2.6.11" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - 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" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -crypto-random-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz" - integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== - dependencies: - type-fest "^1.0.1" - -css-functions-list@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz" - integrity sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -csstype@^3.0.2: - version "3.1.2" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - -cz-conventional-changelog@3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz" - integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw== - dependencies: - chalk "^2.4.1" - commitizen "^4.0.3" - conventional-commit-types "^3.0.0" - lodash.map "^4.5.1" - longest "^2.0.1" - word-wrap "^1.0.3" - optionalDependencies: - "@commitlint/load" ">6.1.1" - -date-time@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz" - integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== - dependencies: - time-zone "^1.0.0" - -dateformat@^3.0.0: - version "3.0.3" - -debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decamelize-keys@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz" - integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -dedent@0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -deep-eql@^4.1.2: - version "4.1.3" - resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - dependencies: - type-detect "^4.0.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - 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== - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -del@^6.0.0: - version "6.1.1" - resolved "https://registry.npmjs.org/del/-/del-6.1.1.tgz" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -depd@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -deprecation@^2.0.0: - version "2.3.1" - resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" - integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== - -detect-indent@6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diff@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== - -dir-glob@^3.0.0, dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dot-prop@^5.1.0: - version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -dotenv@^16.3.1: - version "16.3.1" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz" - integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== - -dts-bundle-generator@^8.0.0: - version "8.0.1" - resolved "https://registry.npmjs.org/dts-bundle-generator/-/dts-bundle-generator-8.0.1.tgz" - integrity sha512-9JVw78/OXdKfq+RUrmpLm6WAUJp+aOUGEHimVqIlOEH2VugRt1I8CVIoQZlirWZko+/SVZkNgpWCyZubUuzzPA== - dependencies: - typescript ">=5.0.2" - yargs "^17.6.0" - -duplexer2@~0.1.0: - version "0.1.4" - resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" - integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== - dependencies: - readable-stream "^2.0.2" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -electron-to-chromium@^1.4.411: - version "1.4.419" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encoding@^0.1.0: - version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -env-ci@^9.0.0: - version "9.1.0" - dependencies: - execa "^7.0.0" - java-properties "^1.0.2" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -error-ex@^1.3.1, error-ex@^1.3.2: - 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" - -esbuild@^0.17.5: - version "0.17.19" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz" - integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== - optionalDependencies: - "@esbuild/android-arm" "0.17.19" - "@esbuild/android-arm64" "0.17.19" - "@esbuild/android-x64" "0.17.19" - "@esbuild/darwin-arm64" "0.17.19" - "@esbuild/darwin-x64" "0.17.19" - "@esbuild/freebsd-arm64" "0.17.19" - "@esbuild/freebsd-x64" "0.17.19" - "@esbuild/linux-arm" "0.17.19" - "@esbuild/linux-arm64" "0.17.19" - "@esbuild/linux-ia32" "0.17.19" - "@esbuild/linux-loong64" "0.17.19" - "@esbuild/linux-mips64el" "0.17.19" - "@esbuild/linux-ppc64" "0.17.19" - "@esbuild/linux-riscv64" "0.17.19" - "@esbuild/linux-s390x" "0.17.19" - "@esbuild/linux-x64" "0.17.19" - "@esbuild/netbsd-x64" "0.17.19" - "@esbuild/openbsd-x64" "0.17.19" - "@esbuild/sunos-x64" "0.17.19" - "@esbuild/win32-arm64" "0.17.19" - "@esbuild/win32-ia32" "0.17.19" - "@esbuild/win32-x64" "0.17.19" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -escape-string-regexp@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -eslint-config-prettier@^8.5.0: - version "8.8.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz" - integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== - -eslint-plugin-prettier@^4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz" - integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== - -eslint@*, "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", eslint@^8.29.0, eslint@>=7.0.0, eslint@>=7.28.0: - version "8.42.0" - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.3" - "@eslint/js" "8.42.0" - "@humanwhocodes/config-array" "^0.11.10" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - 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.0" - eslint-visitor-keys "^3.4.1" - espree "^9.5.2" - 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" - import-fresh "^3.0.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.1" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.5.2: - version "9.5.2" - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2, esutils@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -execa@^7.0.0: - version "7.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-7.1.1.tgz" - integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^4.3.0" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" - integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== - dependencies: - homedir-polyfill "^1.0.1" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - 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== - -fast-diff@^1.1.2, fast-diff@^1.2.0: - version "1.3.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: - version "3.2.12" - 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" - -fast-json-stable-stringify@^2.0.0: - 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== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastest-levenshtein@^1.0.16: - version "1.0.16" - resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz" - integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== - dependencies: - escape-string-regexp "^1.0.5" - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -figures@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz" - integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== - dependencies: - escape-string-regexp "^5.0.0" - is-unicode-supported "^1.2.0" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - 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" - -find-node-modules@^2.1.2: - version "2.1.3" - resolved "https://registry.npmjs.org/find-node-modules/-/find-node-modules-2.1.3.tgz" - integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== - dependencies: - findup-sync "^4.0.0" - merge "^2.1.1" - -find-root@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -find-versions@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/find-versions/-/find-versions-5.1.0.tgz" - integrity sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg== - dependencies: - semver-regex "^4.0.5" - -findup-sync@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz" - integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^4.0.2" - resolve-dir "^1.0.1" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -foreground-child@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz" - integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^3.0.2" - -foreground-child@^3.1.0: - 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" - -from2@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" - integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.0.0: - version "11.1.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz" - integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-minipass@^2.1.0: - version "2.1.0" - dependencies: - minipass "^3.0.0" - -fs-minipass@^3.0.0, fs-minipass@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz" - integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g== - dependencies: - minipass "^5.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gauge@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/gauge/-/gauge-5.0.1.tgz" - integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^4.0.1" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gensync@^1.0.0-beta.2: - 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== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" - integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== - -get-stream@^6.0.0, get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-stream@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-7.0.0.tgz" - integrity sha512-ql6FW5b8tgMYvI4UaoxG3EQN3VyZ6VeQpxNBGg5BZ4xD4u+HJeprzhMMA4OCBEGQgSR+m87pstWMpiVW64W8Fw== - -git-log-parser@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz" - integrity sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA== - dependencies: - argv-formatter "~1.0.0" - spawn-error-forwarder "~1.0.0" - split2 "~1.0.0" - stream-combiner2 "~1.1.1" - through2 "~2.0.0" - traverse "~0.6.6" - -glob-parent@^5.1.2: - 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" - -glob-parent@^6.0.2: - 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" - -glob@^10.2.2, glob@^10.2.4: - version "10.2.4" - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.0.3" - minimatch "^9.0.0" - minipass "^5.0.0 || ^6.0.0" - path-scurry "^1.7.0" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -glob@^7.1.4: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -glob@^8.0.1: - version "8.1.0" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@7.2.3: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -global-dirs@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz" - integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== - dependencies: - ini "^1.3.4" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" - integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.19.0: - version "13.20.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.1, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^13.1.4: - version "13.1.4" - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz" - integrity sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg== - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graceful-fs@^4.2.11, graceful-fs@^4.2.6: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -has-flag@^3.0.0: - 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-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hi-base32@^0.5.1: - version "0.5.1" - resolved "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz" - integrity sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA== - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -hook-std@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hook-std/-/hook-std-3.0.0.tgz" - integrity sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -hosted-git-info@^6.0.0, hosted-git-info@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz" - integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== - dependencies: - lru-cache "^7.5.1" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-tags@^3.2.0: - version "3.3.1" - resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz" - integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== - -http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -http-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz" - integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz" - integrity sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw== - dependencies: - agent-base "^7.0.2" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -human-signals@^4.3.0: - version "4.3.1" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz" - integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-walk@^6.0.0: - version "6.0.3" - resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz" - integrity sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA== - dependencies: - minimatch "^9.0.0" - -ignore@^5.2.0, ignore@^5.2.1: - version "5.2.4" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - 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" - -import-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz" - integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== - -import-lazy@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indent-string@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz" - integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== - -infer-owner@^1.0.4: - version "1.0.4" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -ini@^4.1.0: - version "4.1.0" - -init-package-json@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-5.0.0.tgz" - integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== - dependencies: - npm-package-arg "^10.0.0" - promzard "^1.0.0" - read "^2.0.0" - read-package-json "^6.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - validate-npm-package-name "^5.0.0" - -inquirer@8.2.5: - version "8.2.5" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz" - integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^7.0.0" - -into-stream@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/into-stream/-/into-stream-7.0.0.tgz" - integrity sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw== - dependencies: - from2 "^2.3.0" - p-is-promise "^3.0.0" - -ip-regex@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz" - integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-cidr@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/is-cidr/-/is-cidr-4.0.2.tgz" - integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== - dependencies: - cidr-regex "^3.1.1" - -is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1: - version "2.12.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== - dependencies: - has "^1.0.3" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - 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-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - 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" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2, is-path-inside@^3.0.3: - 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== - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" - integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== - dependencies: - text-extensions "^1.0.0" - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-unicode-supported@^1.2.0: - version "1.3.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz" - integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== - -is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - -is-windows@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -issue-parser@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz" - integrity sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA== - dependencies: - lodash.capitalize "^4.2.1" - lodash.escaperegexp "^4.1.2" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.uniqby "^4.7.0" - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-reports@^3.1.4: - version "3.1.5" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jackspeak@^2.0.3: - version "2.2.0" - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -java-properties@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz" - integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== - -js-sha256@^0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz" - integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== - -js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -js-sha512@^0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz" - integrity sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ== - -js-string-escape@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz" - integrity sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz" - integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== - dependencies: - bignumber.js "^9.0.0" - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-parse-even-better-errors@^2.3.0: - 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-parse-even-better-errors@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz" - integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== - -json-schema-traverse@^0.4.1: - 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== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - 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== - -json-stringify-nice@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz" - integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== - -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^2.2.2: - version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonc-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" - integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -jsonparse@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -JSONStream@^1.0.4: - version "1.3.5" - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -just-diff-apply@^5.2.0: - version "5.5.0" - resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz" - integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== - -just-diff@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz" - integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== - -kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -known-css-properties@^0.26.0: - version "0.26.0" - resolved "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz" - integrity sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -libnpmaccess@^7.0.2: - version "7.0.2" - resolved "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-7.0.2.tgz" - integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw== - dependencies: - npm-package-arg "^10.1.0" - npm-registry-fetch "^14.0.3" - -libnpmdiff@^5.0.17: - version "5.0.17" - dependencies: - "@npmcli/arborist" "^6.2.9" - "@npmcli/disparity-colors" "^3.0.0" - "@npmcli/installed-package-contents" "^2.0.2" - binary-extensions "^2.2.0" - diff "^5.1.0" - minimatch "^9.0.0" - npm-package-arg "^10.1.0" - pacote "^15.0.8" - tar "^6.1.13" - -libnpmexec@^5.0.17: - version "5.0.17" - dependencies: - "@npmcli/arborist" "^6.2.9" - "@npmcli/run-script" "^6.0.0" - chalk "^4.1.0" - ci-info "^3.7.1" - npm-package-arg "^10.1.0" - npmlog "^7.0.1" - pacote "^15.0.8" - proc-log "^3.0.0" - read "^2.0.0" - read-package-json-fast "^3.0.2" - semver "^7.3.7" - walk-up-path "^3.0.1" - -libnpmfund@^4.0.17: - version "4.0.17" - dependencies: - "@npmcli/arborist" "^6.2.9" - -libnpmhook@^9.0.3: - version "9.0.3" - resolved "https://registry.npmjs.org/libnpmhook/-/libnpmhook-9.0.3.tgz" - integrity sha512-wMZe58sI7KLhg0+nUWZW5KdMfjNNcOIIbkoP19BDHYoUF9El7eeUWkGNxUGzpHkPKiGoQ1z/v6CYin4deebeuw== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^14.0.3" - -libnpmorg@^5.0.4: - version "5.0.4" - resolved "https://registry.npmjs.org/libnpmorg/-/libnpmorg-5.0.4.tgz" - integrity sha512-YqYXLMAN0Y1eJH4w3hUFN9648xfSdvJANMsdeZTOWJOW4Pqp8qapJFzQdqCfUkg+tEuQmnaFQQKXvkMZC51+Mw== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^14.0.3" - -libnpmpack@^5.0.17: - version "5.0.17" - dependencies: - "@npmcli/arborist" "^6.2.9" - "@npmcli/run-script" "^6.0.0" - npm-package-arg "^10.1.0" - pacote "^15.0.8" - -libnpmpublish@^7.2.0: - version "7.2.0" - dependencies: - ci-info "^3.6.1" - normalize-package-data "^5.0.0" - npm-package-arg "^10.1.0" - npm-registry-fetch "^14.0.3" - proc-log "^3.0.0" - semver "^7.3.7" - sigstore "^1.4.0" - ssri "^10.0.1" - -libnpmsearch@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-6.0.2.tgz" - integrity sha512-p+5BF19AvnVg8mcIQhy6yWhI6jHQRVMYaIaKeITEfYAffWsqbottA/WZdMtHL76hViC6SFM1WdclM1w5eAIa1g== - dependencies: - npm-registry-fetch "^14.0.3" - -libnpmteam@^5.0.3: - version "5.0.3" - resolved "https://registry.npmjs.org/libnpmteam/-/libnpmteam-5.0.3.tgz" - integrity sha512-7XOGhi45s+ml6TyrhJUTyrErcoDMKGKfEtiTEco4ofU7BGGAUOalVztKMVLLJgJOOXdIAIlzCHqkTXEuSiyCiA== - dependencies: - aproba "^2.0.0" - npm-registry-fetch "^14.0.3" - -libnpmversion@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/libnpmversion/-/libnpmversion-4.0.2.tgz" - integrity sha512-n1X70mFHv8Piy4yos+MFWUARSkTbyV5cdsHScaIkuwYvRAF/s2VtYScDzWB4Oe8uNEuGNdjiRR1E/Dh1tMvv6g== - dependencies: - "@npmcli/git" "^4.0.1" - "@npmcli/run-script" "^6.0.0" - json-parse-even-better-errors "^3.0.0" - proc-log "^3.0.0" - semver "^7.3.7" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lines-and-columns@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz" - integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -local-pkg@^0.4.3: - version "0.4.3" - resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz" - integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -locate-path@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - -lodash-es@^4.17.21: - 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.capitalize@^4.2.1: - version "4.2.1" - resolved "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz" - integrity sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw== - -lodash.escaperegexp@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz" - integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== - -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" - integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" - integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== - -lodash.map@^4.5.1: - version "4.6.0" - resolved "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz" - integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.mergewith@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz" - integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash.uniqby@^4.7.0: - version "4.7.0" - resolved "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz" - integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== - -lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4, lodash@4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -longest@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/longest/-/longest-2.0.1.tgz" - integrity sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q== - -loupe@^2.3.1, loupe@^2.3.6: - version "2.3.6" - resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz" - integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== - dependencies: - get-func-name "^2.0.0" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: - version "7.18.3" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== - -lru-cache@^9.1.1: - version "9.1.1" - -magic-string@^0.30.0: - version "0.30.0" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz" - integrity sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" - -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^10.0.3: - version "10.2.1" - dependencies: - agentkeepalive "^4.2.1" - cacache "^16.1.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^3.1.6" - minipass-collect "^1.0.2" - minipass-fetch "^2.0.3" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^9.0.0" - -make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.0, make-fetch-happen@^11.1.1: - version "11.1.1" - resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz" - integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^17.0.0" - http-cache-semantics "^4.1.1" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^5.0.0" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^10.0.0" - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" - integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - -marked-terminal@^5.1.1: - version "5.2.0" - resolved "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz" - integrity sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA== - dependencies: - ansi-escapes "^6.2.0" - cardinal "^2.1.1" - chalk "^5.2.0" - cli-table3 "^0.6.3" - node-emoji "^1.11.0" - supports-hyperlinks "^2.3.0" - -"marked@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", marked@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== - -mathml-tag-names@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz" - integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== - -md5-hex@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz" - integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== - dependencies: - blueimp-md5 "^2.10.0" - -meow@^8.0.0: - version "8.1.2" - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -meow@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz" - integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize "^1.2.0" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz" - integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - 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" - -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.5: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.0: - version "9.0.0" - dependencies: - brace-expansion "^2.0.1" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minimist@1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^2.0.3: - version "2.1.2" - dependencies: - minipass "^3.1.6" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-fetch@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz" - integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ== - dependencies: - minipass "^5.0.0" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-json-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" - integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== - dependencies: - jsonparse "^1.3.1" - minipass "^3.0.0" - -minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.1, minipass@^3.1.6: - version "3.3.6" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0, "minipass@^5.0.0 || ^6.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mlly@^1.2.0: - version "1.3.0" - dependencies: - acorn "^8.8.2" - pathe "^1.1.0" - pkg-types "^1.0.3" - ufo "^1.1.2" - -modify-values@^1.0.0: - version "1.0.1" - -ms@^2.0.0, ms@^2.1.2: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.0: - version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nerf-dart@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz" - integrity sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g== - -node-emoji@^1.11.0: - version "1.11.0" - resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz" - integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== - dependencies: - lodash "^4.17.21" - -node-fetch@^2.6.11, node-fetch@^2.6.7: - version "2.6.11" - dependencies: - whatwg-url "^5.0.0" - -node-gyp@^9.0.0, node-gyp@^9.3.1: - version "9.3.1" - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^10.0.3" - nopt "^6.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-releases@^2.0.12: - version "2.0.12" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz" - integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== - -nopt@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" - integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== - dependencies: - abbrev "^1.0.0" - -nopt@^7.0.0, nopt@^7.1.0: - version "7.1.0" - dependencies: - abbrev "^2.0.0" - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz" - integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== - dependencies: - hosted-git-info "^6.0.0" - is-core-module "^2.8.1" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -normalize-url@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz" - integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== - -npm-audit-report@^4.0.0: - version "4.0.0" - dependencies: - chalk "^4.0.0" - -npm-bundled@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz" - integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== - dependencies: - npm-normalize-package-bin "^3.0.0" - -npm-install-checks@^6.0.0, npm-install-checks@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz" - integrity sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^3.0.0, npm-normalize-package-bin@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz" - integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== - -npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz" - integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== - dependencies: - hosted-git-info "^6.0.0" - proc-log "^3.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - -npm-packlist@^7.0.0: - version "7.0.4" - resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz" - integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== - dependencies: - ignore-walk "^6.0.0" - -npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz" - integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== - dependencies: - npm-install-checks "^6.0.0" - npm-normalize-package-bin "^3.0.0" - npm-package-arg "^10.0.0" - semver "^7.3.5" - -npm-profile@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/npm-profile/-/npm-profile-7.0.1.tgz" - integrity sha512-VReArOY/fCx5dWL66cbJ2OMogTQAVVQA//8jjmjkarboki3V7UJ0XbGFW+khRwiAJFQjuH0Bqr/yF7Y5RZdkMQ== - dependencies: - npm-registry-fetch "^14.0.0" - proc-log "^3.0.0" - -npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: - version "14.0.5" - resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz" - integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== - dependencies: - make-fetch-happen "^11.0.0" - minipass "^5.0.0" - minipass-fetch "^3.0.0" - minipass-json-stream "^1.0.1" - minizlib "^2.1.2" - npm-package-arg "^10.0.0" - proc-log "^3.0.0" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - -npm-user-validate@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-2.0.0.tgz" - integrity sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q== - -npm@^9.5.0: - version "9.6.7" - dependencies: - "@isaacs/string-locale-compare" "^1.1.0" - "@npmcli/arborist" "^6.2.9" - "@npmcli/config" "^6.1.7" - "@npmcli/map-workspaces" "^3.0.4" - "@npmcli/package-json" "^3.1.0" - "@npmcli/run-script" "^6.0.2" - abbrev "^2.0.0" - archy "~1.0.0" - cacache "^17.1.2" - chalk "^4.1.2" - ci-info "^3.8.0" - cli-columns "^4.0.0" - cli-table3 "^0.6.3" - columnify "^1.6.0" - fastest-levenshtein "^1.0.16" - fs-minipass "^3.0.2" - glob "^10.2.4" - graceful-fs "^4.2.11" - hosted-git-info "^6.1.1" - ini "^4.1.0" - init-package-json "^5.0.0" - is-cidr "^4.0.2" - json-parse-even-better-errors "^3.0.0" - libnpmaccess "^7.0.2" - libnpmdiff "^5.0.17" - libnpmexec "^5.0.17" - libnpmfund "^4.0.17" - libnpmhook "^9.0.3" - libnpmorg "^5.0.4" - libnpmpack "^5.0.17" - libnpmpublish "^7.2.0" - libnpmsearch "^6.0.2" - libnpmteam "^5.0.3" - libnpmversion "^4.0.2" - make-fetch-happen "^11.1.1" - minimatch "^9.0.0" - minipass "^5.0.0" - minipass-pipeline "^1.2.4" - ms "^2.1.2" - node-gyp "^9.3.1" - nopt "^7.1.0" - npm-audit-report "^4.0.0" - npm-install-checks "^6.1.1" - npm-package-arg "^10.1.0" - npm-pick-manifest "^8.0.1" - npm-profile "^7.0.1" - npm-registry-fetch "^14.0.5" - npm-user-validate "^2.0.0" - npmlog "^7.0.1" - p-map "^4.0.0" - pacote "^15.1.3" - parse-conflict-json "^3.0.1" - proc-log "^3.0.0" - qrcode-terminal "^0.12.0" - read "^2.1.0" - read-package-json "^6.0.3" - read-package-json-fast "^3.0.2" - semver "^7.5.1" - ssri "^10.0.4" - tar "^6.1.14" - text-table "~0.2.0" - tiny-relative-date "^1.3.0" - treeverse "^3.0.0" - validate-npm-package-name "^5.0.0" - which "^3.0.1" - write-file-atomic "^5.0.1" - -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -npmlog@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz" - integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== - dependencies: - are-we-there-yet "^4.0.0" - console-control-strings "^1.1.0" - gauge "^5.0.0" - set-blocking "^2.0.0" - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - -optionator@^0.9.1: - version "0.9.1" - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^5.4.1: - version "5.4.1" - resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-each-series@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz" - integrity sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw== - -p-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz" - integrity sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg== - dependencies: - p-map "^5.1.0" - -p-is-promise@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz" - integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - 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== - dependencies: - p-limit "^3.0.2" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^5.1.0: - version "5.5.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz" - integrity sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg== - dependencies: - aggregate-error "^4.0.0" - -p-reduce@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" - integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== - -p-reduce@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-3.0.0.tgz" - integrity sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q== - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pacote@^15.0.0, pacote@^15.0.8, pacote@^15.1.3: - version "15.1.3" - dependencies: - "@npmcli/git" "^4.0.0" - "@npmcli/installed-package-contents" "^2.0.1" - "@npmcli/promise-spawn" "^6.0.1" - "@npmcli/run-script" "^6.0.0" - cacache "^17.0.0" - fs-minipass "^3.0.0" - minipass "^5.0.0" - npm-package-arg "^10.0.0" - npm-packlist "^7.0.0" - npm-pick-manifest "^8.0.0" - npm-registry-fetch "^14.0.0" - proc-log "^3.0.0" - promise-retry "^2.0.1" - read-package-json "^6.0.0" - read-package-json-fast "^3.0.0" - sigstore "^1.3.0" - ssri "^10.0.0" - tar "^6.1.11" - -parent-module@^1.0.0: - 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" - -parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz" - integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== - dependencies: - json-parse-even-better-errors "^3.0.0" - just-diff "^6.0.0" - just-diff-apply "^5.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" - integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0, parse-json@^5.2.0: - 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" - -parse-json@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-7.0.0.tgz" - integrity sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw== - dependencies: - "@babel/code-frame" "^7.21.4" - error-ex "^1.3.2" - json-parse-even-better-errors "^3.0.0" - lines-and-columns "^2.0.3" - type-fest "^3.8.0" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" - integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - -path-parse@^1.0.7: - 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@^1.7.0: - version "1.9.1" - dependencies: - lru-cache "^9.1.1" - minipass "^5.0.0 || ^6.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathe@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz" - integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - -pkg-conf@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz" - integrity sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g== - dependencies: - find-up "^2.0.0" - load-json-file "^4.0.0" - -pkg-types@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz" - integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== - dependencies: - jsonc-parser "^3.2.0" - mlly "^1.2.0" - pathe "^1.1.0" - -postcss-media-query-parser@^0.2.3: - version "0.2.3" - resolved "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz" - integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== - -postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz" - integrity sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw== - -postcss-safe-parser@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz" - integrity sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ== - -postcss-scss@^4.0.2: - version "4.0.6" - resolved "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz" - integrity sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ== - -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11: - version "6.0.13" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-sorting@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz" - integrity sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g== - -postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.3.11, postcss@^8.3.3, postcss@^8.3.9, postcss@^8.4.19, postcss@^8.4.23: - version "8.4.24" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz" - integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^2.8.1, prettier@>=2.0.0: - version "2.8.8" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -proc-log@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz" - integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== - -process-nextick-args@~2.0.0: - 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== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -promise-all-reject-late@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz" - integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== - -promise-call-limit@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz" - integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -promzard@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/promzard/-/promzard-1.0.0.tgz" - integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== - dependencies: - read "^2.0.0" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -q@^1.5.1: - version "1.5.1" - -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz" - integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -rc@^1.2.8, rc@1.2.8: - version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -react-refresh@^0.14.0: - version "0.14.0" - resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz" - integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== - -read-cmd-shim@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz" - integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== - -read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz" - integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== - dependencies: - json-parse-even-better-errors "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -read-package-json@^6.0.0, read-package-json@^6.0.3: - version "6.0.3" - dependencies: - glob "^10.2.2" - json-parse-even-better-errors "^3.0.0" - normalize-package-data "^5.0.0" - npm-normalize-package-bin "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg-up@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz" - integrity sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg== - dependencies: - find-up "^6.3.0" - read-pkg "^7.1.0" - type-fest "^2.5.0" - -read-pkg-up@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz" - integrity sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg== - dependencies: - find-up "^6.3.0" - read-pkg "^7.1.0" - type-fest "^2.5.0" - -read-pkg@^5.0.0, read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -read-pkg@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz" - integrity sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg== - dependencies: - "@types/normalize-package-data" "^2.4.1" - normalize-package-data "^3.0.2" - parse-json "^5.2.0" - type-fest "^2.0.0" - -read-pkg@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-8.0.0.tgz" - integrity sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw== - dependencies: - "@types/normalize-package-data" "^2.4.1" - normalize-package-data "^5.0.0" - parse-json "^7.0.0" - type-fest "^3.8.0" - -read@^2.0.0, read@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/read/-/read-2.1.0.tgz" - integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== - dependencies: - mute-stream "~1.0.0" - -readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@~2.3.6: - 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" - -readable-stream@^3.0.0, readable-stream@3: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.1.0: - version "4.4.0" - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -redeyed@~2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz" - integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== - dependencies: - esprima "~4.0.0" - -registry-auth-token@^4.0.0: - version "4.2.2" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz" - integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== - dependencies: - rc "1.2.8" - -registry-auth-token@^5.0.0: - version "5.0.2" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz" - integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== - dependencies: - "@pnpm/npm-conf" "^2.1.0" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" - integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-global@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz" - integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== - dependencies: - global-dirs "^0.1.1" - -resolve@^1.10.0: - version "1.22.2" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== - dependencies: - is-core-module "^2.11.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup@^3.21.0: - version "3.23.0" - optionalDependencies: - fsevents "~2.3.2" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.5: - version "7.8.1" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -semantic-release@>=18.0.0, semantic-release@>=19.0.0, semantic-release@>=20.1.0, semantic-release@21.0.3: - version "21.0.3" - resolved "https://registry.npmjs.org/semantic-release/-/semantic-release-21.0.3.tgz" - integrity sha512-DS/0P1DrL8cKpkhN7JCzhkbOge9sURSRqUlmEAjeXTzK0lOSWhp+oJJcji0bLFEIyu3DuYEeQrWCdJNwRHrFdw== - dependencies: - "@semantic-release/commit-analyzer" "^10.0.0" - "@semantic-release/error" "^3.0.0" - "@semantic-release/github" "^9.0.0" - "@semantic-release/npm" "^10.0.2" - "@semantic-release/release-notes-generator" "^11.0.0" - aggregate-error "^4.0.1" - cosmiconfig "^8.0.0" - debug "^4.0.0" - env-ci "^9.0.0" - execa "^7.0.0" - figures "^5.0.0" - find-versions "^5.1.0" - get-stream "^6.0.0" - git-log-parser "^1.2.0" - hook-std "^3.0.0" - hosted-git-info "^6.0.0" - lodash-es "^4.17.21" - marked "^4.1.0" - marked-terminal "^5.1.1" - micromatch "^4.0.2" - p-each-series "^3.0.0" - p-reduce "^3.0.0" - read-pkg-up "^9.1.0" - resolve-from "^5.0.0" - semver "^7.3.2" - semver-diff "^4.0.0" - signale "^1.2.1" - yargs "^17.5.1" - -semver-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz" - integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== - dependencies: - semver "^7.3.5" - -semver-regex@^4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/semver-regex/-/semver-regex-4.0.5.tgz" - integrity sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw== - -semver@^6.0.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.1: - version "7.5.1" - dependencies: - lru-cache "^6.0.0" - -"semver@2 || 3 || 4 || 5": - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -shebang-command@^2.0.0: - 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" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -siginfo@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz" - integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== - -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz" - integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== - -signale@^1.2.1: - version "1.4.0" - resolved "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz" - integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== - dependencies: - chalk "^2.3.2" - figures "^2.0.0" - pkg-conf "^2.1.0" - -sigstore@^1.3.0, sigstore@^1.4.0: - version "1.5.2" - dependencies: - "@sigstore/protobuf-specs" "^0.1.0" - make-fetch-happen "^11.0.1" - tuf-js "^1.1.3" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.1" - resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spawn-error-forwarder@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz" - integrity sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.13" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz" - integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== - -split@^1.0.0: - version "1.0.1" - dependencies: - through "2" - -split2@^3.0.0: - version "3.2.2" - dependencies: - readable-stream "^3.0.0" - -split2@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz" - integrity sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg== - dependencies: - through2 "~2.0.0" - -ssri@^10.0.0, ssri@^10.0.1, ssri@^10.0.4: - version "10.0.4" - resolved "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz" - integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ== - dependencies: - minipass "^5.0.0" - -ssri@^9.0.0: - version "9.0.1" - dependencies: - minipass "^3.1.1" - -stackback@0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz" - integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== - -std-env@^3.3.2: - version "3.3.3" - resolved "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz" - integrity sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg== - -stream-combiner2@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz" - integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw== - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - 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" - -"string-width-cjs@npm:string-width@^4.2.0": - 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" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - 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" - -string-width@^5.0.1: - 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" - -string-width@^5.1.2: - 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" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - 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" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - 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" - -strip-ansi@^7.0.1: - version "7.0.1" - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-bom@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1, strip-json-comments@3.1.1: - 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== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strip-literal@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.1.tgz" - integrity sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q== - dependencies: - acorn "^8.8.2" - -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz" - integrity sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg== - -stylelint-config-recommended@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz" - integrity sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ== - -stylelint-config-sass-guidelines@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-9.0.1.tgz" - integrity sha512-N06PsVsrgKijQ3YT5hqKA7x3NUkgELTRI1cbWMqcYiCGG6MjzvNk6Cb5YYA1PrvrksBV76BvY9P9bAswojVMqA== - dependencies: - postcss-scss "^4.0.2" - stylelint-order "^5.0.0" - stylelint-scss "^4.0.0" - -stylelint-order@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz" - integrity sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw== - dependencies: - postcss "^8.3.11" - postcss-sorting "^7.0.1" - -stylelint-scss@^4.0.0: - version "4.7.0" - resolved "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz" - integrity sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg== - dependencies: - postcss-media-query-parser "^0.2.3" - postcss-resolve-nested-selector "^0.1.1" - postcss-selector-parser "^6.0.11" - postcss-value-parser "^4.2.0" - -stylelint@^14.0.0, stylelint@^14.0.1, stylelint@^14.10.0, stylelint@^14.16.0, "stylelint@^14.5.1 || ^15.0.0": - version "14.16.1" - resolved "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz" - integrity sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A== - dependencies: - "@csstools/selector-specificity" "^2.0.2" - balanced-match "^2.0.0" - colord "^2.9.3" - cosmiconfig "^7.1.0" - css-functions-list "^3.1.0" - debug "^4.3.4" - fast-glob "^3.2.12" - fastest-levenshtein "^1.0.16" - file-entry-cache "^6.0.1" - global-modules "^2.0.0" - globby "^11.1.0" - globjoin "^0.1.4" - html-tags "^3.2.0" - ignore "^5.2.1" - import-lazy "^4.0.0" - imurmurhash "^0.1.4" - is-plain-object "^5.0.0" - known-css-properties "^0.26.0" - mathml-tag-names "^2.1.3" - meow "^9.0.0" - micromatch "^4.0.5" - normalize-path "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.19" - postcss-media-query-parser "^0.2.3" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^6.0.0" - postcss-selector-parser "^6.0.11" - postcss-value-parser "^4.2.0" - resolve-from "^5.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - style-search "^0.1.0" - supports-hyperlinks "^2.3.0" - svg-tags "^1.0.0" - table "^6.8.1" - v8-compile-cache "^2.3.0" - write-file-atomic "^4.0.2" - -supports-color@^5.3.0: - 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" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz" - integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - 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== - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz" - integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== - -table@^6.8.1: - version "6.8.1" - resolved "https://registry.npmjs.org/table/-/table-6.8.1.tgz" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tar@^6.1.11, tar@^6.1.13, tar@^6.1.14, tar@^6.1.2: - version "6.1.14" - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -tempy@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz" - integrity sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w== - dependencies: - del "^6.0.0" - is-stream "^2.0.0" - temp-dir "^2.0.0" - type-fest "^0.16.0" - unique-string "^2.0.0" - -tempy@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/tempy/-/tempy-3.0.0.tgz" - integrity sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA== - dependencies: - is-stream "^3.0.0" - temp-dir "^2.0.0" - type-fest "^2.12.2" - unique-string "^3.0.0" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -through@^2.3.6, "through@>=2.2.7 <3", through@2: - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -through2@^4.0.0: - version "4.0.2" - dependencies: - readable-stream "3" - -through2@~2.0.0: - version "2.0.5" - resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -time-zone@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz" - integrity sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA== - -tiny-relative-date@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz" - integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== - -tinybench@^2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz" - integrity sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA== - -tinypool@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/tinypool/-/tinypool-0.5.0.tgz" - integrity sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ== - -tinyspy@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz" - integrity sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-fast-properties@^2.0.0: - 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@^5.0.1: - 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" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -traverse@~0.6.6: - version "0.6.7" - resolved "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz" - integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== - -treeverse@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz" - integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== - -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - -ts-node@^10.8.1, ts-node@^10.9.1, ts-node@>=10: - version "10.9.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0, tslib@^2.4.1: - version "2.5.3" - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tuf-js@^1.1.3: - version "1.1.6" - dependencies: - "@tufjs/models" "1.0.4" - debug "^4.3.4" - make-fetch-happen "^11.1.0" - -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.16.0: - version "0.16.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz" - integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -type-fest@^0.20.2: - 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== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-fest@^1.0.1: - version "1.4.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -type-fest@^2.0.0, type-fest@^2.12.2, type-fest@^2.5.0: - version "2.19.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - -type-fest@^3.0.0: - version "3.11.1" - -type-fest@^3.8.0: - version "3.11.1" - -"typescript@^4.6.4 || ^5.0.0", typescript@>=3: - version "5.1.3" - -typescript@^4.7.4, typescript@^4.9.4, typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": - version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -typescript@>=5.0.2: - version "5.1.3" - -ufo@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/ufo/-/ufo-1.1.2.tgz" - integrity sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ== - -uglify-js@^3.1.4: - version "3.17.4" - resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" - integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== - -unique-filename@^2.0.0: - version "2.0.1" - dependencies: - unique-slug "^3.0.0" - -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - -unique-slug@^3.0.0: - version "3.0.0" - dependencies: - imurmurhash "^0.1.4" - -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -unique-string@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz" - integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== - dependencies: - crypto-random-string "^4.0.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-join@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz" - integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -v8-compile-cache@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -v8-to-istanbul@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz" - integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz" - integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== - dependencies: - builtins "^5.0.0" - -vite-node@0.31.4: - version "0.31.4" - resolved "https://registry.npmjs.org/vite-node/-/vite-node-0.31.4.tgz" - integrity sha512-uzL377GjJtTbuc5KQxVbDu2xfU/x0wVjUtXQR2ihS21q/NK6ROr4oG0rsSkBBddZUVCwzfx22in76/0ZZHXgkQ== - dependencies: - cac "^6.7.14" - debug "^4.3.4" - mlly "^1.2.0" - pathe "^1.1.0" - picocolors "^1.0.0" - vite "^3.0.0 || ^4.0.0" - -"vite@^3.0.0 || ^4.0.0", vite@^4.0.0, vite@^4.2.0: - version "4.3.9" - resolved "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz" - integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg== - dependencies: - esbuild "^0.17.5" - postcss "^8.4.23" - rollup "^3.21.0" - optionalDependencies: - fsevents "~2.3.2" - -vitest@^0.31.0, "vitest@>=0.30.0 <1": - version "0.31.4" - resolved "https://registry.npmjs.org/vitest/-/vitest-0.31.4.tgz" - integrity sha512-GoV0VQPmWrUFOZSg3RpQAPN+LPmHg2/gxlMNJlyxJihkz6qReHDV6b0pPDcqFLNEPya4tWJ1pgwUNP9MLmUfvQ== - dependencies: - "@types/chai" "^4.3.5" - "@types/chai-subset" "^1.3.3" - "@types/node" "*" - "@vitest/expect" "0.31.4" - "@vitest/runner" "0.31.4" - "@vitest/snapshot" "0.31.4" - "@vitest/spy" "0.31.4" - "@vitest/utils" "0.31.4" - acorn "^8.8.2" - acorn-walk "^8.2.0" - cac "^6.7.14" - chai "^4.3.7" - concordance "^5.0.4" - debug "^4.3.4" - local-pkg "^0.4.3" - magic-string "^0.30.0" - pathe "^1.1.0" - picocolors "^1.0.0" - std-env "^3.3.2" - strip-literal "^1.0.1" - tinybench "^2.5.0" - tinypool "^0.5.0" - vite "^3.0.0 || ^4.0.0" - vite-node "0.31.4" - why-is-node-running "^2.2.2" - -vlq@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz" - integrity sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA== - -walk-up-path@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz" - integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== - -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -well-known-symbols@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz" - integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^1.2.14: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - 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" - -which@^2.0.2: - 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" - -which@^3.0.0, which@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/which/-/which-3.0.1.tgz" - integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== - dependencies: - isexe "^2.0.0" - -why-is-node-running@^2.2.2: - version "2.2.2" - resolved "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz" - integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== - dependencies: - siginfo "^2.0.0" - stackback "0.0.2" - -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -word-wrap@^1.0.3, word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - 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" - -wrap-ansi@^7.0.0: - 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" - -wrap-ansi@^8.1.0: - 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" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz" - integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^20.2.2, yargs-parser@^20.2.3, yargs-parser@^20.2.9: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.5.1, yargs@^17.6.0: - version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== From 013c92f10048bf0e668472ddb5efba9fcb6bc2ba Mon Sep 17 00:00:00 2001 From: Altynbek Orumbayev Date: Tue, 29 Aug 2023 01:35:07 +0200 Subject: [PATCH 3/7] refactor: further simplifying the client and operations supported --- README.md | 8 +- ...piaInfrastructure.ts => SubtopiaClient.ts} | 142 +- ...aRegistry.ts => SubtopiaRegistryClient.ts} | 72 +- src/constants/index.ts | 20 +- src/index.ts | 12 +- src/utils/index.ts | 231 +--- tests/subtopia.test.ts | 1164 ++--------------- tests/utils.ts | 24 +- vitest.config.ts | 1 + 9 files changed, 355 insertions(+), 1319 deletions(-) rename src/clients/{SubtopiaInfrastructure.ts => SubtopiaClient.ts} (86%) rename src/clients/{SubtopiaRegistry.ts => SubtopiaRegistryClient.ts} (89%) diff --git a/README.md b/README.md index 0dfdc06..ee99fff 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Example snippets of using the Subtopia JS SDK. const response = await SubtopiaClient.subscribe( { subscriber: { address: {PUT_WALLET_ADDRESS}, signer: {PUT_WALLET_SIGNER} }, - smiID: { PUT_SMI_ID_HERE }, // number - the ID of the SMI instance you want to subscribe to + smiID: { PUT_PRODUCT_ID_HERE }, // number - the ID of the SMI instance you want to subscribe to expirationType: { PUT_EXPIRATION_TYPE_HERE }, // pick duration from SubscriptionExpirationType enum. If there is a discount available for this duration, it will be auto applied. }, { client: {PUT_ALGOD_INSTANCE_HERE} // object of type algosdk.Algodv2 @@ -74,7 +74,7 @@ console.log(response.returnValue) // response is of type ABIResult const subscriberBox = await SubtopiaClient.getSubscriptionRecordForAccount( client, { PUT_SUBSCRIBER_ADDRESS }, - { PUT_SMI_ID_HERE } + { PUT_PRODUCT_ID_HERE } ); // SubscriptionRecord (throws Error if not subscribed) @@ -136,7 +136,7 @@ console.log(deleteResult.txID); const discount = await SubtopiaClient.createDiscount( { creator: { address: {PUT_WALLET_ADDRESS}, signer: {PUT_WALLET_SIGNER} }, - smiID: { PUT_SMI_ID_HERE }, // number - the ID of the SMI instance you want to subscribe to + smiID: { PUT_PRODUCT_ID_HERE }, // number - the ID of the SMI instance you want to subscribe to discount: { expirationType: SubscriptionExpirationType // number - the type of expiration to apply. Also serves as static id for the discount. discountType: {PUT_DISCOUNT_TYPE_HERE} // number - the type of discount to apply. FIXED or PERCENTAGE @@ -160,7 +160,7 @@ console.log(discount.returnValue) // response is of type ABIResult const discount = await SubtopiaClient.getDiscountRecordForType( client, - { PUT_SMI_ID_HERE } + { PUT_PRODUCT_ID_HERE } { PUT_EXPIRATION_TYPE_HERE }, ); diff --git a/src/clients/SubtopiaInfrastructure.ts b/src/clients/SubtopiaClient.ts similarity index 86% rename from src/clients/SubtopiaInfrastructure.ts rename to src/clients/SubtopiaClient.ts index c46e254..37c5ac4 100644 --- a/src/clients/SubtopiaInfrastructure.ts +++ b/src/clients/SubtopiaClient.ts @@ -44,7 +44,7 @@ import { getAppGlobalState, } from "@algorandfoundation/algokit-utils"; import { TransactionSignerAccount } from "@algorandfoundation/algokit-utils/types/account"; -import { SubtopiaRegistry } from "./SubtopiaRegistry"; +import { SubtopiaRegistryClient } from "./SubtopiaRegistryClient"; import { ApplicationSpec, AssetMetadata, @@ -54,7 +54,7 @@ import { const encoder = new TextEncoder(); -export class SubtopiaInfrastructure { +export class SubtopiaClient { algodClient: algosdk.Algodv2; creator: TransactionSignerAccount; price: number; @@ -101,7 +101,7 @@ export class SubtopiaInfrastructure { algodClient: AlgodClient, productID: number, creator: TransactionSignerAccount - ): Promise { + ): Promise { const productGlobalState = await getAppGlobalState( productID, algodClient @@ -141,7 +141,7 @@ export class SubtopiaInfrastructure { productGlobalState.coin_id.value as number ); - return new SubtopiaInfrastructure({ + return new SubtopiaClient({ algodClient, creator, appID: productID, @@ -209,40 +209,6 @@ export class SubtopiaInfrastructure { ); } - public async transferOwnership({ - newOwnerAddress, - }: { - newOwnerAddress: string; - }): Promise<{ - txId: string; - }> { - const updateManagerAtc = new AtomicTransactionComposer(); - updateManagerAtc.addMethodCall({ - appID: this.appID, - method: new ABIMethod({ - name: "update_manager", - args: [ - { - type: "address", - name: "new_manager_account", - desc: "The new manager account address.", - }, - ], - returns: { type: "void" }, - }), - methodArgs: [newOwnerAddress], - sender: this.creator.addr, - signer: this.creator.signer, - suggestedParams: await getParamsWithFeeCount(this.algodClient, 1), - }); - - const response = await updateManagerAtc.execute(this.algodClient, 10); - - return { - txId: response.txIDs.pop() as string, - }; - } - public async getDiscount({ expirationType, }: { @@ -374,7 +340,7 @@ export class SubtopiaInfrastructure { const platformFeeAmount = await this.getSubscriptionPlatformFee( SUBSCRIPTION_PLATFORM_FEE_CENTS ); - const creatorLockerId = await SubtopiaRegistry.getLocker({ + const creatorLockerId = await SubtopiaRegistryClient.getLocker({ registryID: TESTNET_SUBTOPIA_REGISTRY_ID, algodClient: this.algodClient, ownerAddress: this.creator.addr, @@ -512,6 +478,104 @@ export class SubtopiaInfrastructure { }; } + public async transferSubscription({ + oldSubscriber, + newSubscriberAddress, + subscriptionID, + }: { + oldSubscriber: TransactionSignerAccount; + newSubscriberAddress: string; + subscriptionID: number; + }): Promise<{ + txId: string; + }> { + const transferSubscriptionAtc = new AtomicTransactionComposer(); + transferSubscriptionAtc.addMethodCall({ + appID: this.appID, + method: new ABIMethod({ + name: "transfer_subscription", + args: [ + { + type: "address", + name: "new_subscriber", + desc: "The new address to transfer the subscription to.", + }, + { + type: "asset", + name: "subscription", + desc: "The subscription asset.", + }, + ], + returns: { type: "void" }, + }), + boxes: [ + { + appIndex: this.appID, + name: decodeAddress(oldSubscriber.addr).publicKey, + }, + { + appIndex: this.appID, + name: decodeAddress(newSubscriberAddress).publicKey, + }, + ], + methodArgs: [newSubscriberAddress, subscriptionID], + sender: oldSubscriber.addr, + signer: oldSubscriber.signer, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 2), + }); + + const response = await transferSubscriptionAtc.execute( + this.algodClient, + 10 + ); + + return { + txId: response.txIDs.pop() as string, + }; + } + + public async claimSubscription({ + subscriber, + subscriptionID, + }: { + subscriber: TransactionSignerAccount; + subscriptionID: number; + }): Promise<{ + txId: string; + }> { + const claimSubscriptionAtc = new AtomicTransactionComposer(); + claimSubscriptionAtc.addMethodCall({ + appID: this.appID, + method: new ABIMethod({ + name: "claim_subscription", + args: [ + { + type: "asset", + name: "subscription", + desc: "The subscription ASA ID.", + }, + ], + returns: { type: "void" }, + }), + methodArgs: [subscriptionID], + boxes: [ + { + appIndex: this.appID, + name: decodeAddress(subscriber.addr).publicKey, + }, + ], + sender: subscriber.addr, + signer: subscriber.signer, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 2), + }); + + const response = await claimSubscriptionAtc.execute(this.algodClient, 10); + + return { + txId: response.txIDs.pop() as string, + }; + } + public async deleteSubscription({ subscriber, subscriptionID, diff --git a/src/clients/SubtopiaRegistry.ts b/src/clients/SubtopiaRegistryClient.ts similarity index 89% rename from src/clients/SubtopiaRegistry.ts rename to src/clients/SubtopiaRegistryClient.ts index 98a5881..d026590 100644 --- a/src/clients/SubtopiaRegistry.ts +++ b/src/clients/SubtopiaRegistryClient.ts @@ -20,17 +20,18 @@ import { calculateSmiCreationMbr, calculateSmlCreationMbr, calculateRegistryLockerBoxCreateMbr, + getLockerBoxPrefix, } from "../utils"; import { getAssetByID } from "../utils"; import { - SMI_APPROVAL_KEY, - SMI_CLEAR_KEY, + PRODUCT_APPROVAL_KEY, + PRODUCT_CLEAR_KEY, MIN_APP_OPTIN_MBR, MIN_APP_BALANCE_MBR, MIN_ASA_OPTIN_MBR, - SMI_CREATION_PLATFORM_FEE_CENTS, - SML_APPROVAL_KEY, - SML_CLEAR_KEY, + PRODUCTCREATION_PLATFORM_FEE_CENTS, + LOCKER_APPROVAL_KEY, + LOCKER_CLEAR_KEY, SUBTOPIA_REGISTRY_ID, } from "../constants"; import { @@ -52,7 +53,7 @@ const STP_IMAGE_URL = const STP_UNIT_NAME = "STP"; const encoder = new TextEncoder(); -export class SubtopiaRegistry { +export class SubtopiaRegistryClient { algodClient: algosdk.Algodv2; creator: TransactionSignerAccount; version: string; @@ -91,7 +92,7 @@ export class SubtopiaRegistry { algodClient: AlgodClient, creator: TransactionSignerAccount, chainType: ChainType - ): Promise { + ): Promise { const registryID = SUBTOPIA_REGISTRY_ID(chainType); const registryAddress = getApplicationAddress(registryID); const registrySpec = await getAppById(registryID, algodClient); @@ -117,7 +118,7 @@ export class SubtopiaRegistry { const response = await versionAtc.simulate(algodClient); const version = response.methodResults[0].returnValue as string; - return new SubtopiaRegistry({ + return new SubtopiaRegistryClient({ algodClient: algodClient, creator: creator, appID: registryID, @@ -240,11 +241,11 @@ export class SubtopiaRegistry { }, { appIndex: this.appID, - name: encoder.encode(SML_APPROVAL_KEY), + name: encoder.encode(LOCKER_APPROVAL_KEY), }, { appIndex: this.appID, - name: encoder.encode(SML_CLEAR_KEY), + name: encoder.encode(LOCKER_CLEAR_KEY), }, ], sender: creator.addr, @@ -273,7 +274,7 @@ export class SubtopiaRegistry { .getApplicationBoxByName( registryID, new Uint8Array([ - ...Buffer.from("cl-"), + ...getLockerBoxPrefix(LockerType.CREATOR), ...decodeAddress(ownerAddress).publicKey, ]) ) @@ -292,12 +293,12 @@ export class SubtopiaRegistry { }): Promise<{ txID: string; }> { - const oldOwnerLockerId = await SubtopiaRegistry.getLocker({ + const oldOwnerLockerId = await SubtopiaRegistryClient.getLocker({ registryID: this.appID, algodClient: this.algodClient, ownerAddress: this.creator.addr, }); - const newOwnerLockerId = await SubtopiaRegistry.getLocker({ + const newOwnerLockerId = await SubtopiaRegistryClient.getLocker({ registryID: this.appID, algodClient: this.algodClient, ownerAddress: newOwnerAddress, @@ -310,11 +311,17 @@ export class SubtopiaRegistry { const boxes = [ { appIndex: this.appID, - name: decodeAddress(this.creator.addr).publicKey, + name: new Uint8Array([ + ...getLockerBoxPrefix(LockerType.CREATOR), + ...decodeAddress(this.creator.addr).publicKey, + ]), }, { appIndex: this.appID, - name: decodeAddress(newOwnerAddress).publicKey, + name: new Uint8Array([ + ...getLockerBoxPrefix(LockerType.CREATOR), + ...decodeAddress(newOwnerAddress).publicKey, + ]), }, ]; @@ -322,11 +329,11 @@ export class SubtopiaRegistry { boxes.push.apply(boxes, [ { appIndex: this.appID, - name: encoder.encode(SML_APPROVAL_KEY), + name: encoder.encode(LOCKER_APPROVAL_KEY), }, { appIndex: this.appID, - name: encoder.encode(SML_CLEAR_KEY), + name: encoder.encode(LOCKER_CLEAR_KEY), }, ]); } @@ -338,23 +345,27 @@ export class SubtopiaRegistry { name: "transfer_infrastructure", args: [ { + type: "application", name: "infrastructure", - type: "uint64", + desc: "The INFRASTRUCTURE.", }, { + type: "application", name: "old_locker", - type: "uint64", + desc: "The old locker.", }, { - name: "new_manager", type: "address", + name: "new_manager", + desc: "The new manager address.", }, { - name: "transfer_fee_txn", type: "pay", + name: "transfer_fee_txn", + desc: "The transfer fee transaction.", }, ], - returns: { type: "uint64" }, + returns: { type: "void" }, }), methodArgs: [ infrastructureID, @@ -364,7 +375,7 @@ export class SubtopiaRegistry { txn: makePaymentTxnWithSuggestedParamsFromObject({ from: this.creator.addr, to: this.appAddress, - amount: algosToMicroalgos(newOwnerLockerId ? 0 : 0.4), + amount: algosToMicroalgos(newOwnerLockerId ? 1 : 0.5), suggestedParams: await getParamsWithFeeCount(this.algodClient, 0), }), signer: this.creator.signer, @@ -373,7 +384,10 @@ export class SubtopiaRegistry { boxes: boxes, sender: this.creator.addr, signer: this.creator.signer, - suggestedParams: await getParamsWithFeeCount(this.algodClient, 8), + suggestedParams: await getParamsWithFeeCount( + this.algodClient, + newOwnerLockerId ? 10 : 11 + ), }); const response = await transferInfraAtc.execute(this.algodClient, 10); @@ -422,7 +436,7 @@ export class SubtopiaRegistry { ); const feeAmount = await this.getInfrastructureCreationFee(coinID); const platformFeeAmount = await this.getInfrastructureCreationPlatformFee( - SMI_CREATION_PLATFORM_FEE_CENTS + PRODUCTCREATION_PLATFORM_FEE_CENTS ); const createInfraAtc = new AtomicTransactionComposer(); @@ -544,19 +558,19 @@ export class SubtopiaRegistry { }, { appIndex: this.appID, - name: encoder.encode(SMI_APPROVAL_KEY), + name: encoder.encode(PRODUCT_APPROVAL_KEY), }, { appIndex: this.appID, - name: encoder.encode(SMI_APPROVAL_KEY), + name: encoder.encode(PRODUCT_APPROVAL_KEY), }, { appIndex: this.appID, - name: encoder.encode(SMI_APPROVAL_KEY), + name: encoder.encode(PRODUCT_APPROVAL_KEY), }, { appIndex: this.appID, - name: encoder.encode(SMI_CLEAR_KEY), + name: encoder.encode(PRODUCT_CLEAR_KEY), }, ], sender: this.creator.addr, diff --git a/src/constants/index.ts b/src/constants/index.ts index 12d4cb3..0716eb0 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -26,11 +26,11 @@ export const ALGO_ASSET = { unitName: "ALGO", } as AssetMetadata; -export const SMI_STATE_MANAGER_KEY = "manager"; -export const SMI_APPROVAL_KEY = "infrastructure_approval"; -export const SMI_CLEAR_KEY = "infrastructure_clear"; -export const SML_APPROVAL_KEY = "locker_approval"; -export const SML_CLEAR_KEY = "locker_clear"; +export const PRODUCT_STATE_MANAGER_KEY = "manager"; +export const PRODUCT_APPROVAL_KEY = "infrastructure_approval"; +export const PRODUCT_CLEAR_KEY = "infrastructure_clear"; +export const LOCKER_APPROVAL_KEY = "locker_approval"; +export const LOCKER_CLEAR_KEY = "locker_clear"; export const MIN_APP_BALANCE_MBR = 0.1; // ALGO export const MIN_APP_OPTIN_MBR = 0.1; // ALGO @@ -39,10 +39,10 @@ export const MIN_ASA_CREATE_MBR = 0.1; // ALGO // Platform fees export const SUBSCRIPTION_PLATFORM_FEE_CENTS = 10; -export const SMI_CREATION_PLATFORM_FEE_CENTS = 500; +export const PRODUCTCREATION_PLATFORM_FEE_CENTS = 500; // Algorand minimum transaction fee -export const SMR_VERSION = "1.0"; -export const SMI_VERSION = "1.0"; -export const SML_VERSION = "1.0"; -export const SMA_VERSION = "1.0"; +export const REGISTRY_VERSION = "1.0"; +export const PRODUCTVERSION = "1.0"; +export const LOCKER_VERSION = "1.0"; +export const ORACLE_VERSION = "1.0"; diff --git a/src/index.ts b/src/index.ts index 18453e9..034bd8c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,13 +5,7 @@ // import { SubtopiaClient } from "./clients/SubtopiaClient"; // import { SubtopiaAdminClient } from "./clients/SubtopiaAdminClient"; -import { - getLocker, - loadApplicationState, - normalizePrice, - optInAsset, - optOutAsset, -} from "./utils"; +import { normalizePrice, optInAsset, optOutAsset } from "./utils"; import { SUBTOPIA_CONTRACTS_VERSION } from "./constants"; import { PriceNormalizationType, @@ -48,13 +42,9 @@ import { export { PriceNormalizationType, - // SubtopiaAdminClient, - // SubtopiaClient, SubscriptionType, SubscriptionExpirationType, DiscountType, - getLocker, - loadApplicationState, normalizePrice, SUBTOPIA_CONTRACTS_VERSION, SMILifecycle, diff --git a/src/utils/index.ts b/src/utils/index.ts index 225c665..89d4bbe 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -4,10 +4,7 @@ // ============================================================================= import algosdk, { - LogicSigAccount, AtomicTransactionComposer, - encodeAddress, - makeLogicSigAccountTransactionSigner, makeAssetTransferTxnWithSuggestedParamsFromObject, Algodv2, ALGORAND_MIN_TX_FEE, @@ -18,178 +15,26 @@ import algosdk, { ABIUintType, decodeAddress, } from "algosdk"; -import AlgodClient from "algosdk/dist/types/client/v2/algod/algod"; -import { StateValue, State, ApplicationClient } from "beaker-ts"; -import { - ApplicationSpec, - AssetMetadata, - Locker, - LockerRekeyParameters, - User, -} from "../interfaces"; +import { ApplicationSpec, AssetMetadata } from "../interfaces"; import { DEFAULT_AWAIT_ROUNDS, ALGO_ASSET } from "../constants"; -import { PriceNormalizationType, SubscriptionExpirationType } from "../enums"; +import { + LockerType, + PriceNormalizationType, + SubscriptionExpirationType, +} from "../enums"; import { APP_PAGE_MAX_SIZE } from "@algorandfoundation/algokit-utils/types/app"; - -/* c8 ignore start */ -function strOrHex(v: Buffer): string { - try { - const response = v.toString(`utf-8`); - try { - if (response && v.toString(`hex`).length === 64) { - const addressString = encodeAddress(new Uint8Array(v)); - return addressString; - } - } catch (e) { - return response; - } - return response; - } catch (e) { - return v.toString(`hex`); - } -} - -export async function debugPcCode(client: ApplicationClient, pcLine: number) { - const [, appMap] = await client.compile( - Buffer.from(client.approvalProgram as string, "base64").toString() - ); - - return appMap.pcToLine[pcLine]; -} - -function decodeState(state: StateValue[], raw?: boolean): State { - const obj = {} as State; - - // Start with empty set - for (const stateVal of state) { - const keyBuff = Buffer.from(stateVal.key, `base64`); - const key = raw ? keyBuff.toString(`hex`) : strOrHex(keyBuff); - const value = stateVal.value; - - // In both global-state and state deltas, 1 is bytes and 2 is int - const dataTypeFlag = value.action ? value.action : value.type; - switch (dataTypeFlag) { - case 1: - // eslint-disable-next-line no-case-declarations - const valBuff = Buffer.from(value.bytes, `base64`); - obj[key] = raw ? new Uint8Array(valBuff) : strOrHex(valBuff); - break; - case 2: - obj[key] = value.uint; - break; - default: // ?? - } - } - - return obj; -} -/* c8 ignore stop */ - -export async function loadApplicationState( - client: AlgodClient, - appId: number, - - raw?: boolean -): Promise { - const appInfo = await client.getApplicationByID(appId).do(); - - if (!(`params` in appInfo) || !(`global-state` in appInfo[`params`])) - throw new Error(`No global state found`); - - const decoded = decodeState(appInfo[`params`][`global-state`], raw); - - return decoded; -} - -export function addressToHex(address: string): string { - return ( - "0x" + - Buffer.from(algosdk.decodeAddress(address).publicKey).toString("hex") + - " // addr " + - address - ); -} - -export async function getLocker( - client: AlgodClient, - creatorAddress: string, - registryAddress: string -): Promise { - // load sml.teal file into string - let sml = "SML_TEAL"; - - // replace TMPL_CREATOR_ADDRESS with decoded creator address - sml = sml.replace(`TMPL_CREATOR_ADDRESS`, addressToHex(creatorAddress)); - - // replace TMPL_REGISTRY_ADDRESS with decoded registry address - sml = sml.replace(`TMPL_REGISTRY_ADDRESS`, addressToHex(registryAddress)); - - // compile sml.teal - const response = await client.compile(sml).do(); - const compiled = new Uint8Array(Buffer.from(response.result, `base64`)); - - // wrap compiled sml.teal in LogicSigAccount - const smlAccount = new LogicSigAccount(compiled); - - const lockerInfo = await client.accountInformation(smlAccount.address()).do(); - const authAddress = lockerInfo["auth-addr"] || smlAccount.address(); - - return { - lsig: smlAccount, - authAddress: authAddress, - signer: makeLogicSigAccountTransactionSigner(smlAccount), - }; -} - -export async function rekeyLocker(params: LockerRekeyParameters): Promise<{ - confirmedRound: number; - txIDs: string[]; - methodResults: SdkABIResult[]; -}> { - const lsigSigner = makeLogicSigAccountTransactionSigner(params.locker); - const sp = await getParamsWithFeeCount(params.client, 2); - - const atc = new AtomicTransactionComposer(); - atc.addTransaction({ - txn: algosdk.makePaymentTxnWithSuggestedParams( - params.creatorAddress, - params.locker.address(), - 100_000, - undefined, - undefined, - sp - ), - signer: params.creatorSigner, - }); - - const rekey_sp = Object.assign({}, sp); - rekey_sp.fee = 0; - const rekeySigner = - params.registryAddress === params.rekeyToAddress - ? lsigSigner - : params.registrySigner; - atc.addTransaction({ - txn: algosdk.makePaymentTxnWithSuggestedParams( - params.locker.address(), - params.locker.address(), - 0, - undefined, - undefined, - rekey_sp, - params.rekeyToAddress - ), - signer: rekeySigner, - }); - - return await atc.execute(params.client, DEFAULT_AWAIT_ROUNDS); -} - -export async function optInAsset( - client: Algodv2, - user: User, - passId: number -): Promise<{ +import { TransactionSignerAccount } from "@algorandfoundation/algokit-utils/types/account"; + +export async function optInAsset({ + client, + account, + assetID, +}: { + client: Algodv2; + account: TransactionSignerAccount; + assetID: number; +}): Promise<{ confirmedRound: number; txIDs: string[]; methodResults: SdkABIResult[]; @@ -197,13 +42,13 @@ export async function optInAsset( const optInAtc = new AtomicTransactionComposer(); optInAtc.addTransaction({ txn: makeAssetTransferTxnWithSuggestedParamsFromObject({ - from: user.address, - to: user.address, + from: account.addr, + to: account.addr, amount: 0, suggestedParams: await getParamsWithFeeCount(client, 1), - assetIndex: passId, + assetIndex: assetID, }), - signer: user.signer, + signer: account.signer, }); const optInResult = await optInAtc.execute(client, DEFAULT_AWAIT_ROUNDS); @@ -211,11 +56,15 @@ export async function optInAsset( return optInResult; } -export async function optOutAsset( - client: Algodv2, - user: User, - passId: number -): Promise<{ +export async function optOutAsset({ + client, + account, + assetID, +}: { + client: Algodv2; + account: TransactionSignerAccount; + assetID: number; +}): Promise<{ confirmedRound: number; txIDs: string[]; methodResults: SdkABIResult[]; @@ -223,14 +72,14 @@ export async function optOutAsset( const optInAtc = new AtomicTransactionComposer(); optInAtc.addTransaction({ txn: makeAssetTransferTxnWithSuggestedParamsFromObject({ - from: user.address, - to: user.address, - closeRemainderTo: user.address, + from: account.addr, + to: account.addr, + closeRemainderTo: account.addr, amount: 0, suggestedParams: await getParamsWithFeeCount(client, 1), - assetIndex: passId, + assetIndex: assetID, }), - signer: user.signer, + signer: account.signer, }); const optInResult = await optInAtc.execute(client, DEFAULT_AWAIT_ROUNDS); @@ -407,3 +256,13 @@ export async function calculateSmlCreationMbr( applicationSpec.globalNumByteSlice ); } + +export function getLockerBoxPrefix(lockerType: LockerType): Buffer { + if (lockerType === LockerType.CREATOR) { + return Buffer.from("cl-"); + } else if (lockerType === LockerType.USER) { + return Buffer.from("ul-"); + } else { + throw new Error(`Unknown locker type: ${lockerType}`); + } +} diff --git a/tests/subtopia.test.ts b/tests/subtopia.test.ts index fdfb57d..47c0944 100644 --- a/tests/subtopia.test.ts +++ b/tests/subtopia.test.ts @@ -1,14 +1,14 @@ import { mnemonicToSecretKey, makeBasicAccountTransactionSigner, - generateAccount, + Account, } from "algosdk"; import "dotenv/config"; -import { SubscriptionType } from "../src/index"; -import { it, describe, expect } from "vitest"; +import { SubscriptionType, optInAsset, optOutAsset } from "../src/index"; +import { it, describe, expect, beforeAll, afterAll } from "vitest"; -import { SubtopiaRegistry } from "../src/clients/SubtopiaRegistry"; -import { SubtopiaInfrastructure } from "../src/clients/SubtopiaInfrastructure"; +import { SubtopiaRegistryClient } from "../src/clients/SubtopiaRegistryClient"; +import { SubtopiaClient } from "../src/clients/SubtopiaClient"; import { ChainType, LockerType, @@ -19,25 +19,18 @@ import { ensureFunded, getAlgoClient, getAppGlobalState, + microAlgos, transactionSignerAccount, + transferAlgos, } from "@algorandfoundation/algokit-utils"; -import { TESTNET_SUBTOPIA_REGISTRY_ID } from "../src/constants"; - -const TIME_BASED_EXPIRATION_TYPES = [ - SubscriptionExpirationType.MONTHLY, - SubscriptionExpirationType.QUARTERLY, - SubscriptionExpirationType.SEMI_ANNUAL, - SubscriptionExpirationType.ANNUAL, -]; const algodClient = getAlgoClient({ server: "https://testnet-api.algonode.cloud", }); -// eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const dispenserAccount = mnemonicToSecretKey( process.env["TESTNET_SUBTOPIA_DISPENSER_MNEMONIC"] as string ); -const testnetRegistryId = TESTNET_SUBTOPIA_REGISTRY_ID; const creatorAccount = mnemonicToSecretKey( process.env["TESTNET_SUBTOPIA_CREATOR_MNEMONIC"] as string @@ -47,43 +40,76 @@ const creatorSignerAccount = transactionSignerAccount( creatorAccount.addr ); -await ensureFunded( - { - accountToFund: creatorAccount, - fundingSource: dispenserAccount, - minSpendingBalance: algos(5), - minFundingIncrement: algos(5), - }, - algodClient +const bobTestAccount = mnemonicToSecretKey( + process.env["TESTNET_SUBTOPIA_BOB_MNEMONIC"] as string ); -const generateRandomAccount = async () => { - const account = generateAccount(); - - await ensureFunded( - { - accountToFund: account, - fundingSource: dispenserAccount, - minSpendingBalance: algos(2), - }, - algodClient - ); - - return account; +const refundTestnetAlgos = async (account: Account) => { + const accountInfo = await algodClient.accountInformation(account.addr).do(); + + const minWithdrawableAmount = + accountInfo["amount"] - accountInfo["min-balance"] - algos(0.1).microAlgos; + + if (minWithdrawableAmount > 0) { + await transferAlgos( + { + amount: microAlgos(minWithdrawableAmount), + from: account, + to: dispenserAccount, + }, + algodClient + ); + } }; describe("subtopia", () => { + beforeAll(async () => { + const dispenserInfo = await algodClient + .accountInformation(dispenserAccount.addr) + .do(); + + const dispenserBalance = dispenserInfo["amount"]; + + expect(dispenserBalance, "Dispenser must be funded").toBeGreaterThan( + algos(10).microAlgos + ); + + await ensureFunded( + { + accountToFund: creatorAccount, + fundingSource: dispenserAccount, + minSpendingBalance: algos(5), + minFundingIncrement: algos(5), + }, + algodClient + ); + + await ensureFunded( + { + accountToFund: bobTestAccount, + fundingSource: dispenserAccount, + minSpendingBalance: algos(2), + }, + algodClient + ); + }); + + afterAll(async () => { + await refundTestnetAlgos(creatorAccount); + await refundTestnetAlgos(bobTestAccount); + }); + it( "should correctly add infra, create subscription, delete subscription and delete infra", async () => { // Setup - const subtopiaRegistryClient = await SubtopiaRegistry.init( + const subtopiaRegistryClient = await SubtopiaRegistryClient.init( algodClient, creatorSignerAccount, ChainType.TESTNET ); - let lockerID = await SubtopiaRegistry.getLocker({ + let lockerID = await SubtopiaRegistryClient.getLocker({ registryID: subtopiaRegistryClient.appID, algodClient: algodClient, ownerAddress: creatorAccount.addr, @@ -109,28 +135,55 @@ describe("subtopia", () => { expect(response.infrastructureID).toBeGreaterThan(0); - const randomSubscriber = await generateRandomAccount(); - const randomSubscriberSigner = transactionSignerAccount( - makeBasicAccountTransactionSigner(randomSubscriber), - randomSubscriber.addr + const subscriberAccount = bobTestAccount; + const subscriberSigner = transactionSignerAccount( + makeBasicAccountTransactionSigner(subscriberAccount), + subscriberAccount.addr ); - const productClient = await SubtopiaInfrastructure.init( + const productClient = await SubtopiaClient.init( algodClient, response.infrastructureID, creatorSignerAccount ); const subscribeResponse = await productClient.createSubscription({ - subscriber: randomSubscriberSigner, + subscriber: subscriberSigner, expirationType: SubscriptionExpirationType.UNLIMITED, }); expect(subscribeResponse.subscriptionId).toBeGreaterThan(0); + await optInAsset({ + client: algodClient, + account: subscriberSigner, + assetID: subscribeResponse.subscriptionId, + }); + + const claimResponse = await productClient.claimSubscription({ + subscriber: subscriberSigner, + subscriptionID: subscribeResponse.subscriptionId, + }); + + expect(claimResponse.txId).toBeDefined(); + + const transferTxnId = await productClient.transferSubscription({ + oldSubscriber: subscriberSigner, + newSubscriberAddress: creatorSignerAccount.addr, + subscriptionID: subscribeResponse.subscriptionId, + }); + + await optOutAsset({ + client: algodClient, + account: subscriberSigner, + assetID: subscribeResponse.subscriptionId, + }); + + expect(transferTxnId).toBeDefined(); + const deleteSubscriptionResponse = await productClient.deleteSubscription( { - subscriber: randomSubscriberSigner, + subscriber: creatorSignerAccount, subscriptionID: subscribeResponse.subscriptionId, } ); @@ -143,989 +196,58 @@ describe("subtopia", () => { ); // Assert - expect(content.price.value).toBe(1000000); + expect(content.price.value).toBe(algos(1).microAlgos); }, - { timeout: 1e6 } + { timeout: 10e6 } ); - // it( - // "should correctly add and transfer infrastructure", - // async () => { - // const subtopiaRegistryClient = await SubtopiaRegistry.init( - // algodClient, - // creatorSignerAccount, - // ChainType.TESTNET - // ); - // const newOwner = await generateRandomAccount(); - - // let lockerId = await subtopiaRegistryClient.getLocker( - // creatorAccount.addr - // ); - // if (lockerId === undefined) { - // const response = await subtopiaRegistryClient.createLocker({ - // creator: creatorSignerAccount, - // }); - // lockerId = response.lockerId; - // } - - // // Test - // const response = await subtopiaRegistryClient.createInfrastructure({ - // name: "Cool infrastructure", - // price: 1, - // subType: SubscriptionType.UNLIMITED, - // maxSubs: 0, - // coinID: 0, - // lockerId: lockerId, - // }); - - // expect(response.infrastructureId).toBeGreaterThan(0); - - // const transferResponse = - // await subtopiaRegistryClient.transferInfrastructure({ - // smiId: response.infrastructureId, - // newOwnerAddress: newOwner.addr, - // }); - - // expect(transferResponse.txId).toBeDefined(); - // }, - // { - // timeout: 1e6, - // } - // ); - - // it( - // "should correctly add infrastructure with already rekeyed locker", - // async () => { - // // Setup - // const { dummyRegistryId, dummyRegistryAddress } = - // await setupDummyRegistry(); - - // const locker = await getLocker( - // algodClient, - // adminAccount.addr, - // dummyRegistryAddress - // ); - - // await rekeyLocker({ - // client: algodClient, - // locker: locker.lsig, - // creatorAddress: adminAccount.addr, - // creatorSigner: adminAccount.signer, - // registryAddress: dummyRegistryAddress, - // registrySigner: adminAccount.signer, - // rekeyToAddress: dummyRegistryAddress, - // }); - - // // Test - // const result = await SubtopiaAdminClient.addInfrastructure({ - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // smrID: dummyRegistryId, - // name: "Cool infrastructure", - // price: 1, - // client: algodClient, - // subType: SubscriptionType.UNLIMITED, - // maxSubs: 0, - // coinID: 0, - // }); - - // const infrastructureID = Number(result.returnValue); - - // const content = await SubtopiaClient.getInfrastructureState( - // algodClient, - // infrastructureID - // ); - - // const contentWithNoNormalization = - // await SubtopiaClient.getInfrastructureState( - // algodClient, - // infrastructureID, - // false - // ); - - // // Assert - // expect(content.price).toBe(1); - // expect(contentWithNoNormalization.price).toBe(1 * 1e6); - // expect(result).toBeDefined(); - // expect(result.txID).toBeDefined(); - // }, - // { timeout: 1e6 } - // ); - - // it.each([ - // [SubscriptionExpirationType.UNLIMITED, DiscountType.FIXED, 1], - // [SubscriptionExpirationType.MONTHLY, DiscountType.FIXED, 2], - // [SubscriptionExpirationType.QUARTERLY, DiscountType.FIXED, 3], - // [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.FIXED, 4], - // [SubscriptionExpirationType.ANNUAL, DiscountType.FIXED, 10], - // [SubscriptionExpirationType.UNLIMITED, DiscountType.PERCENTAGE, 1], - // [SubscriptionExpirationType.MONTHLY, DiscountType.PERCENTAGE, 2], - // [SubscriptionExpirationType.QUARTERLY, DiscountType.PERCENTAGE, 3], - // [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.PERCENTAGE, 4], - // [SubscriptionExpirationType.ANNUAL, DiscountType.PERCENTAGE, 10], - // ])( - // "should correctly create discount of type %i, %i and %i on SMI", - // async (expirationType, discountType, discountValue) => { - // // Setup - // const { dummyRegistryId } = await setupDummyRegistry(); - // const randomAsset = await generateRandomAsset(algodClient, adminAccount); - - // const response = await SubtopiaAdminClient.addInfrastructure({ - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // smrID: dummyRegistryId, - // name: "Cool infrastructure", - // price: 1, - // client: algodClient, - // subType: - // expirationType === SubscriptionExpirationType.UNLIMITED - // ? SubscriptionType.UNLIMITED - // : SubscriptionType.TIME_BASED, - // maxSubs: 0, - // coinID: randomAsset.index, - // }); - // const infrastructureID = Number(response.returnValue); - - // // Test - // const discount = await SubtopiaClient.createDiscount( - // { - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // discount: { - // expirationType: expirationType, - // discountType: discountType, - // discountValue: discountValue, - // }, - // }, - // { client: algodClient } - // ); - - // // Assert - // expect(discount).toBeDefined(); - // expect(discount.txID).toBeDefined(); - - // const discountRecord = await SubtopiaClient.getDiscountRecordForType( - // algodClient, - // infrastructureID, - // expirationType - // ); - - // const smiState = await SubtopiaClient.getInfrastructureState( - // algodClient, - // infrastructureID - // ); - // assert(smiState.discounts[0] === discountRecord); - // assert(smiState.discounts.length === 1); - - // expect(discountRecord).toBeDefined(); - // expect(discountRecord.discountType).toBe(discountType); - // expect(discountRecord.discountValue).toBe( - // discountType === DiscountType.FIXED - // ? normalizePrice( - // discountValue, - // randomAsset.decimals, - // PriceNormalizationType.RAW - // ) - // : discountValue - // ); - // expect(discountRecord.expirationType).toBe(expirationType); - - // await SubtopiaClient.deleteDiscount( - // { - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // expirationType: expirationType, - // }, - // { client: algodClient } - // ); - - // // Should be deleted - // await expect( - // SubtopiaClient.getDiscountRecordForType( - // algodClient, - // infrastructureID, - // expirationType - // ) - // ).rejects.toThrowError(); - - // const postDeleteSmiState = await SubtopiaClient.getInfrastructureState( - // algodClient, - // infrastructureID - // ); - // assert(postDeleteSmiState.discounts.length === 0); - // }, - // { timeout: 1e6 } - // ); - - // it.each([ - // [SubscriptionExpirationType.UNLIMITED, undefined, 0], - // [SubscriptionExpirationType.UNLIMITED, DiscountType.FIXED, 1], - // [SubscriptionExpirationType.MONTHLY, DiscountType.FIXED, 2], - // [SubscriptionExpirationType.QUARTERLY, DiscountType.FIXED, 3], - // [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.FIXED, 4], - // [SubscriptionExpirationType.ANNUAL, DiscountType.FIXED, 10], - // [SubscriptionExpirationType.UNLIMITED, DiscountType.PERCENTAGE, 1], - // [SubscriptionExpirationType.MONTHLY, DiscountType.PERCENTAGE, 2], - // [SubscriptionExpirationType.QUARTERLY, DiscountType.PERCENTAGE, 3], - // [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.PERCENTAGE, 4], - // [SubscriptionExpirationType.ANNUAL, DiscountType.PERCENTAGE, 10], - // ])( - // "should correctly purchase subscription with algo and discount of type %i, %i and %i", - // async ( - // expirationType: SubscriptionExpirationType, - // discountType: DiscountType | undefined, - // discountValue: number - // ) => { - // // Setup - // const { dummyRegistryId } = await setupDummyRegistry(); - - // const response = await SubtopiaAdminClient.addInfrastructure({ - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // smrID: dummyRegistryId, - // name: "Cool infrastructure", - // price: 20, - // client: algodClient, - // subType: - // expirationType === SubscriptionExpirationType.UNLIMITED - // ? SubscriptionType.UNLIMITED - // : SubscriptionType.TIME_BASED, - // maxSubs: 0, - // coinID: 0, - // }); - - // const infrastructureID = Number(response.returnValue); - - // // Test - // const subscriber = await getRandomAccount( - // algodClient, - // adminAccount.addr, - // adminAccount.signer - // ); - - // if (discountType !== undefined) { - // await SubtopiaClient.createDiscount( - // { - // creator: { - // address: adminAccount.addr, - // signer: adminAccount.signer, - // }, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // discount: { - // expirationType: expirationType, - // discountType: discountType, - // discountValue: discountValue, - // }, - // }, - // { client: algodClient } - // ); - // } - - // const result = await SubtopiaClient.subscribe( - // { - // subscriber: { - // address: subscriber.address, - // signer: subscriber.signer, - // }, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // expirationType: expirationType, - // }, - // { - // client: algodClient, - // } - // ); - - // if (discountType !== undefined) { - // const discountBox = await SubtopiaClient.getDiscountRecordForType( - // algodClient, - // infrastructureID, - // expirationType - // ); - - // expect(discountBox).toBeDefined(); - // expect(discountBox.totalClaims).toBe(1); - // expect(discountBox.discountType).toBe(discountType); - // expect(discountBox.expirationType).toBe(expirationType); - // } - - // const claimResult = await SubtopiaClient.claimSubscriptionPass( - // { - // smiID: infrastructureID, - // subID: Number(result.returnValue), - // subscriber: { - // address: subscriber.address, - // signer: subscriber.signer, - // }, - // }, - // { - // client: algodClient, - // } - // ); - - // const boxContent = await SubtopiaClient.getSubscriptionRecordForAccount( - // algodClient, - // subscriber.address, - // infrastructureID - // ); - - // // Assert - // expect(boxContent.subID).toBe(Number(result.returnValue)); - // expect(boxContent.expirationType).toBe(expirationType); - // expect(result).toBeDefined(); - // expect(result.txID).toBeDefined(); - // expect(result.returnValue).toBeGreaterThan(0); - // expect(claimResult).toBeDefined(); - - // const balance = algodClient.accountAssetInformation( - // subscriber.address, - // Number(result.returnValue) - // ); - // expect(balance).toBeDefined(); - // expect(balance["assetID"]).toBe(Number(result.returnValue)); - - // await SubtopiaClient.unsubscribe( - // { - // smiID: infrastructureID, - // subscriber: { - // address: subscriber.address, - // signer: subscriber.signer, - // }, - // }, - // { - // client: algodClient, - // } - // ); - - // if (discountType !== undefined) { - // await SubtopiaClient.deleteDiscount( - // { - // creator: { - // address: adminAccount.addr, - // signer: adminAccount.signer, - // }, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // expirationType: expirationType, - // }, - // { client: algodClient } - // ); - // } - // }, - // { timeout: 1e6 } - // ); - - // it.each([ - // [SubscriptionExpirationType.UNLIMITED, undefined, 0], - // [SubscriptionExpirationType.UNLIMITED, DiscountType.FIXED, 1], - // [SubscriptionExpirationType.MONTHLY, DiscountType.FIXED, 2], - // [SubscriptionExpirationType.QUARTERLY, DiscountType.FIXED, 3], - // [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.FIXED, 4], - // [SubscriptionExpirationType.ANNUAL, DiscountType.FIXED, 10], - // [SubscriptionExpirationType.UNLIMITED, DiscountType.PERCENTAGE, 1], - // [SubscriptionExpirationType.MONTHLY, DiscountType.PERCENTAGE, 2], - // [SubscriptionExpirationType.QUARTERLY, DiscountType.PERCENTAGE, 3], - // [SubscriptionExpirationType.SEMI_ANNUAL, DiscountType.PERCENTAGE, 4], - // [SubscriptionExpirationType.ANNUAL, DiscountType.PERCENTAGE, 10], - // ])( - // "should correctly purchase subscription with custom ASA and discount of type %i %i %i", - // async (expirationType, discountType, discountValue) => { - // // Setup - // const { dummyRegistryId } = await setupDummyRegistry(); - - // const randomAsset = await generateRandomAsset( - // algodClient, - // adminAccount, - // undefined, - // 1000 * expirationTypeToMonths(expirationType) - // ); - - // const response = await SubtopiaAdminClient.addInfrastructure({ - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // smrID: dummyRegistryId, - // name: "Cool infrastructure", - // price: 1 + discountValue, - // client: algodClient, - // coinID: randomAsset.index, - // subType: - // expirationType === SubscriptionExpirationType.UNLIMITED - // ? SubscriptionType.UNLIMITED - // : SubscriptionType.TIME_BASED, - // maxSubs: 0, - // }); - - // const infrastructureID = Number(response.returnValue); - - // // Test - // const subscriber = await getRandomAccount( - // algodClient, - // adminAccount.addr, - // adminAccount.signer, - // randomAsset - // ); - - // if (discountType !== undefined) { - // const response = await SubtopiaClient.createDiscount( - // { - // creator: { - // address: adminAccount.addr, - // signer: adminAccount.signer, - // }, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // discount: { - // expirationType: expirationType, - // discountType: discountType, - // discountValue: discountValue, - // }, - // }, - // { client: algodClient } - // ); - // console.log(response); - // } - - // const result = await SubtopiaClient.subscribe( - // { - // subscriber: { - // address: subscriber.address, - // signer: subscriber.signer, - // }, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // expirationType: expirationType, - // }, - // { - // client: algodClient, - // } - // ); - - // const claimResult = await SubtopiaClient.claimSubscriptionPass( - // { - // smiID: infrastructureID, - // subID: Number(result.returnValue), - // subscriber: { - // address: subscriber.address, - // signer: subscriber.signer, - // }, - // }, - // { - // client: algodClient, - // } - // ); - - // const boxContent = await SubtopiaClient.getSubscriptionRecordForAccount( - // algodClient, - // subscriber.address, - // infrastructureID - // ); - - // // Assert - // expect(boxContent.subID).toBe(Number(result.returnValue)); - // expect(result).toBeDefined(); - // expect(result.txID).toBeDefined(); - // expect(result.returnValue).toBeGreaterThan(0); - // expect(claimResult).toBeDefined(); - - // const balance = algodClient.accountAssetInformation( - // subscriber.address, - // Number(result.returnValue) - // ); - // expect(balance).toBeDefined(); - // expect(balance["assetID"]).toBe(Number(result.returnValue)); - // }, - // { timeout: 1e6 } - // ); - - // it( - // "should correctly claim revenue with algo", - // async () => { - // // Setup - // const { dummyRegistryId } = await setupDummyRegistry(); - - // const randomSubType = getRandomElement([ - // SubscriptionType.TIME_BASED, - // SubscriptionType.UNLIMITED, - // ]); - - // const response = await SubtopiaAdminClient.addInfrastructure({ - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // smrID: dummyRegistryId, - // name: "Cool infrastructure", - // price: 1, - // client: algodClient, - // subType: randomSubType, - // maxSubs: 0, - // coinID: 0, - // }); - - // const infrastructureID = Number(response.returnValue); - - // // Test - // const subscriber = await getRandomAccount( - // algodClient, - // adminAccount.addr, - // adminAccount.signer - // ); - - // const randomExpirationType = - // randomSubType === SubscriptionType.TIME_BASED - // ? getRandomElement(TIME_BASED_EXPIRATION_TYPES) - // : undefined; - - // const subResponse = await SubtopiaClient.subscribe( - // { - // subscriber: { - // address: subscriber.address, - // signer: subscriber.signer, - // }, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // expirationType: randomExpirationType, - // }, - // { - // client: algodClient, - // } - // ); - - // await optOutAsset( - // algodClient, - // subscriber, - // Number(subResponse.returnValue) - // ); - - // const claimResponse = await SubtopiaClient.claimRevenue( - // { - // user: { - // address: adminAccount.addr, - // signer: adminAccount.signer, - // }, - // smrID: dummyRegistryId, - // }, - // { - // client: algodClient, - // } - // ); - - // // Assert - // expect(claimResponse).toBeDefined(); - // }, - // { timeout: 1e6 } - // ); - - // it.each([[SubscriptionType.UNLIMITED], [SubscriptionType.TIME_BASED]])( - // "should correctly delete SMI of type %i with N subscribers before deleting SMI", - // async (randomSubType) => { - // // Setup - // const { dummyRegistryId } = await setupDummyRegistry(); - - // const addResponse = await SubtopiaAdminClient.addInfrastructure({ - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // smrID: dummyRegistryId, - // name: "Cool infrastructure", - // price: 1, - // client: algodClient, - // subType: randomSubType, - // maxSubs: 0, - // coinID: 0, - // }); - - // const infrastructureID = Number(addResponse.returnValue); - - // // Test - // // Create 50 subscribers - // for (let index = 0; index < 50; index++) { - // const subscriber = await getRandomAccount( - // algodClient, - // adminAccount.addr, - // adminAccount.signer - // ); - - // const randomExpirationType = - // randomSubType === SubscriptionType.TIME_BASED - // ? getRandomElement(TIME_BASED_EXPIRATION_TYPES) - // : undefined; - - // const result = await SubtopiaClient.subscribe( - // { - // subscriber: { - // address: subscriber.address, - // signer: subscriber.signer, - // }, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // expirationType: randomExpirationType, - // }, - // { - // client: algodClient, - // } - // ); - - // const claimResult = await SubtopiaClient.claimSubscriptionPass( - // { - // smiID: infrastructureID, - // subID: Number(result.returnValue), - // subscriber: { - // address: subscriber.address, - // signer: subscriber.signer, - // }, - // }, - // { - // client: algodClient, - // } - // ); - - // const boxContent = await SubtopiaClient.getSubscriptionRecordForAccount( - // algodClient, - // subscriber.address, - // infrastructureID - // ); - - // // Assert - // expect(boxContent.subID).toBe(Number(result.returnValue)); - // expect(boxContent.expirationType).toBe(randomExpirationType ?? 0); - // expect(result).toBeDefined(); - // expect(result.txID).toBeDefined(); - // expect(result.returnValue).toBeGreaterThan(0); - // expect(claimResult).toBeDefined(); - - // const balance = algodClient.accountAssetInformation( - // subscriber.address, - // Number(result.returnValue) - // ); - // expect(balance).toBeDefined(); - // expect(balance["assetID"]).toBe(Number(result.returnValue)); - // } - - // const deleteResponse = await SubtopiaClient.deleteSubscription( - // { - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // user: { - // address: adminAccount.addr, - // signer: adminAccount.signer, - // }, - // }, - // { - // client: algodClient, - // } - // ); - - // expect(deleteResponse.txID).toBeDefined(); - - // // Should be deleted - // await expect( - // SubtopiaClient.getInfrastructureState(algodClient, infrastructureID) - // ).rejects.toThrowError(); - // }, - // { timeout: 1e6 } - // ); - - // it( - // "should correctly transfer SMI to new owner", - // async () => { - // // Setup - // const { dummyRegistryId } = await setupDummyRegistry(); - - // const randomSubType = getRandomElement([ - // SubscriptionType.TIME_BASED, - // SubscriptionType.UNLIMITED, - // ]); - // const response = await SubtopiaAdminClient.addInfrastructure({ - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // smrID: dummyRegistryId, - // name: "Cool infrastructure", - // price: 1, - // client: algodClient, - // subType: randomSubType, - // maxSubs: 0, - // coinID: 0, - // }); - // const infrastructureID = Number(response.returnValue); - - // const oldOwner = await getRandomAccount( - // algodClient, - // adminAccount.addr, - // adminAccount.signer - // ); - - // const randomExpirationType = - // randomSubType === SubscriptionType.TIME_BASED - // ? getRandomElement(TIME_BASED_EXPIRATION_TYPES) - // : undefined; - // const result = await SubtopiaClient.subscribe( - // { - // subscriber: { address: oldOwner.address, signer: oldOwner.signer }, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // expirationType: randomExpirationType, - // }, - // { - // client: algodClient, - // } - // ); - - // // Test - // const newOwner = await getRandomAccount( - // algodClient, - // adminAccount.addr, - // adminAccount.signer - // ); - - // const oldBoxBeforeTransfer = await algodClient - // .getApplicationBoxByName( - // infrastructureID, - // decodeAddress(oldOwner.address).publicKey - // ) - // .do(); - - // const transferResult = await SubtopiaClient.transferSubscriptionPass( - // { - // newOwnerAddress: newOwner.address, - // oldOwner: { - // address: oldOwner.address, - // signer: oldOwner.signer, - // }, - // smiID: infrastructureID, - // subID: Number(result.returnValue), - // }, - // { client: algodClient } - // ); - - // // Assert - // await expect( - // algodClient - // .getApplicationBoxByName( - // infrastructureID, - // decodeAddress(oldOwner.address).publicKey - // ) - // .do() - // ).rejects.toThrowError(); - // const newBoxAfterTransfer = algodClient.getApplicationBoxByName( - // infrastructureID, - // decodeAddress(oldOwner.address).publicKey - // ); - // expect(transferResult).toBeDefined(); - // expect(oldBoxBeforeTransfer).toBeDefined(); - // expect(newBoxAfterTransfer).toBeDefined(); - // }, - // { timeout: 1e6 } - // ); - - // it( - // "should correctly unsubscribe/delete purchased Subscription", - // async () => { - // // Setup - // const { dummyRegistryId } = await setupDummyRegistry(); - - // const response = await SubtopiaAdminClient.addInfrastructure({ - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // smrID: dummyRegistryId, - // name: "Cool infrastructure", - // price: 1, - // client: algodClient, - // subType: SubscriptionType.UNLIMITED, - // maxSubs: 0, - // coinID: 0, - // }); - // const infrastructureID = Number(response.returnValue); - - // const subscriber = await getRandomAccount( - // algodClient, - // adminAccount.addr, - // adminAccount.signer - // ); - - // const randomExpirationType = getRandomElement( - // TIME_BASED_EXPIRATION_TYPES - // ); - // const result = await SubtopiaClient.subscribe( - // { - // subscriber: { - // address: subscriber.address, - // signer: subscriber.signer, - // }, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // expirationType: randomExpirationType, - // }, - // { - // client: algodClient, - // } - // ); - - // // Test - // const boxContent = await SubtopiaClient.getSubscriptionRecordForAccount( - // algodClient, - // subscriber.address, - // infrastructureID - // ); - - // const deleteResult = await SubtopiaClient.unsubscribe( - // { - // subscriber: { - // address: subscriber.address, - // signer: subscriber.signer, - // }, - // smiID: infrastructureID, - // }, - // { - // client: algodClient, - // } - // ); - - // // Assert - // expect(boxContent.subID).toBe(Number(result.returnValue)); - // expect(deleteResult.returnValue).toBe(result.returnValue); - // await expect( - // algodClient - // .getApplicationBoxByName( - // infrastructureID, - // decodeAddress(subscriber.address).publicKey - // ) - // .do() - // ).rejects.toThrowError(); - // expect(deleteResult).toBeDefined(); - // expect(deleteResult.txID).toBeDefined(); - // }, - // { timeout: 1e6 } - // ); - - // it( - // "should correctly transfer SMI ownership to new creator and claim", - // async () => { - // // Setup - // const { dummyRegistryId } = await setupDummyRegistry(); - - // const response = await SubtopiaAdminClient.addInfrastructure({ - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // smrID: dummyRegistryId, - // name: "Cool infrastructure", - // price: 1, - // client: algodClient, - // subType: SubscriptionType.UNLIMITED, - // maxSubs: 0, - // coinID: 0, - // }); - // const infrastructureID = Number(response.returnValue); - - // // Test - // const newOwner = await getRandomAccount( - // algodClient, - // adminAccount.addr, - // adminAccount.signer - // ); - - // const transferResult = await SubtopiaAdminClient.transferInfrastructure({ - // client: algodClient, - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // newCreatorAddress: newOwner.address, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // }); - - // const boxContent = - // await SubtopiaAdminClient.getPendingTransferRecordForAccount( - // algodClient, - // newOwner.address, - // dummyRegistryId - // ); - - // await SubtopiaAdminClient.claimInfrastructure({ - // client: algodClient, - // creator: { address: newOwner.address, signer: newOwner.signer }, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // }); - - // // Assert - // const expectedLocker = await getLocker( - // algodClient, - // newOwner.address, - // dummyRegistry.appAddress - // ); - - // expect(boxContent).toBeDefined(); - // expect(boxContent?.smiID).toBe(infrastructureID); - // expect(boxContent?.locker).toBe(expectedLocker.lsig.address()); - // expect( - // await SubtopiaAdminClient.getPendingTransferRecordForAccount( - // algodClient, - // newOwner.address, - // dummyRegistryId - // ) - // ).toBe(undefined); - // expect(transferResult.txID).toBeDefined(); - // }, - // { timeout: 1e6 } - // ); - - // it( - // "should correctly transfer SMI ownership to new creator and claim", - // async () => { - // // Setup - // const { dummyRegistryId } = await setupDummyRegistry(); - // const randomAsset = await generateRandomAsset(algodClient, adminAccount); - - // const response = await SubtopiaAdminClient.addInfrastructure({ - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // smrID: dummyRegistryId, - // name: "Cool infrastructure", - // price: 1, - // client: algodClient, - // subType: SubscriptionType.UNLIMITED, - // maxSubs: 0, - // coinID: randomAsset.index, - // }); - // const infrastructureID = Number(response.returnValue); + it( + "should correctly add and transfer infrastructure", + async () => { + const subtopiaRegistryClient = await SubtopiaRegistryClient.init( + algodClient, + creatorSignerAccount, + ChainType.TESTNET + ); - // // Test - // const newOwner = await getRandomAccount( - // algodClient, - // adminAccount.addr, - // adminAccount.signer - // ); + const newOwner = bobTestAccount; - // const transferResult = await SubtopiaAdminClient.transferInfrastructure({ - // client: algodClient, - // creator: { address: adminAccount.addr, signer: adminAccount.signer }, - // newCreatorAddress: newOwner.address, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // }); + let lockerID = await SubtopiaRegistryClient.getLocker({ + registryID: subtopiaRegistryClient.appID, + algodClient: algodClient, + ownerAddress: creatorAccount.addr, + }); + if (lockerID === undefined) { + const response = await subtopiaRegistryClient.createLocker({ + creator: creatorSignerAccount, + lockerType: LockerType.CREATOR, + }); + lockerID = response.lockerID; + } - // const boxContent = - // await SubtopiaAdminClient.getPendingTransferRecordForAccount( - // algodClient, - // newOwner.address, - // dummyRegistryId - // ); + // Test + const response = await subtopiaRegistryClient.createInfrastructure({ + productName: "Hooli", + subscriptionName: "Pro", + price: 1, + subType: SubscriptionType.TIME_BASED, + maxSubs: 0, + coinID: 0, + lockerID: lockerID, + }); - // await SubtopiaAdminClient.claimInfrastructure({ - // client: algodClient, - // creator: { address: newOwner.address, signer: newOwner.signer }, - // smiID: infrastructureID, - // smrID: dummyRegistryId, - // }); + expect(response.infrastructureID).toBeGreaterThan(0); - // // Assert - // const expectedLocker = await getLocker( - // algodClient, - // newOwner.address, - // dummyRegistry.appAddress - // ); + const transferResponse = + await subtopiaRegistryClient.transferInfrastructure({ + infrastructureID: response.infrastructureID, + newOwnerAddress: newOwner.addr, + }); - // expect(boxContent).toBeDefined(); - // expect(boxContent?.smiID).toBe(infrastructureID); - // expect(boxContent?.locker).toBe(expectedLocker.lsig.address()); - // expect( - // await SubtopiaAdminClient.getPendingTransferRecordForAccount( - // algodClient, - // newOwner.address, - // dummyRegistryId - // ) - // ).toBe(undefined); - // expect(transferResult.txID).toBeDefined(); - // }, - // { timeout: 1e6 } - // ); + expect(transferResponse.txID).toBeDefined(); + }, + { + timeout: 10e6, + } + ); }); diff --git a/tests/utils.ts b/tests/utils.ts index bdd5888..4874222 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -14,17 +14,6 @@ import { normalizePrice, optInAsset } from "../src/utils"; import { AssetMetadata } from "./interfaces"; import { SandboxAccount } from "beaker-ts/dist/types/sandbox/accounts"; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export async function filterAsync(arr: any[], callback: (arg0: any) => any) { - const fail = Symbol(); - return ( - await Promise.all( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - arr.map(async (item: any) => ((await callback(item)) ? item : fail)) - ) - ).filter((i) => i !== fail); -} - export async function getRandomAccount( client: Algodv2, funderAddress: string, @@ -47,14 +36,11 @@ export async function getRandomAccount( await atc.execute(client, DEFAULT_AWAIT_ROUNDS); if (asset) { - await optInAsset( - client, - { - address: randomAccount.addr, - signer: makeBasicAccountTransactionSigner(randomAccount), - }, - asset.index - ); + await optInAsset({ + client: client, + account: { signer: funderSigner, addr: randomAccount.addr }, + assetID: asset.index, + }); atc = new AtomicTransactionComposer(); atc.addTransaction({ diff --git a/vitest.config.ts b/vitest.config.ts index cd11553..35cb289 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -6,5 +6,6 @@ export default defineConfig({ provider: "c8", reporter: ["text", "json", "html"], }, + hookTimeout: 10_000_000, }, }); From 3ff25b5b4e29015ad248810892352d8b5f15b8af Mon Sep 17 00:00:00 2001 From: Altynbek Orumbayev Date: Thu, 31 Aug 2023 02:46:02 +0200 Subject: [PATCH 4/7] refactor: extra tests --- .github/auto_assign.yml | 2 +- CHANGELOG.md | 43 ++---- README.md | 6 +- codecov.yml | 2 +- package.json | 3 +- src/clients/SubtopiaClient.ts | 199 +++++++++++++++++++++----- src/clients/SubtopiaRegistryClient.ts | 9 +- src/constants/index.ts | 1 - src/enums/index.ts | 7 +- src/index.ts | 75 +--------- src/interfaces/index.ts | 162 +-------------------- src/utils/index.ts | 22 ++- tests/subtopia.test.ts | 84 +++++++++-- 13 files changed, 273 insertions(+), 342 deletions(-) diff --git a/.github/auto_assign.yml b/.github/auto_assign.yml index 7aab670..21904db 100644 --- a/.github/auto_assign.yml +++ b/.github/auto_assign.yml @@ -4,7 +4,7 @@ addReviewers: true # Set to true to add assignees to pull requests -addAssignees: 'author' +addAssignees: "author" # A list of reviewers to be added to pull requests (GitHub user name) reviewers: diff --git a/CHANGELOG.md b/CHANGELOG.md index e6c1d88..ffccd4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,86 +1,73 @@ ## [2.0.1](https://github.com/subtopia-algo/subtopia-js/compare/v2.0.0...v2.0.1) (2023-05-14) - ### Bug Fixes -* bumping versions ([9cc49c2](https://github.com/subtopia-algo/subtopia-js/commit/9cc49c27680b2ac3efdc6db7d0b57d074acd1af5)) +- bumping versions ([9cc49c2](https://github.com/subtopia-algo/subtopia-js/commit/9cc49c27680b2ac3efdc6db7d0b57d074acd1af5)) # [2.0.0](https://github.com/subtopia-algo/subtopia-js/compare/v1.0.8...v2.0.0) (2023-04-13) - -* Discounts (#11) ([9eeedb7](https://github.com/subtopia-algo/subtopia-js/commit/9eeedb72e7fa5eb49b2209ece88241408866a878)), closes [#11](https://github.com/subtopia-algo/subtopia-js/issues/11) - +- Discounts (#11) ([9eeedb7](https://github.com/subtopia-algo/subtopia-js/commit/9eeedb72e7fa5eb49b2209ece88241408866a878)), closes [#11](https://github.com/subtopia-algo/subtopia-js/issues/11) ### BREAKING CHANGES -* ExpirationType parameter. Discounts feature support +- duration parameter. Discounts feature support ## [1.0.8](https://github.com/subtopia-algo/subtopia-js/compare/v1.0.7...v1.0.8) (2023-03-29) - ### Bug Fixes -* **deps:** update dependency beaker-ts to ^0.1.0 ([#6](https://github.com/subtopia-algo/subtopia-js/issues/6)) ([ce04287](https://github.com/subtopia-algo/subtopia-js/commit/ce04287d36d8df89fc18cce598042a5e1acf6d77)) +- **deps:** update dependency beaker-ts to ^0.1.0 ([#6](https://github.com/subtopia-algo/subtopia-js/issues/6)) ([ce04287](https://github.com/subtopia-algo/subtopia-js/commit/ce04287d36d8df89fc18cce598042a5e1acf6d77)) ## [1.0.7](https://github.com/subtopia-algo/subtopia-js/compare/v1.0.6...v1.0.7) (2023-03-29) - ### Bug Fixes -* typo and pr test ([#5](https://github.com/subtopia-algo/subtopia-js/issues/5)) ([417db29](https://github.com/subtopia-algo/subtopia-js/commit/417db296852c6dfe972315b81fe95eed6534ac8f)) +- typo and pr test ([#5](https://github.com/subtopia-algo/subtopia-js/issues/5)) ([417db29](https://github.com/subtopia-algo/subtopia-js/commit/417db296852c6dfe972315b81fe95eed6534ac8f)) ## [1.0.6](https://github.com/subtopia-algo/subtopia-js/compare/v1.0.5...v1.0.6) (2023-03-29) - ### Bug Fixes -* testing ci ([6f65550](https://github.com/subtopia-algo/subtopia-js/commit/6f6555071fb4f54694488d130fc72a3c7fb048d8)) -* testing ci ([221ee41](https://github.com/subtopia-algo/subtopia-js/commit/221ee416b154bf9b81213c02e3330166675200d7)) +- testing ci ([6f65550](https://github.com/subtopia-algo/subtopia-js/commit/6f6555071fb4f54694488d130fc72a3c7fb048d8)) +- testing ci ([221ee41](https://github.com/subtopia-algo/subtopia-js/commit/221ee416b154bf9b81213c02e3330166675200d7)) ## [1.0.5](https://github.com/subtopia-algo/subtopia-js/compare/v1.0.4...v1.0.5) (2023-03-29) - ### Bug Fixes -* testing ci ([de9917a](https://github.com/subtopia-algo/subtopia-js/commit/de9917a636ce82cf6a0e1035cfe26657795c4a95)) +- testing ci ([de9917a](https://github.com/subtopia-algo/subtopia-js/commit/de9917a636ce82cf6a0e1035cfe26657795c4a95)) ## [1.0.4](https://github.com/subtopia-algo/subtopia-js/compare/v1.0.3...v1.0.4) (2023-03-29) - ### Bug Fixes -* testing ci ([b712a05](https://github.com/subtopia-algo/subtopia-js/commit/b712a058794e5ceb175dcd78c29cdff9fb962bf8)) +- testing ci ([b712a05](https://github.com/subtopia-algo/subtopia-js/commit/b712a058794e5ceb175dcd78c29cdff9fb962bf8)) ## [1.0.3](https://github.com/subtopia-algo/subtopia-js/compare/v1.0.2...v1.0.3) (2023-03-29) - ### Bug Fixes -* testing ci ([3fdd4d1](https://github.com/subtopia-algo/subtopia-js/commit/3fdd4d1dec846cbdbf3c54d04e9561e300eb2667)) +- testing ci ([3fdd4d1](https://github.com/subtopia-algo/subtopia-js/commit/3fdd4d1dec846cbdbf3c54d04e9561e300eb2667)) ## [1.0.2](https://github.com/subtopia-algo/subtopia-js/compare/v1.0.1...v1.0.2) (2023-03-29) - ### Bug Fixes -* bumping version ([f88cc80](https://github.com/subtopia-algo/subtopia-js/commit/f88cc80b68a98fb436b3610255bb636158128912)) +- bumping version ([f88cc80](https://github.com/subtopia-algo/subtopia-js/commit/f88cc80b68a98fb436b3610255bb636158128912)) ## [1.0.1](https://github.com/subtopia-algo/subtopia-js/compare/v1.0.0...v1.0.1) (2023-03-29) - ### Bug Fixes -* bumping version ([b243405](https://github.com/subtopia-algo/subtopia-js/commit/b2434052ef6059f6ce5fbdfcddf4df020cff41a8)) +- bumping version ([b243405](https://github.com/subtopia-algo/subtopia-js/commit/b2434052ef6059f6ce5fbdfcddf4df020cff41a8)) # 1.0.0 (2023-03-29) - ### Bug Fixes -* bumping version ([aec5725](https://github.com/subtopia-algo/subtopia-js/commit/aec5725df34a1a60be02435488d0b8b21964fb9c)) -* bumping version ([540ac32](https://github.com/subtopia-algo/subtopia-js/commit/540ac32dd3d286dd452f6257b7025e8e16ed96b1)) - +- bumping version ([aec5725](https://github.com/subtopia-algo/subtopia-js/commit/aec5725df34a1a60be02435488d0b8b21964fb9c)) +- bumping version ([540ac32](https://github.com/subtopia-algo/subtopia-js/commit/540ac32dd3d286dd452f6257b7025e8e16ed96b1)) ### Features -* initial setup ([3cb3f4d](https://github.com/subtopia-algo/subtopia-js/commit/3cb3f4da47b04a8ced8f3eef86254a8bc7194850)) +- initial setup ([3cb3f4d](https://github.com/subtopia-algo/subtopia-js/commit/3cb3f4da47b04a8ced8f3eef86254a8bc7194850)) diff --git a/README.md b/README.md index ee99fff..8109660 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ const response = await SubtopiaClient.subscribe( { subscriber: { address: {PUT_WALLET_ADDRESS}, signer: {PUT_WALLET_SIGNER} }, smiID: { PUT_PRODUCT_ID_HERE }, // number - the ID of the SMI instance you want to subscribe to - expirationType: { PUT_EXPIRATION_TYPE_HERE }, // pick duration from SubscriptionExpirationType enum. If there is a discount available for this duration, it will be auto applied. + duration: { PUT_EXPIRATION_TYPE_HERE }, // pick duration from DurationType enum. If there is a discount available for this duration, it will be auto applied. }, { client: {PUT_ALGOD_INSTANCE_HERE} // object of type algosdk.Algodv2 ); @@ -138,7 +138,7 @@ const discount = await SubtopiaClient.createDiscount( creator: { address: {PUT_WALLET_ADDRESS}, signer: {PUT_WALLET_SIGNER} }, smiID: { PUT_PRODUCT_ID_HERE }, // number - the ID of the SMI instance you want to subscribe to discount: { - expirationType: SubscriptionExpirationType // number - the type of expiration to apply. Also serves as static id for the discount. + duration: DurationType // number - the type of expiration to apply. Also serves as static id for the discount. discountType: {PUT_DISCOUNT_TYPE_HERE} // number - the type of discount to apply. FIXED or PERCENTAGE discountValue: {PUT_DISCOUNT_VALUE_HERE} // number - the discount to be deducted from the subscription price expiresIn: {PUT_EXPIRATION_TIME_HERE} // (Optional) Set 0 for discount to never expire. Else set number of seconds to append to unix timestamp at time of creation. @@ -181,7 +181,7 @@ const deleteResult = await SubtopiaClient.deleteDiscount( signer: { PUT_SUBSCRIBER_SIGNER }, }, smiID: { PUT_INFRASTRUCTURE_ID }, - expirationType: { PUT_EXPIRATION_TYPE_HERE }, + duration: { PUT_EXPIRATION_TYPE_HERE }, }, { client: { PUT_ALGOD_CLIENT }, diff --git a/codecov.yml b/codecov.yml index ff0d659..a790089 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,2 +1,2 @@ ignore: - - "src/contracts/*" + - "src/contracts/*" diff --git a/package.json b/package.json index 7190500..cf3bac6 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ "format:styles": "stylelint ./**/*.{css,scss} --fix", "docs": "npx typedoc src/index.ts --excludePrivate --excludeExternals --exclude '**/adminClient.ts'", "commit": "cz", - "release": "semantic-release" + "release": "semantic-release", + "pre-commit": "npm run lint:scripts && npm run format:scripts && npm run test:integration" }, "dependencies": { "@algorandfoundation/algokit-utils": "^2.3.2", diff --git a/src/clients/SubtopiaClient.ts b/src/clients/SubtopiaClient.ts index 37c5ac4..f3a51af 100644 --- a/src/clients/SubtopiaClient.ts +++ b/src/clients/SubtopiaClient.ts @@ -21,8 +21,8 @@ import { calculateSmiCreationMbr, calculateSmlCreationMbr, calculateRegistryLockerBoxCreateMbr, - calculateInfrastructureDiscountBoxCreateMbr, - calculateInfrastructureSubscriptionBoxCreateMbr, + calculateProductDiscountBoxCreateMbr, + calculateProductSubscriptionBoxCreateMbr, } from "../utils"; import { getAssetByID } from "../utils"; import { @@ -34,7 +34,7 @@ import { } from "../constants"; import { PriceNormalizationType, - SubscriptionExpirationType, + DurationType, DiscountType, Duration, } from "../enums"; @@ -48,13 +48,13 @@ import { SubtopiaRegistryClient } from "./SubtopiaRegistryClient"; import { ApplicationSpec, AssetMetadata, - RawDiscount, + DiscountRecord, SubscriptionRecord, } from "interfaces"; -const encoder = new TextEncoder(); - export class SubtopiaClient { + productName: string; + subscriptionName: string; algodClient: algosdk.Algodv2; creator: TransactionSignerAccount; price: number; @@ -67,6 +67,8 @@ export class SubtopiaClient { private constructor({ algodClient, + productName, + subscriptionName, creator, appID, appAddress, @@ -77,6 +79,8 @@ export class SubtopiaClient { version, }: { algodClient: AlgodClient; + productName: string; + subscriptionName: string; creator: TransactionSignerAccount; appSpec: ApplicationSpec; appID: number; @@ -87,6 +91,8 @@ export class SubtopiaClient { version: string; }) { this.algodClient = algodClient; + this.productName = productName; + this.subscriptionName = subscriptionName; this.creator = creator; this.appID = appID; this.appAddress = appAddress; @@ -121,6 +127,8 @@ export class SubtopiaClient { const productAddress = getApplicationAddress(productID); const productPrice = productGlobalState.price.value as number; const productSpec = await getAppById(productID, algodClient); + const productName = String(productGlobalState.product_name.value); + const subscriptionName = String(productGlobalState.subscription_name.value); const versionAtc = new AtomicTransactionComposer(); versionAtc.addMethodCall({ @@ -145,6 +153,8 @@ export class SubtopiaClient { algodClient, creator, appID: productID, + productName: productName, + subscriptionName: subscriptionName, appAddress: productAddress, appSpec: { approval: productSpec.params.approvalProgram, @@ -210,10 +220,10 @@ export class SubtopiaClient { } public async getDiscount({ - expirationType, + duration, }: { - expirationType: SubscriptionExpirationType; - }): Promise { + duration: DurationType; + }): Promise { const getDiscountAtc = new AtomicTransactionComposer(); getDiscountAtc.addMethodCall({ appID: this.appID, @@ -226,17 +236,37 @@ export class SubtopiaClient { desc: "The duration of the discount.", }, ], - returns: { type: "uint64" }, + returns: { type: "(uint64,uint64,uint64,uint64,uint64,uint64)" }, }), - methodArgs: [expirationType.valueOf()], + methodArgs: [duration.valueOf()], + boxes: [ + { + appIndex: this.appID, + name: encodeUint64(duration.valueOf()), + }, + ], sender: this.creator.addr, signer: this.creator.signer, suggestedParams: await getParamsWithFeeCount(this.algodClient, 1), }); const response = await getDiscountAtc.simulate(this.algodClient); + const boxContent: Array = ( + response.methodResults[0].returnValue?.valueOf() as Array + ).map((value) => Number(value)); - return response.methodResults[0].returnValue?.valueOf() as RawDiscount; + if (boxContent.length !== 6) { + throw new Error("Invalid subscription record"); + } + + return { + duration: boxContent[0], + discountType: boxContent[1], + discountValue: boxContent[2], + expiresAt: boxContent[3] === 0 ? undefined : new Date(boxContent[3]), + createdAt: new Date(boxContent[4]), + totalClaims: boxContent[5], + }; } public async createDiscount({ @@ -250,7 +280,7 @@ export class SubtopiaClient { discountValue: number; expiresIn: number; }): Promise<{ - txId: string; + txID: string; }> { const createDiscountAtc = new AtomicTransactionComposer(); createDiscountAtc.addMethodCall({ @@ -295,7 +325,7 @@ export class SubtopiaClient { txn: makePaymentTxnWithSuggestedParamsFromObject({ from: this.creator.addr, to: this.appAddress, - amount: calculateInfrastructureDiscountBoxCreateMbr(), + amount: calculateProductDiscountBoxCreateMbr(), suggestedParams: await getParamsWithFeeCount(this.algodClient, 0), }), signer: this.creator.signer, @@ -304,30 +334,70 @@ export class SubtopiaClient { boxes: [ { appIndex: this.appID, - name: encoder.encode(duration.valueOf().toString()), + name: encodeUint64(duration.valueOf()), }, ], sender: this.creator.addr, signer: this.creator.signer, - suggestedParams: await getParamsWithFeeCount(this.algodClient, 1), + suggestedParams: await getParamsWithFeeCount(this.algodClient, 2), }); const response = await createDiscountAtc.execute(this.algodClient, 10); return { - txId: response.txIDs.pop() as string, + txID: response.txIDs.pop() as string, + }; + } + + public async deleteDiscount({ + duration, + }: { + duration: DurationType; + }): Promise<{ + txID: string; + }> { + const deleteDiscountAtc = new AtomicTransactionComposer(); + deleteDiscountAtc.addMethodCall({ + appID: this.appID, + method: new ABIMethod({ + name: "delete_discount", + args: [ + { + type: "uint64", + name: "duration", + desc: "The duration of the discount.", + }, + ], + returns: { type: "void" }, + }), + methodArgs: [duration.valueOf()], + boxes: [ + { + appIndex: this.appID, + name: encodeUint64(duration.valueOf()), + }, + ], + sender: this.creator.addr, + signer: this.creator.signer, + suggestedParams: await getParamsWithFeeCount(this.algodClient, 2), + }); + + const response = await deleteDiscountAtc.execute(this.algodClient, 10); + + return { + txID: response.txIDs.pop() as string, }; } public async createSubscription({ subscriber, - expirationType, + duration, }: { subscriber: TransactionSignerAccount; - expirationType: SubscriptionExpirationType; + duration: DurationType; }): Promise<{ - txId: string; - subscriptionId: number; + txID: string; + subscriptionID: number; }> { const oracleAdminState = ( await getAppGlobalState(this.oracleID, this.algodClient) @@ -398,7 +468,7 @@ export class SubtopiaClient { }), methodArgs: [ subscriber.addr, - expirationType.valueOf(), + duration.valueOf(), creatorLockerId, this.oracleID, { @@ -406,7 +476,7 @@ export class SubtopiaClient { from: subscriber.addr, to: this.appAddress, amount: - calculateInfrastructureSubscriptionBoxCreateMbr(subscriber.addr) + + calculateProductSubscriptionBoxCreateMbr(subscriber.addr) + algosToMicroalgos(MIN_APP_OPTIN_MBR), suggestedParams: await getParamsWithFeeCount(this.algodClient, 0), }), @@ -459,7 +529,7 @@ export class SubtopiaClient { }, { appIndex: this.appID, - name: encodeUint64(expirationType.valueOf()), + name: encodeUint64(duration.valueOf()), }, ], sender: subscriber.addr, @@ -473,8 +543,8 @@ export class SubtopiaClient { const response = await createSubscriptionAtc.execute(this.algodClient, 10); return { - txId: response.txIDs.pop() as string, - subscriptionId: Number(response.methodResults[0].returnValue), + txID: response.txIDs.pop() as string, + subscriptionID: Number(response.methodResults[0].returnValue), }; } @@ -487,7 +557,7 @@ export class SubtopiaClient { newSubscriberAddress: string; subscriptionID: number; }): Promise<{ - txId: string; + txID: string; }> { const transferSubscriptionAtc = new AtomicTransactionComposer(); transferSubscriptionAtc.addMethodCall({ @@ -530,7 +600,7 @@ export class SubtopiaClient { ); return { - txId: response.txIDs.pop() as string, + txID: response.txIDs.pop() as string, }; } @@ -541,7 +611,7 @@ export class SubtopiaClient { subscriber: TransactionSignerAccount; subscriptionID: number; }): Promise<{ - txId: string; + txID: string; }> { const claimSubscriptionAtc = new AtomicTransactionComposer(); claimSubscriptionAtc.addMethodCall({ @@ -572,7 +642,7 @@ export class SubtopiaClient { const response = await claimSubscriptionAtc.execute(this.algodClient, 10); return { - txId: response.txIDs.pop() as string, + txID: response.txIDs.pop() as string, }; } @@ -583,7 +653,7 @@ export class SubtopiaClient { subscriber: TransactionSignerAccount; subscriptionID: number; }): Promise<{ - txId: string; + txID: string; }> { const deleteSubscriptionAtc = new AtomicTransactionComposer(); deleteSubscriptionAtc.addMethodCall({ @@ -614,22 +684,56 @@ export class SubtopiaClient { const response = await deleteSubscriptionAtc.execute(this.algodClient, 10); return { - txId: response.txIDs.pop() as string, + txID: response.txIDs.pop() as string, }; } + public async isSubscriber({ + subscriberAddress, + }: { + subscriberAddress: string; + }): Promise { + const isSubscriberAtc = new AtomicTransactionComposer(); + isSubscriberAtc.addMethodCall({ + appID: this.appID, + method: new ABIMethod({ + name: "is_subscriber", + args: [ + { + type: "address", + name: "subscriber", + desc: "The subscriber address.", + }, + ], + returns: { type: "uint64" }, + }), + methodArgs: [subscriberAddress], + sender: this.creator.addr, + signer: this.creator.signer, + boxes: [ + { + appIndex: this.appID, + name: decodeAddress(subscriberAddress).publicKey, + }, + ], + suggestedParams: await getParamsWithFeeCount(this.algodClient, 1), + }); + + const response = await isSubscriberAtc.simulate(this.algodClient); + + return Boolean(response.methodResults[0].returnValue); + } + public async getSubscription({ algodClient, - productID, subscriberAddress, }: { algodClient: AlgodClient; - productID: number; subscriberAddress: string; }): Promise { const getSubscriptionAtc = new AtomicTransactionComposer(); getSubscriptionAtc.addMethodCall({ - appID: productID, + appID: this.appID, method: new ABIMethod({ name: "get_subscription", args: [ @@ -639,16 +743,35 @@ export class SubtopiaClient { desc: "The subscriber address.", }, ], - returns: { type: "uint64" }, + returns: { type: "(uint64,uint64,uint64,uint64,uint64)" }, }), methodArgs: [subscriberAddress], - sender: subscriberAddress, + sender: this.creator.addr, signer: this.creator.signer, + boxes: [ + { + appIndex: this.appID, + name: decodeAddress(subscriberAddress).publicKey, + }, + ], suggestedParams: await getParamsWithFeeCount(algodClient, 1), }); const response = await getSubscriptionAtc.simulate(algodClient); + const boxContent: Array = ( + response.methodResults[0].returnValue?.valueOf() as Array + ).map((value) => Number(value)); + + if (boxContent.length !== 5) { + throw new Error("Invalid subscription record"); + } - return response.methodResults[0].returnValue?.valueOf() as SubscriptionRecord; + return { + subType: boxContent[0], + subID: boxContent[1], + createdAt: new Date(boxContent[2]), + expiresAt: boxContent[3] === 0 ? undefined : new Date(boxContent[3]), + duration: boxContent[4], + }; } } diff --git a/src/clients/SubtopiaRegistryClient.ts b/src/clients/SubtopiaRegistryClient.ts index d026590..643bc4c 100644 --- a/src/clients/SubtopiaRegistryClient.ts +++ b/src/clients/SubtopiaRegistryClient.ts @@ -140,7 +140,7 @@ export class SubtopiaRegistryClient { }); } - public async getInfrastructureCreationFee(coinID = 0): Promise { + public async getProductCreationFee(coinID = 0): Promise { return ( algosToMicroalgos(MIN_APP_OPTIN_MBR) + algosToMicroalgos(MIN_APP_BALANCE_MBR) + @@ -149,7 +149,7 @@ export class SubtopiaRegistryClient { ); } - public async getInfrastructureCreationPlatformFee( + public async getProductCreationPlatformFee( priceInCents: number ): Promise { const computePlatformFeeAtc = new AtomicTransactionComposer(); @@ -384,6 +384,7 @@ export class SubtopiaRegistryClient { boxes: boxes, sender: this.creator.addr, signer: this.creator.signer, + appForeignApps: newOwnerLockerId ? [newOwnerLockerId] : undefined, suggestedParams: await getParamsWithFeeCount( this.algodClient, newOwnerLockerId ? 10 : 11 @@ -434,8 +435,8 @@ export class SubtopiaRegistryClient { // @ts-ignore oracleAdminState.valueRaw ); - const feeAmount = await this.getInfrastructureCreationFee(coinID); - const platformFeeAmount = await this.getInfrastructureCreationPlatformFee( + const feeAmount = await this.getProductCreationFee(coinID); + const platformFeeAmount = await this.getProductCreationPlatformFee( PRODUCTCREATION_PLATFORM_FEE_CENTS ); diff --git a/src/constants/index.ts b/src/constants/index.ts index 0716eb0..a7021db 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -7,7 +7,6 @@ import { ChainType } from "../enums"; import { AssetMetadata } from "../interfaces"; export const DEFAULT_AWAIT_ROUNDS = 10; -export const SUBTOPIA_CONTRACTS_VERSION = "0.3.0"; export const TESTNET_SUBTOPIA_REGISTRY_ID = 269954941; export const MAINNET_SUBTOPIA_REGISTRY_ID = 269954941; export const SUBTOPIA_REGISTRY_ID = (chainType: ChainType) => { diff --git a/src/enums/index.ts b/src/enums/index.ts index 963c912..38906f5 100644 --- a/src/enums/index.ts +++ b/src/enums/index.ts @@ -8,7 +8,7 @@ export enum SubscriptionType { TIME_BASED = 1, } -export enum SubscriptionExpirationType { +export enum DurationType { UNLIMITED = 0, MONTHLY = 1, QUARTERLY = 2, @@ -29,11 +29,6 @@ export enum PriceNormalizationType { PRETTY = 1, } -export enum SMILifecycle { - ACTIVE = 0, - DELETING = 1, -} - export enum DiscountType { PERCENTAGE = 0, FIXED = 1, diff --git a/src/index.ts b/src/index.ts index 034bd8c..0161e43 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,77 +3,10 @@ // Copyright (C) 2023 Altynbek Orumbayev // ============================================================================= -// import { SubtopiaClient } from "./clients/SubtopiaClient"; -// import { SubtopiaAdminClient } from "./clients/SubtopiaAdminClient"; import { normalizePrice, optInAsset, optOutAsset } from "./utils"; -import { SUBTOPIA_CONTRACTS_VERSION } from "./constants"; -import { - PriceNormalizationType, - SubscriptionType, - SubscriptionExpirationType, - DiscountType, - SMILifecycle, -} from "./enums"; -import { - Locker, - SMRGetRegistryParams, - SMIClaimRevenueParams, - SMIMarkForDeletionParams, - SMRAddInfrastructureParams, - SMRClaimInfrastructureParams, - SMRTransferInfrastructureParams, - SMIInputParams, - SMIDeleteSubscriptionParams, - SMIClaimSubscriptionParams, - User, - SMIState, - ChainMethodParams, - SMISubscribeParams, - SMITransferSubscriptionParams, - SMIUnsubscribeParams, - SubscriptionRecord, - DiscountRecord, - DiscountMetadata, - BaseDiscountRecord, - SMICreateDiscountParams, - SMIDeleteDiscountParams, - AssetMetadata, -} from "./interfaces"; +import * as enums from "./enums"; +import * as interfaces from "./interfaces"; -export { - PriceNormalizationType, - SubscriptionType, - SubscriptionExpirationType, - DiscountType, - normalizePrice, - SUBTOPIA_CONTRACTS_VERSION, - SMILifecycle, - optInAsset, - optOutAsset, -}; +export { enums, normalizePrice, optInAsset, optOutAsset }; -export type { - Locker, - SMRGetRegistryParams, - SMIClaimRevenueParams, - SMIMarkForDeletionParams, - SMRAddInfrastructureParams, - SMRClaimInfrastructureParams, - SMRTransferInfrastructureParams, - SMIInputParams, - SMIDeleteSubscriptionParams, - SMIClaimSubscriptionParams, - User, - SMIState, - ChainMethodParams, - SMISubscribeParams, - SMITransferSubscriptionParams, - SMIUnsubscribeParams, - SubscriptionRecord, - DiscountRecord, - DiscountMetadata, - BaseDiscountRecord, - SMICreateDiscountParams, - SMIDeleteDiscountParams, - AssetMetadata, -}; +export type { interfaces }; diff --git a/src/interfaces/index.ts b/src/interfaces/index.ts index ece8296..071fe8c 100644 --- a/src/interfaces/index.ts +++ b/src/interfaces/index.ts @@ -3,27 +3,10 @@ // Copyright (C) 2023 Altynbek Orumbayev // ============================================================================= -import { Algodv2, LogicSigAccount, TransactionSigner } from "algosdk"; -import AlgodClient from "algosdk/dist/types/client/v2/algod/algod"; -import { - DiscountType, - SMILifecycle, - SubscriptionExpirationType, - SubscriptionType, -} from "../enums"; -import { TransactionSignerAccount } from "@algorandfoundation/algokit-utils/types/account"; +import { DiscountType, DurationType, SubscriptionType } from "../enums"; // === Boxes === -export interface RawDiscount { - duration: bigint; - discount_type: bigint; - discount_value: bigint; - expires_at: bigint; - created_at: bigint; - total_claims: bigint; -} - export interface ApplicationSpec { approval: Uint8Array; clear: Uint8Array; @@ -36,13 +19,13 @@ export interface ApplicationSpec { export interface SubscriptionRecord { createdAt: Date; expiresAt: Date | undefined; - expirationType: SubscriptionExpirationType; + duration: DurationType; subID: number; subType: SubscriptionType; } export interface BaseDiscountRecord { - expirationType: SubscriptionExpirationType; + duration: DurationType; discountType: DiscountType; discountValue: number; } @@ -52,30 +35,8 @@ export interface DiscountRecord extends BaseDiscountRecord { expiresAt: Date | undefined; totalClaims: number; } - -export interface PendingTransferRecord { - locker: string; - smiID: number; -} - // === Common === -export interface Locker { - lsig: LogicSigAccount; - signer: TransactionSigner; - authAddress: string; -} - -export interface LockerRekeyParameters { - client: AlgodClient; - locker: LogicSigAccount; - creatorAddress: string; - creatorSigner: TransactionSigner; - registryAddress: string; - registrySigner: TransactionSigner; - rekeyToAddress: string; -} - export interface AssetMetadata { index: number; creator: string; @@ -84,123 +45,6 @@ export interface AssetMetadata { unitName: string; } -export interface User { - address: string; - signer: TransactionSigner; -} - -export interface ChainMethodParams { - client: Algodv2; - sender?: string; - signer?: TransactionSigner; -} - -export interface SMIInputParams { - name: string; - price: number; - subType: SubscriptionType; - maxSubs: number; - coinID: number; -} - export interface DiscountMetadata extends BaseDiscountRecord { expiresIn?: number; } - -export interface SMICreateDiscountParams { - smiID: number; - creator: User; - discount: DiscountMetadata; - smrID?: number; -} - -export interface SMIDeleteDiscountParams { - smiID: number; - creator: User; - expirationType: SubscriptionExpirationType; - smrID?: number; -} - -// === SMR === - -export interface SMRAddInfrastructureParams extends SMIInputParams { - creator: TransactionSignerAccount; - client: AlgodClient; - smrID?: number; - unitName?: string; - imageUrl?: string; -} - -export interface SMRGetRegistryParams { - client: AlgodClient; - user: User; - smrID?: number; -} - -export interface SMRClaimInfrastructureParams { - creator: User; - smrID?: number; - smiID: number; - client: AlgodClient; -} - -export interface SMRTransferInfrastructureParams - extends SMRClaimInfrastructureParams { - newCreatorAddress: string; -} - -// === SMI === - -export interface SMIState extends SMIInputParams { - smiID: number; - manager: string; - activeSubs: number; - totalSubs: number; - lifecycle: SMILifecycle; - discounts: DiscountRecord[]; - createdAt: Date; - isPendingTransfer?: boolean; -} - -export interface SMIUnsubscribeParams { - subscriber: User; - smiID: number; -} - -export interface SMIClaimSubscriptionParams { - smiID: number; - subID: number; - subscriber: User; -} - -export interface SMITransferSubscriptionParams { - newOwnerAddress: string; - oldOwner: User; - subID: number; - smiID: number; -} - -export interface SMISubscribeParams { - smrID?: number; - smiID: number; - expirationType?: SubscriptionExpirationType; - subscriber: User; -} - -export interface SMIMarkForDeletionParams { - smiID: number; - smrID?: number; - user: User; -} - -export interface SMIDeleteSubscriptionParams { - smiID: number; - smrID?: number; - user: User; -} - -export interface SMIClaimRevenueParams { - coinID?: number; - smrID?: number; - user: User; -} diff --git a/src/utils/index.ts b/src/utils/index.ts index 89d4bbe..4d7cf12 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -18,11 +18,7 @@ import algosdk, { import { ApplicationSpec, AssetMetadata } from "../interfaces"; import { DEFAULT_AWAIT_ROUNDS, ALGO_ASSET } from "../constants"; -import { - LockerType, - PriceNormalizationType, - SubscriptionExpirationType, -} from "../enums"; +import { LockerType, PriceNormalizationType, DurationType } from "../enums"; import { APP_PAGE_MAX_SIZE } from "@algorandfoundation/algokit-utils/types/app"; import { TransactionSignerAccount } from "@algorandfoundation/algokit-utils/types/account"; @@ -140,16 +136,14 @@ export async function getParamsWithFeeCount( return params; } -export function expirationTypeToMonths( - expirationType: SubscriptionExpirationType -): number { - if (expirationType === SubscriptionExpirationType.MONTHLY) { +export function durationToMonths(duration: DurationType): number { + if (duration === DurationType.MONTHLY) { return 1; - } else if (expirationType === SubscriptionExpirationType.QUARTERLY) { + } else if (duration === DurationType.QUARTERLY) { return 3; - } else if (expirationType === SubscriptionExpirationType.SEMI_ANNUAL) { + } else if (duration === DurationType.SEMI_ANNUAL) { return 6; - } else if (expirationType === SubscriptionExpirationType.ANNUAL) { + } else if (duration === DurationType.ANNUAL) { return 12; } else { return 1; @@ -199,13 +193,13 @@ export function calculateRegistryLockerBoxCreateMbr( ); } -export function calculateInfrastructureDiscountBoxCreateMbr(): number { +export function calculateProductDiscountBoxCreateMbr(): number { const uint64TypeByteLen = new ABIUintType(64).byteLen(); const discountTypeByteLen = uint64TypeByteLen * 6; // 6 Uint64s in Discount tuple return calculateBoxMbr(uint64TypeByteLen, discountTypeByteLen, "create"); } -export function calculateInfrastructureSubscriptionBoxCreateMbr( +export function calculateProductSubscriptionBoxCreateMbr( subscriberAddress: string ): number { const uint64TypeByteLen = new ABIUintType(64).byteLen(); diff --git a/tests/subtopia.test.ts b/tests/subtopia.test.ts index 47c0944..d4c7c6b 100644 --- a/tests/subtopia.test.ts +++ b/tests/subtopia.test.ts @@ -4,7 +4,7 @@ import { Account, } from "algosdk"; import "dotenv/config"; -import { SubscriptionType, optInAsset, optOutAsset } from "../src/index"; +import { enums, optInAsset, optOutAsset } from "../src/index"; import { it, describe, expect, beforeAll, afterAll } from "vitest"; import { SubtopiaRegistryClient } from "../src/clients/SubtopiaRegistryClient"; @@ -12,7 +12,9 @@ import { SubtopiaClient } from "../src/clients/SubtopiaClient"; import { ChainType, LockerType, - SubscriptionExpirationType, + DurationType, + Duration, + DiscountType, } from "../src/enums"; import { algos, @@ -100,7 +102,7 @@ describe("subtopia", () => { }); it( - "should correctly add infra, create subscription, delete subscription and delete infra", + "should correctly add product, create subscription, delete subscription and delete product", async () => { // Setup const subtopiaRegistryClient = await SubtopiaRegistryClient.init( @@ -127,7 +129,7 @@ describe("subtopia", () => { productName: "Notflix", subscriptionName: "Premium", price: 1, - subType: SubscriptionType.UNLIMITED, + subType: enums.SubscriptionType.UNLIMITED, maxSubs: 0, coinID: 0, lockerID: lockerID, @@ -149,34 +151,49 @@ describe("subtopia", () => { const subscribeResponse = await productClient.createSubscription({ subscriber: subscriberSigner, - expirationType: SubscriptionExpirationType.UNLIMITED, + duration: DurationType.UNLIMITED, }); - expect(subscribeResponse.subscriptionId).toBeGreaterThan(0); + expect(subscribeResponse.subscriptionID).toBeGreaterThan(0); + + const getSubscriptionResponse = await productClient.getSubscription({ + subscriberAddress: subscriberSigner.addr, + algodClient: algodClient, + }); + + expect(getSubscriptionResponse.subID).toBe( + subscribeResponse.subscriptionID + ); + + const isSubscriberResponse = await productClient.isSubscriber({ + subscriberAddress: subscriberSigner.addr, + }); + + expect(isSubscriberResponse).toBe(true); await optInAsset({ client: algodClient, account: subscriberSigner, - assetID: subscribeResponse.subscriptionId, + assetID: subscribeResponse.subscriptionID, }); const claimResponse = await productClient.claimSubscription({ subscriber: subscriberSigner, - subscriptionID: subscribeResponse.subscriptionId, + subscriptionID: subscribeResponse.subscriptionID, }); - expect(claimResponse.txId).toBeDefined(); + expect(claimResponse.txID).toBeDefined(); const transferTxnId = await productClient.transferSubscription({ oldSubscriber: subscriberSigner, newSubscriberAddress: creatorSignerAccount.addr, - subscriptionID: subscribeResponse.subscriptionId, + subscriptionID: subscribeResponse.subscriptionID, }); await optOutAsset({ client: algodClient, account: subscriberSigner, - assetID: subscribeResponse.subscriptionId, + assetID: subscribeResponse.subscriptionID, }); expect(transferTxnId).toBeDefined(); @@ -184,11 +201,11 @@ describe("subtopia", () => { const deleteSubscriptionResponse = await productClient.deleteSubscription( { subscriber: creatorSignerAccount, - subscriptionID: subscribeResponse.subscriptionId, + subscriptionID: subscribeResponse.subscriptionID, } ); - expect(deleteSubscriptionResponse.txId).toBeDefined(); + expect(deleteSubscriptionResponse.txID).toBeDefined(); const content = await getAppGlobalState( response.infrastructureID, @@ -202,7 +219,7 @@ describe("subtopia", () => { ); it( - "should correctly add and transfer infrastructure", + "should correctly add product, create discount, transfer product and delete discount", async () => { const subtopiaRegistryClient = await SubtopiaRegistryClient.init( algodClient, @@ -230,7 +247,7 @@ describe("subtopia", () => { productName: "Hooli", subscriptionName: "Pro", price: 1, - subType: SubscriptionType.TIME_BASED, + subType: enums.SubscriptionType.TIME_BASED, maxSubs: 0, coinID: 0, lockerID: lockerID, @@ -238,6 +255,26 @@ describe("subtopia", () => { expect(response.infrastructureID).toBeGreaterThan(0); + const productClient = await SubtopiaClient.init( + algodClient, + response.infrastructureID, + creatorSignerAccount + ); + const createDiscountResponse = await productClient.createDiscount({ + duration: Duration.MONTH.valueOf(), + discountType: DiscountType.FIXED, + discountValue: 1e6, + expiresIn: 0, + }); + + expect(createDiscountResponse.txID).toBeDefined(); + + const getDiscountResponse = await productClient.getDiscount({ + duration: Duration.MONTH.valueOf(), + }); + + expect(getDiscountResponse.discountValue).toBe(1e6); + const transferResponse = await subtopiaRegistryClient.transferInfrastructure({ infrastructureID: response.infrastructureID, @@ -245,6 +282,23 @@ describe("subtopia", () => { }); expect(transferResponse.txID).toBeDefined(); + + const newOwnerProductClient = await SubtopiaClient.init( + algodClient, + response.infrastructureID, + transactionSignerAccount( + makeBasicAccountTransactionSigner(newOwner), + newOwner.addr + ) + ); + + const deleteDiscountResponse = await newOwnerProductClient.deleteDiscount( + { + duration: Duration.MONTH.valueOf(), + } + ); + + expect(deleteDiscountResponse.txID).toBeDefined(); }, { timeout: 10e6, From ee53a8661b411c5322fa93e4dca29e3146f1a933 Mon Sep 17 00:00:00 2001 From: Altynbek Orumbayev Date: Thu, 31 Aug 2023 02:50:36 +0200 Subject: [PATCH 5/7] chore: minor tweaks --- src/clients/index.ts | 4 ++++ src/index.ts | 15 +++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 src/clients/index.ts diff --git a/src/clients/index.ts b/src/clients/index.ts new file mode 100644 index 0000000..5f9afdf --- /dev/null +++ b/src/clients/index.ts @@ -0,0 +1,4 @@ +import { SubtopiaClient } from "./SubtopiaClient"; +import { SubtopiaRegistryClient } from "./SubtopiaRegistryClient"; + +export { SubtopiaClient, SubtopiaRegistryClient }; diff --git a/src/index.ts b/src/index.ts index 0161e43..ddc8643 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,9 +4,16 @@ // ============================================================================= import { normalizePrice, optInAsset, optOutAsset } from "./utils"; -import * as enums from "./enums"; +import { SubtopiaClient, SubtopiaRegistryClient } from "./clients"; import * as interfaces from "./interfaces"; +import * as enums from "./enums"; -export { enums, normalizePrice, optInAsset, optOutAsset }; - -export type { interfaces }; +export { + SubtopiaClient, + SubtopiaRegistryClient, + normalizePrice, + optInAsset, + optOutAsset, + enums, + interfaces, +}; From b075d75a24beeeeb29ff37c27b0dcc847e5443cc Mon Sep 17 00:00:00 2001 From: Altynbek Orumbayev Date: Fri, 1 Sep 2023 00:36:31 +0200 Subject: [PATCH 6/7] feat: refactoring to support latest iteration of contracts BREAKING CHANGE: new interface --- .github/workflows/ci.yaml | 146 -------------------------- .github/workflows/pr.yaml | 36 +++++++ .github/workflows/release.yaml | 95 +++++++++++++++++ package.json | 8 +- src/clients/SubtopiaRegistryClient.ts | 4 +- src/constants/index.ts | 2 +- 6 files changed, 139 insertions(+), 152 deletions(-) delete mode 100644 .github/workflows/ci.yaml create mode 100644 .github/workflows/pr.yaml create mode 100644 .github/workflows/release.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml deleted file mode 100644 index 6948d50..0000000 --- a/.github/workflows/ci.yaml +++ /dev/null @@ -1,146 +0,0 @@ -name: Check codebase - -on: - push: - branches: - - main - merge_group: - pull_request: - branches: - - main - workflow_dispatch: - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - build: - name: Build - runs-on: ubuntu-latest - steps: - - name: Check out repository - uses: actions/checkout@v3 - - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: 18 - - - name: Install dependencies - run: npm ci - - - name: Run build - run: npm run build - - lint: - name: Linting - runs-on: ubuntu-latest - steps: - - name: Check out repository - uses: actions/checkout@v3 - - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: 18 - - - name: Install dependencies - run: npm ci - - - name: Lint - run: npm run lint:scripts - - unit-tests: - name: Unit tests - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest] - node: [18, 19] - steps: - - name: Check out repository - uses: actions/checkout@v3 - - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node }} - - - uses: docker-practice/actions-setup-docker@master - if: runner.os == 'macOS' - timeout-minutes: 12 - - - name: Install dependencies - run: npm ci - - - name: Run sandbox - run: npm run localnet:start - - - name: Run tests - run: npm run test:integration - - - name: "Upload coverage to Codecov" - uses: codecov/codecov-action@v3 - if: runner.os == 'Linux' && matrix.node == '18' - with: - fail_ci_if_error: true - token: ${{ secrets.CODECOV_TOKEN }} - - deploy-docs: - if: github.ref == 'refs/heads/main' - permissions: write-all - name: Deploy docs - needs: [build, lint, unit-tests] - runs-on: ubuntu-latest - steps: - - name: Check out repository - uses: actions/checkout@v3 - - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: 18 - - - name: Install dependencies - run: npm ci - - - name: Build docs - run: npm run docs - - - name: Deploy 🚀 - uses: JamesIves/github-pages-deploy-action@v4 - with: - branch: gh-pages - commit-message: Refreshing documentation 🚀 - folder: docs # The folder the action should deploy. - - release: - if: github.ref == 'refs/heads/main' - permissions: write-all - name: Release - needs: [build, lint, unit-tests, deploy-docs] - runs-on: ubuntu-latest - steps: - - name: Check out repository - uses: actions/checkout@v3 - with: - fetch-depth: 0 - persist-credentials: false # <--- override default gh token - - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: 18 - - - name: Install dependencies - run: npm ci - - - name: Run build - run: npm run build - - - name: Release - env: - GITHUB_TOKEN: ${{ secrets.CUSTOM_GH_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - run: npm run release diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml new file mode 100644 index 0000000..0c835c5 --- /dev/null +++ b/.github/workflows/pr.yaml @@ -0,0 +1,36 @@ +name: Check codebase + +on: + merge_group: + pull_request: + branches: + - main + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + pull_request: + uses: makerxstudio/shared-config/.github/workflows/node-ci.yml@main + env: + TESTNET_SUBTOPIA_DISPENSER_MNEMONIC: ${{ secrets.TESTNET_SUBTOPIA_DISPENSER_MNEMONIC }} + TESTNET_SUBTOPIA_CREATOR_MNEMONIC: ${{ secrets.TESTNET_SUBTOPIA_CREATOR_MNEMONIC }} + TESTNET_SUBTOPIA_BOB_MNEMONIC: ${{ secrets.TESTNET_SUBTOPIA_BOB_MNEMONIC }} + with: + working-directory: ./ + run-commit-lint: true + run-build: true + node-version: 18.x + lint-script: npm run lint:scripts + test-script: | + npm run test:integration + + curl -Os https://uploader.codecov.io/latest/linux/codecov + chmod +x codecov + ./codecov -t ${{ secrets.CODECOV_TOKEN }} + + pre-test-script: | + pipx install algokit + algokit localnet start + npx --yes wait-on tcp:4001 -t 30000 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..997e6ee --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,95 @@ +name: Publish + +on: + push: + branches: + - main + - release + workflow_dispatch: + +concurrency: release + +permissions: + contents: write + +jobs: + ci: + name: Continuous Integration + uses: makerxstudio/shared-config/.github/workflows/node-ci.yml@main + with: + working-directory: ./ + run-commit-lint: true + run-build: true + node-version: 18.x + lint-script: npm run lint:scripts + test-script: | + npm run test:integration + + curl -Os https://uploader.codecov.io/latest/linux/codecov + chmod +x codecov + ./codecov -t ${{ secrets.CODECOV_TOKEN }} + + pre-test-script: | + pipx install algokit + algokit localnet start + npx --yes wait-on tcp:4001 -t 30000 + + deploy-docs: + permissions: write-all + name: Deploy docs + needs: [ci] + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v3 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 18 + registry-url: "https://npm.pkg.github.com" + scope: "@makerxstudio" + cache: "npm" + cache-dependency-path: ./package-lock.json + + - name: Install dependencies + run: npm ci + + - name: Build docs + run: npm run docs + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4 + with: + branch: gh-pages + commit-message: Refreshing documentation 🚀 + folder: docs # The folder the action should deploy. + + release: + permissions: write-all + name: Release + needs: [deploy-docs] + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + persist-credentials: false # <--- override default gh token + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Install dependencies + run: npm ci + + - name: Run build + run: npm run build + + - name: Release + env: + GITHUB_TOKEN: ${{ secrets.CUSTOM_GH_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + run: npm run release diff --git a/package.json b/package.json index cf3bac6..71eb9e0 100644 --- a/package.json +++ b/package.json @@ -73,10 +73,12 @@ "@semantic-release/github" ], "branches": [ - "main", { - "name": "next", - "prerelease": "rc" + "name": "main", + "prerelease": "beta" + }, + { + "name": "release" } ], "verifyConditions": [ diff --git a/src/clients/SubtopiaRegistryClient.ts b/src/clients/SubtopiaRegistryClient.ts index 643bc4c..fbcd706 100644 --- a/src/clients/SubtopiaRegistryClient.ts +++ b/src/clients/SubtopiaRegistryClient.ts @@ -29,7 +29,7 @@ import { MIN_APP_OPTIN_MBR, MIN_APP_BALANCE_MBR, MIN_ASA_OPTIN_MBR, - PRODUCTCREATION_PLATFORM_FEE_CENTS, + PRODUCT_CREATION_PLATFORM_FEE_CENTS, LOCKER_APPROVAL_KEY, LOCKER_CLEAR_KEY, SUBTOPIA_REGISTRY_ID, @@ -437,7 +437,7 @@ export class SubtopiaRegistryClient { ); const feeAmount = await this.getProductCreationFee(coinID); const platformFeeAmount = await this.getProductCreationPlatformFee( - PRODUCTCREATION_PLATFORM_FEE_CENTS + PRODUCT_CREATION_PLATFORM_FEE_CENTS ); const createInfraAtc = new AtomicTransactionComposer(); diff --git a/src/constants/index.ts b/src/constants/index.ts index a7021db..95a6e0b 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -38,7 +38,7 @@ export const MIN_ASA_CREATE_MBR = 0.1; // ALGO // Platform fees export const SUBSCRIPTION_PLATFORM_FEE_CENTS = 10; -export const PRODUCTCREATION_PLATFORM_FEE_CENTS = 500; +export const PRODUCT_CREATION_PLATFORM_FEE_CENTS = 500; // Algorand minimum transaction fee export const REGISTRY_VERSION = "1.0"; From 995513debb06eee8bf1934cca128419b960a6162 Mon Sep 17 00:00:00 2001 From: Altynbek Orumbayev Date: Fri, 1 Sep 2023 00:43:16 +0200 Subject: [PATCH 7/7] chore: testing ci --- .github/workflows/cicd.yaml | 165 +++++++++++++++++++++++++++++++++ .github/workflows/pr.yaml | 36 ------- .github/workflows/release.yaml | 95 ------------------- 3 files changed, 165 insertions(+), 131 deletions(-) create mode 100644 .github/workflows/cicd.yaml delete mode 100644 .github/workflows/pr.yaml delete mode 100644 .github/workflows/release.yaml diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml new file mode 100644 index 0000000..f5c377a --- /dev/null +++ b/.github/workflows/cicd.yaml @@ -0,0 +1,165 @@ +name: CI / CD + +on: + push: + branches: + - main + merge_group: + pull_request: + branches: + - main + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v3 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 18 + scope: "@subtopia-algo" + cache: "npm" + cache-dependency-path: ./package-lock.json + + - name: Install dependencies + run: npm ci + + - name: Run build + run: npm run build + + lint: + name: Linting + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v3 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 18 + scope: "@subtopia-algo" + cache: "npm" + cache-dependency-path: ./package-lock.json + + - name: Install dependencies + run: npm ci + + - name: Lint + run: npm run lint:scripts + + unit-tests: + name: Unit tests + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + node: [18, 19] + steps: + - name: Check out repository + uses: actions/checkout@v3 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + scope: "@subtopia-algo" + cache: "npm" + cache-dependency-path: ./package-lock.json + + - uses: docker-practice/actions-setup-docker@master + if: runner.os == 'macOS' + timeout-minutes: 12 + + - name: Install dependencies + run: npm ci + + - name: Run sandbox + run: npm run localnet:start + + - name: Run tests + env: + TESTNET_SUBTOPIA_DISPENSER_MNEMONIC: ${{ secrets.TESTNET_SUBTOPIA_DISPENSER_MNEMONIC }} + TESTNET_SUBTOPIA_CREATOR_MNEMONIC: ${{ secrets.TESTNET_SUBTOPIA_CREATOR_MNEMONIC }} + TESTNET_SUBTOPIA_BOB_MNEMONIC: ${{ secrets.TESTNET_SUBTOPIA_BOB_MNEMONIC }} + run: npm run test:integration + + - name: "Upload coverage to Codecov" + uses: codecov/codecov-action@v3 + if: runner.os == 'Linux' && matrix.node == '18' + with: + fail_ci_if_error: true + token: ${{ secrets.CODECOV_TOKEN }} + + deploy-docs: + if: github.ref == 'refs/heads/main' + permissions: write-all + name: Deploy docs + needs: [build, lint, unit-tests] + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v3 + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 18 + scope: "@subtopia-algo" + cache: "npm" + cache-dependency-path: ./package-lock.json + + - name: Install dependencies + run: npm ci + + - name: Build docs + run: npm run docs + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4 + with: + branch: gh-pages + commit-message: Refreshing documentation 🚀 + folder: docs # The folder the action should deploy. + + release: + if: github.ref == 'refs/heads/main' + permissions: write-all + name: Release + needs: [build, lint, unit-tests, deploy-docs] + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + persist-credentials: false # <--- override default gh token + + - name: Setup node + uses: actions/setup-node@v3 + with: + node-version: 18 + scope: "@subtopia-algo" + cache: "npm" + cache-dependency-path: ./package-lock.json + + - name: Install dependencies + run: npm ci + + - name: Run build + run: npm run build + + - name: Release + env: + GITHUB_TOKEN: ${{ secrets.CUSTOM_GH_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + run: npm run release diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml deleted file mode 100644 index 0c835c5..0000000 --- a/.github/workflows/pr.yaml +++ /dev/null @@ -1,36 +0,0 @@ -name: Check codebase - -on: - merge_group: - pull_request: - branches: - - main - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - pull_request: - uses: makerxstudio/shared-config/.github/workflows/node-ci.yml@main - env: - TESTNET_SUBTOPIA_DISPENSER_MNEMONIC: ${{ secrets.TESTNET_SUBTOPIA_DISPENSER_MNEMONIC }} - TESTNET_SUBTOPIA_CREATOR_MNEMONIC: ${{ secrets.TESTNET_SUBTOPIA_CREATOR_MNEMONIC }} - TESTNET_SUBTOPIA_BOB_MNEMONIC: ${{ secrets.TESTNET_SUBTOPIA_BOB_MNEMONIC }} - with: - working-directory: ./ - run-commit-lint: true - run-build: true - node-version: 18.x - lint-script: npm run lint:scripts - test-script: | - npm run test:integration - - curl -Os https://uploader.codecov.io/latest/linux/codecov - chmod +x codecov - ./codecov -t ${{ secrets.CODECOV_TOKEN }} - - pre-test-script: | - pipx install algokit - algokit localnet start - npx --yes wait-on tcp:4001 -t 30000 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml deleted file mode 100644 index 997e6ee..0000000 --- a/.github/workflows/release.yaml +++ /dev/null @@ -1,95 +0,0 @@ -name: Publish - -on: - push: - branches: - - main - - release - workflow_dispatch: - -concurrency: release - -permissions: - contents: write - -jobs: - ci: - name: Continuous Integration - uses: makerxstudio/shared-config/.github/workflows/node-ci.yml@main - with: - working-directory: ./ - run-commit-lint: true - run-build: true - node-version: 18.x - lint-script: npm run lint:scripts - test-script: | - npm run test:integration - - curl -Os https://uploader.codecov.io/latest/linux/codecov - chmod +x codecov - ./codecov -t ${{ secrets.CODECOV_TOKEN }} - - pre-test-script: | - pipx install algokit - algokit localnet start - npx --yes wait-on tcp:4001 -t 30000 - - deploy-docs: - permissions: write-all - name: Deploy docs - needs: [ci] - runs-on: ubuntu-latest - steps: - - name: Check out repository - uses: actions/checkout@v3 - - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: 18 - registry-url: "https://npm.pkg.github.com" - scope: "@makerxstudio" - cache: "npm" - cache-dependency-path: ./package-lock.json - - - name: Install dependencies - run: npm ci - - - name: Build docs - run: npm run docs - - - name: Deploy 🚀 - uses: JamesIves/github-pages-deploy-action@v4 - with: - branch: gh-pages - commit-message: Refreshing documentation 🚀 - folder: docs # The folder the action should deploy. - - release: - permissions: write-all - name: Release - needs: [deploy-docs] - runs-on: ubuntu-latest - steps: - - name: Check out repository - uses: actions/checkout@v3 - with: - fetch-depth: 0 - persist-credentials: false # <--- override default gh token - - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: 18 - - - name: Install dependencies - run: npm ci - - - name: Run build - run: npm run build - - - name: Release - env: - GITHUB_TOKEN: ${{ secrets.CUSTOM_GH_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - run: npm run release