From 3cb3f4da47b04a8ced8f3eef86254a8bc7194850 Mon Sep 17 00:00:00 2001 From: Altynbek Orumbayev Date: Wed, 29 Mar 2023 21:55:34 +0200 Subject: [PATCH] feat: initial setup --- .commitlintrc.json | 3 + .github/auto_assign.yml | 19 + .github/pull_request_template.md | 12 + .github/workflows/ci.yaml | 135 ++ .gitignore | 4 + LICENCE.md | 37 + README.md | 157 +- codecov.yml | 2 + misc/licence.header.md | 2 + misc/licence_appender.py | 57 + package.json | 66 +- renovate.json | 13 + src/adminClient.ts | 289 +++ src/client.ts | 587 +++++ src/common/constants.ts | 20 + src/common/enums.ts | 20 + src/common/interfaces.ts | 148 ++ src/common/utils.ts | 244 +++ src/contracts/smi_client.ts | 540 +++++ src/contracts/smr_client.ts | 295 +++ src/index.ts | 343 +-- tests/interfaces.ts | 6 + tests/subtopia.test.ts | 837 +++++++ tests/utils.ts | 133 ++ vite.config.ts | 3 +- vitest.config.ts | 10 + yarn.lock | 3481 +++++++++++++++++++++++++++++- 27 files changed, 7055 insertions(+), 408 deletions(-) create mode 100644 .commitlintrc.json create mode 100644 .github/auto_assign.yml create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/ci.yaml create mode 100644 LICENCE.md create mode 100644 codecov.yml create mode 100644 misc/licence.header.md create mode 100644 misc/licence_appender.py create mode 100644 renovate.json create mode 100644 src/adminClient.ts create mode 100644 src/client.ts create mode 100644 src/common/constants.ts create mode 100644 src/common/enums.ts create mode 100644 src/common/interfaces.ts create mode 100644 src/common/utils.ts create mode 100644 src/contracts/smi_client.ts create mode 100644 src/contracts/smr_client.ts create mode 100644 tests/interfaces.ts create mode 100644 tests/subtopia.test.ts create mode 100644 tests/utils.ts create mode 100644 vitest.config.ts diff --git a/.commitlintrc.json b/.commitlintrc.json new file mode 100644 index 0000000..c30e5a9 --- /dev/null +++ b/.commitlintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["@commitlint/config-conventional"] +} diff --git a/.github/auto_assign.yml b/.github/auto_assign.yml new file mode 100644 index 0000000..7aab670 --- /dev/null +++ b/.github/auto_assign.yml @@ -0,0 +1,19 @@ +# REF: https://probot.github.io/apps/auto-assign/ + +# Set to true to add reviewers to pull requests +addReviewers: true + +# Set to true to add assignees to pull requests +addAssignees: 'author' + +# A list of reviewers to be added to pull requests (GitHub user name) +reviewers: + - aorumbayev + +# A list of keywords to be skipped the process that add reviewers if pull requests include it +#skipKeywords: +# - wip + +# A number of reviewers added to the pull request +# Set 0 to add all the reviewers (default: 0) +numberOfReviewers: 0 diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..ee100cb --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,12 @@ +### Description + +> _Please explain the changes you made here_ + +### Checklist + +> _Please, make sure to comply with the checklist below before expecting review_ + +- [ ] Code compiles correctly +- [ ] Created tests which fail without the change (if possible) +- [ ] All tests passing +- [ ] Extended the README / documentation, if necessary diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..c6d4d43 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,135 @@ +name: Check codebase + +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v2 + + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: 18 + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Run build + run: yarn build + + lint: + name: Linting + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v2 + + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: 18 + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Lint + run: yarn 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@v2 + + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node }} + + - uses: docker-practice/actions-setup-docker@master + if: runner.os == 'macOS' + timeout-minutes: 12 + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Run sandbox + run: yarn localnet:start + + - name: Run tests + run: yarn 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: + permissions: write-all + name: Deploy docs + # needs: [build, lint, unit-tests] + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v2 + + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: 18 + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Build docs + run: yarn 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: [build, lint, unit-tests, deploy-docs] + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v2 + + - name: Setup node + uses: actions/setup-node@v1 + with: + node-version: 18 + + - name: Install dependencies + run: yarn install --frozen-lockfile + + - name: Run build + run: yarn build + + - name: Release + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + run: yarn release diff --git a/.gitignore b/.gitignore index be552fc..e414511 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,7 @@ lerna-debug.log* *.njsproj *.sln *.sw? + +# misc +coverage +docs diff --git a/LICENCE.md b/LICENCE.md new file mode 100644 index 0000000..20fe470 --- /dev/null +++ b/LICENCE.md @@ -0,0 +1,37 @@ +# Subtopia SDK License Agreement + +Copyright (c) 2023 Altynbek Orumbayev. All rights reserved. + +This Subtopia SDK License Agreement (the "License") applies to the Subtopia SDK software (the "Software") provided by Altynbek Orumbayev ("Licensor"). By using the Software, you ("Licensee") agree to be bound by the terms of this License. + +## 1. Grant of License + +Subject to the terms of this License, Licensor grants Licensee a non-exclusive, non-transferable, worldwide, royalty-free license to use, reproduce, and distribute the Software, solely for the purpose of interacting with the official Subtopia decentralized platform and its related contracts. + +## 2. Restrictions + +a. Licensee shall not use the Software for any purpose other than interacting with the official Subtopia decentralized platform and its related contracts. + +b. Licensee shall not use the Software for any commercial purposes outside of the context of interacting with the official Subtopia decentralized platform and its related contracts. + +c. Licensee shall not copy, modify, distribute, sublicense, sell, or create derivative works of the Software, except as expressly permitted by this License. + +## 3. Termination + +This License shall terminate immediately upon Licensee's breach of any of its terms. Upon termination, Licensee shall cease all use of the Software and destroy all copies thereof. + +## 4. No Warranty + +The Software is provided "as is" without warranty of any kind, either express or implied, including, but not limited to, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. + +## 5. Limitation of Liability + +In no event shall Licensor be liable for any damages, including, but not limited to, any direct, indirect, special, incidental, or consequential damages, arising out of or in connection with the use or inability to use the Software, even if Licensor has been advised of the possibility of such damages. + +## 6. Governing Law + +This License shall be governed by and construed in accordance with the laws of jurisdiction in which Licensee is located, without regard to conflicts of law principles. Any legal action or proceeding relating to this License shall be instituted in a court of competent jurisdiction in which Licensee is located. + +## 7. Entire Agreement + +This License constitutes the entire agreement between Licensor and Licensee with respect to the subject matter hereof and supersedes all prior or contemporaneous agreements, understandings, and communications, whether written or oral, relating thereto. diff --git a/README.md b/README.md index 8c392ad..fa3e91e 100644 --- a/README.md +++ b/README.md @@ -1,88 +1,117 @@ -# Vite TypeScript NPM Package +

-Scaffold TypeScript npm packages using this template to bootstrap your next library. +

+ npm version + + + + + + + +

-Versions of this template: -- [Vite TypeScript library npm package](https://github.com/jasonsturges/vite-typescript-npm-package) -- [Vite JavaScript library npm package](https://github.com/jasonsturges/vite-npm-package) -- [Rollup JavaScript library npm package](https://github.com/jasonsturges/npm-package-boilerplate) -- [Rollup TypeScript library npm package](https://github.com/jasonsturges/typescript-npm-package) +--- +## 🌟 About -## Getting Started +Subtopia JS SDK is a JavaScript library for interacting with the Subtopia Platform. It provides a simple interface for creating and managing Subscription Management Infrastructures (`SMI`s). -Begin via any of the following: +> For detailed documentation, please visit [sdk.subtopia.io](https://sdk.subtopia.io). -- Press the "*Use this template*" button +## ⚡ Quick Start -- Use [degit](https://github.com/Rich-Harris/degit) to execute: +### Install the package: - ``` - degit github:jasonsturges/vite-typescript-npm-package - ``` - -- Use [GitHub CLI](https://cli.github.com/) to execute: +```bash +# with npm +npm install @subtopia-js - ``` - gh repo create --template="https://github.com/jasonsturges/vite-typescript-npm-package" - ``` - -- Simply `git clone`, delete the existing .git folder, and then: - - ``` - git init - git add -A - git commit -m "Initial commit" - ```` - -Remember to use `npm search ` to avoid naming conflicts in the NPM Registery for your new package name. - - -## Usage - -The following tasks are available for `npm run`: - -- `start`: Run Vite in host mode for a local development environment (not included in production build) -- `watch`: Run Vite in watch mode to detect changes to files during development -- `build`: Run Vite to build a production release distributable - - -## Development - -Vite features a host mode to enables development with real time HMR updates directly from the library via the `start` script. - -To test your library from within an app: - -- **From your library**: run `npm link` or `yarn link` command to register the package -- **From your app**: run `npm link "mylib"` or `yarn link "mylib"` command to use the library inside your app during development +# or with yarn +yarn add @subtopia-js +``` +### Import the package: -## Development Cleanup +```ts +import { SubtopiaClient } from "@subtopia-js"; +``` -Once development completes, `unlink` both your library and test app projects. +## 🛠️ Usage -- **From your app**: run `npm link "mylib"` or `yarn link "mylib"` command to use the library inside your app during development -- **From your library**: run `npm unlink` or `yarn unlink` command to register the package +### Purchasing a subscription: +```ts +// ... your code -## Release Publishing +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 + }, + { client: {PUT_ALGOD_INSTANCE_HERE} // object of type algosdk.Algodv2 +); -Update your `package.json` to next version number, and remember to tag a release. +console.log(response.returnValue) // response is of type ABIResult -Once ready to submit your package to the NPM Registry, execute the following tasks via `npm` (or `yarn`): +// ... rest of your code +``` -- `npm run clean` — Assure a clean build -- `npm run build` — Build the package -- `npm run build:types` — Build API Extractor d.ts declaration +### Subscription lookup: -Assure the proper npm login: +```ts +// ... your code +const subscriberBox = await SubtopiaClient.getSubscriptionRecordForAccount( + client, + subscriber, + smiID +); -``` -npm login +// SubscriptionRecord (throws Error if not subscribed) +console.log(subscriberBox); +// ... rest of your code ``` -Submit your package to the registry: - +### Unsubscribing: + +```ts +// ... your code +const deleteResult = await SubtopiaClient.unsubscribe( + { + subscriber: { + address: subscriber.address, + signer: subscriber.signer, + }, + smiID: infrastructureID, + }, + { + client: algodClient, + } +); + +// ID of the deleted subscription ASA +console.log(deleteResult.returnValue); +// ... your code ``` -npm publish --access public + +### Transfering subscription: + +```ts +// ... your code +const transferResult = await SubtopiaClient.transferSubscriptionPass( + { + newOwnerAddress: newOwner.address, + oldOwner: { + address: oldOwner.address, + signer: oldOwner.signer, + }, + smiID: infrastructureID, + subID: Number(result.returnValue), + }, + { client: algodClient } +); + +// Transaction ID of the transfer transaction +console.log(deleteResult.txID); +// ... your code ``` diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000..ff0d659 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,2 @@ +ignore: + - "src/contracts/*" diff --git a/misc/licence.header.md b/misc/licence.header.md new file mode 100644 index 0000000..6c7596b --- /dev/null +++ b/misc/licence.header.md @@ -0,0 +1,2 @@ +Subtopia JS SDK +Copyright (C) 2023 Altynbek Orumbayev diff --git a/misc/licence_appender.py b/misc/licence_appender.py new file mode 100644 index 0000000..891b614 --- /dev/null +++ b/misc/licence_appender.py @@ -0,0 +1,57 @@ +# ruff: noqa + +import glob +import os + + +def load_license(file_path): + with open(file_path) as f: + return f.read() + + +def update_license(ts_file, license_text): + marker = "// =============================================================================\n" + license_lines = [f"// {line}\n" for line in license_text.splitlines()] + + with open(ts_file, "r") as f: + content = f.readlines() + + begin_index = -1 + end_index = -1 + marker_count = 0 + for i, line in enumerate(content): + if marker == line: + marker_count += 1 + if marker_count == 1: + begin_index = i + elif marker_count == 2: + end_index = i + break + + if begin_index != -1 and end_index != -1: + content = ( + content[:begin_index] + + [marker] + + license_lines + + [marker] + + content[end_index + 1 :] + ) + else: + content = [marker] + license_lines + [marker] + ["\n"] + content + + with open(ts_file, "w") as f: + f.writelines(content) + + +def main(): + folder_path = "src" + license_file = "misc/licence.header.md" + + license_text = load_license(license_file) + for root, _, files in os.walk(folder_path): + for ts_file in glob.glob(os.path.join(root, "*.ts")): + update_license(ts_file, license_text) + + +if __name__ == "__main__": + main() diff --git a/package.json b/package.json index ad346c8..5b92c75 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,11 @@ { "name": "subtopia-js", - "version": "0.1.0", - "description": "TypeScript library for subtopia manager contracts integration", - "license": "MIT", + "version": "1.1.0", + "description": "Subtopia SDK for JavaScript", "main": "dist/index.cjs.js", "module": "dist/index.es.js", + "license": "SEE LICENSE IN LICENSE.md", + "author": "info@subtopia.io", "types": "dist/index.d.ts", "files": [ "dist" @@ -13,33 +14,84 @@ "start": "vite --host --open", "build": "tsc && vite build && dts-bundle-generator --config ./dts-bundle-generator.config.ts", "watch": "tsc && vite build --watch", + "test:integration": "vitest run --coverage", + "localnet:start": "pipx run algokit localnet start", + "localnet:stop": "pipx run algokit localnet start", "lint:scripts": "eslint . --ext .ts", "lint:styles": "stylelint ./**/*.{css,scss}", "format:scripts": "prettier . --write", - "format:styles": "stylelint ./**/*.{css,scss} --fix" + "format:styles": "stylelint ./**/*.{css,scss} --fix", + "docs": "npx typedoc src/index.ts --excludePrivate --excludeExternals --exclude '**/adminClient.ts'", + "commit": "cz", + "release": "semantic-release" }, "dependencies": { - "algosdk": "https://github.com/algorand/js-algorand-sdk.git#develop", - "beaker-ts": "^0.0.81" + "algosdk": "2.2.0", + "axios": "^1.3.4", + "beaker-ts": "^0.0.95" }, "devDependencies": { + "@semantic-release/changelog": "6.0.3", + "@semantic-release/git": "10.0.1", + "@feki.de/semantic-release-yarn": "1.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": "^3.0.0", + "@vitest/coverage-c8": "^0.29.7", + "commitizen": "4.3.0", + "cz-conventional-changelog": "3.3.0", "dts-bundle-generator": "^7.1.0", "eslint": "^8.29.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.2.1", "prettier": "^2.8.1", + "semantic-release": "19.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" + "vite": "^4.0.0", + "vitest": "^0.29.0" + }, + "config": { + "commitizen": { + "path": "cz-conventional-changelog" + } + }, + "release": { + "plugins": [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + "@feki.de/semantic-release-yarn", + "@semantic-release/github" + ], + "branches": [ + "main", + { + "name": "next", + "prerelease": "rc" + } + ], + "verifyConditions": [ + "@semantic-release/changelog", + "@feki.de/semantic-release-yarn", + "@semantic-release/git" + ], + "prepare": [ + "@semantic-release/changelog", + "@feki.de/semantic-release-yarn", + "@semantic-release/git" + ] + }, + "lint-staged": { + "src/**/**/*.{ts,tsx}": [ + "prettier . --write", + "git add" + ] } } diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..4637c9f --- /dev/null +++ b/renovate.json @@ -0,0 +1,13 @@ +{ + "extends": ["config:base"], + "ignoreDeps": [], + "schedule": "before 3am on the first day of the month", + "assignees": ["aorumbayev"], + "baseBranches": ["main"], + "separateMajorMinor": true, + "rebaseStalePrs": true, + "lockFileMaintenance": { + "enabled": true, + "extends": "schedule:monthly" + } +} diff --git a/src/adminClient.ts b/src/adminClient.ts new file mode 100644 index 0000000..b90fa81 --- /dev/null +++ b/src/adminClient.ts @@ -0,0 +1,289 @@ +// ============================================================================= +// Subtopia JS SDK +// Copyright (C) 2023 Altynbek Orumbayev +// ============================================================================= + +import { + decodeAddress, + makePaymentTxnWithSuggestedParamsFromObject, +} from "algosdk"; +import { ABIResult } from "beaker-ts"; +import { + getLocker, + getParamsWithFeeCount, + normalizePrice, + rekeyLocker, +} from "./common/utils"; +import { PendingTransfer, SMR } from "./contracts/smr_client"; +import { getAssetByID } from "./common/utils"; +import { PriceNormalizationType, SubscriptionType } from "./common/enums"; +import { + PendingTransferRecord, + SMRAddInfrastructureParams, + SMRClaimInfrastructureParams, + SMRGetRegistryParams, + SMRTransferInfrastructureParams, +} from "./common/interfaces"; +import AlgodClient from "algosdk/dist/types/client/v2/algod/algod"; +import { + SUBTOPIA_CONTRACTS_VERSION, + SUBTOPIA_REGISTRY_APP_ID, +} from "./common/constants"; +import { SubtopiaClient } from "./client"; + +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, + version = SUBTOPIA_CONTRACTS_VERSION, + name, + price, + subType = SubscriptionType.UNLIMITED, + maxSubs = 0, + coinID = 0, + expiresIn = 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.execute( + await smr.compose.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), + expires_in: BigInt(expiresIn), + 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.execute( + await smr.compose.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.execute( + await smr.compose.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/client.ts b/src/client.ts new file mode 100644 index 0000000..7ed978f --- /dev/null +++ b/src/client.ts @@ -0,0 +1,587 @@ +// ============================================================================= +// Subtopia JS SDK +// Copyright (C) 2023 Altynbek Orumbayev +// ============================================================================= + +import algosdk, { + AtomicTransactionComposer, + decodeAddress, + encodeAddress, + 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, +} from "./common/utils"; +import { SMI, Subscription } from "./contracts/smi_client"; +import { SMR } from "./contracts/smr_client"; +import { getAssetByID } from "./common/utils"; +import { PriceNormalizationType } from "./common/enums"; +import { + SMIClaimSubscriptionParams, + SMIState, + ChainMethodParams, + SMISubscribeParams, + SMITransferSubscriptionParams, + SMIUnsubscribeParams, + SubscriptionRecord, + SMIMarkForDeletionParams, + SMIDeleteSubscriptionParams, + SMIClaimRevenueParams, +} from "./common/interfaces"; +import { + DEFAULT_AWAIT_ROUNDS, + SUBTOPIA_REGISTRY_APP_ID, +} from "./common/constants"; + +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"])); + + /* 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"], + } 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, + createdAt: new Date(Number(decoded["created_at"]) * 1000), + } as SubscriptionRecord; + + return subscriptionRecord; + } + + static async subscribe( + { subscriber, smiID, smrID = SUBTOPIA_REGISTRY_APP_ID }: 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 managerAddress = smiState["manager"] as string; + + const managerLocker = await getLocker( + client, + managerAddress, + smr.appAddress + ); + + const feeSp = await getParamsWithFeeCount(client, 3); + + const feeTxn = { + txn: makePaymentTxnWithSuggestedParamsFromObject({ + from: subscriber.address, + to: smi.appAddress, + amount: Number(120_000 + 100_000 + 8000 + 100), + suggestedParams: feeSp, + }), + signer: subscriber.signer, + }; + + const subscribeSp = await getParamsWithFeeCount(client, 0); + + /* eslint-disable prettier/prettier */ + const subscribePayTxn = { + txn: + smiState.coinID === 0 + ? makePaymentTxnWithSuggestedParamsFromObject({ + from: subscriber.address, + to: managerLocker.lsig.address(), + amount: smiState.price, + suggestedParams: subscribeSp, + }) + : makeAssetTransferTxnWithSuggestedParamsFromObject({ + from: subscriber.address, + to: managerLocker.lsig.address(), + amount: smiState.price, + assetIndex: smiState.coinID, + suggestedParams: subscribeSp, + }), + signer: subscriber.signer, + }; + + const result = await smi.execute( + await smi.compose.subscribe( + { + fee_txn: feeTxn, + subscribe_pay_txn: subscribePayTxn, + subscriber_account: subscriber.address, + }, + { + appAccounts: [subscriber.address], + boxes: [ + { + 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.execute( + await smi.compose.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.address, subscriber.signer, subID); + } + + const sp = await getParamsWithFeeCount(client, 3); + + const result = await smi.execute( + await smi.compose.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.address, user.signer, 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.execute( + await smi.compose.transfer_subscription( + { + new_address: newOwnerAddress, + subscription_id: BigInt(subID), + }, + { + appAccounts: [newOwnerAddress], + appForeignAssets: [subID], + 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.execute( + await smi.compose.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), + }); + } + ); + console.log( + "Method calls", + methodCalls.length, + subscribesSubsetFromBoxes + ); + 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; + } +} diff --git a/src/common/constants.ts b/src/common/constants.ts new file mode 100644 index 0000000..7154502 --- /dev/null +++ b/src/common/constants.ts @@ -0,0 +1,20 @@ +// ============================================================================= +// Subtopia JS SDK +// Copyright (C) 2023 Altynbek Orumbayev +// ============================================================================= + +import { AssetMetadata } from "./interfaces"; + +export const DEFAULT_AWAIT_ROUNDS = 10; +export const LOCKER_TEAL_URL = + "https://gist.githubusercontent.com/aorumbayev/5a744cebd12af842da64bceb31e5675a/raw/bfb812b75565e05702357e72d8479868c9f18c6a/sml.teal"; +export const SUBTOPIA_CONTRACTS_VERSION = "0.1.0"; +export const SUBTOPIA_REGISTRY_APP_ID = 167782070; + +export const ALGO_ASSET = { + index: 0, + creator: "", + name: "ALGO", + decimals: 6, + unitName: "ALGO", +} as AssetMetadata; diff --git a/src/common/enums.ts b/src/common/enums.ts new file mode 100644 index 0000000..eb46922 --- /dev/null +++ b/src/common/enums.ts @@ -0,0 +1,20 @@ +// ============================================================================= +// Subtopia JS SDK +// Copyright (C) 2023 Altynbek Orumbayev +// ============================================================================= + +export enum SubscriptionType { + UNLIMITED = 0, + MONTHLY = 1, + ANNUAL = 2, +} + +export enum PriceNormalizationType { + RAW = 0, + PRETTY = 1, +} + +export enum SMILifecycle { + ACTIVE = 0, + DELETING = 1, +} diff --git a/src/common/interfaces.ts b/src/common/interfaces.ts new file mode 100644 index 0000000..02dabd6 --- /dev/null +++ b/src/common/interfaces.ts @@ -0,0 +1,148 @@ +// ============================================================================= +// Subtopia JS SDK +// Copyright (C) 2023 Altynbek Orumbayev +// ============================================================================= + +import { Algodv2, LogicSigAccount, TransactionSigner } from "algosdk"; +import AlgodClient from "algosdk/dist/types/client/v2/algod/algod"; +import { SMILifecycle, SubscriptionType } from "./enums"; + +// === Boxes === + +export interface SubscriptionRecord { + createdAt: Date; + expiresAt: Date | undefined; + subID: number; + subType: SubscriptionType; +} + +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; + name: string; + decimals: number; + 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; + expiresIn: number; +} + +// === SMR === + +export interface SMRAddInfrastructureParams extends SMIInputParams { + creator: User; + client: AlgodClient; + version?: string; + smrID?: number; +} + +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; + isPendingTransfer?: boolean; + lifecycle: SMILifecycle; +} + +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; + 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/common/utils.ts b/src/common/utils.ts new file mode 100644 index 0000000..fad4bf4 --- /dev/null +++ b/src/common/utils.ts @@ -0,0 +1,244 @@ +// ============================================================================= +// Subtopia JS SDK +// Copyright (C) 2023 Altynbek Orumbayev +// ============================================================================= + +import algosdk, { + LogicSigAccount, + AtomicTransactionComposer, + encodeAddress, + makeLogicSigAccountTransactionSigner, + TransactionSigner, + makeAssetTransferTxnWithSuggestedParamsFromObject, + Algodv2, + ALGORAND_MIN_TX_FEE, + SuggestedParams, +} from "algosdk"; +import AlgodClient from "algosdk/dist/types/client/v2/algod/algod"; +import { StateValue, State, ApplicationClient } from "beaker-ts"; +import { ALGO_ASSET, DEFAULT_AWAIT_ROUNDS, LOCKER_TEAL_URL } from "./constants"; +import axios from "axios"; +import { PriceNormalizationType } from "./enums"; +import { LockerRekeyParameters, AssetMetadata, Locker } from "./interfaces"; + +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`); + } +} + +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; +} + +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 + const smlTealResponse = await axios(LOCKER_TEAL_URL); + let sml = smlTealResponse.data; + + // 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: algosdk.ABIResult[]; +}> { + 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, + userAddress: string, + userSigner: TransactionSigner, + passId: number +) { + const optInAtc = new AtomicTransactionComposer(); + optInAtc.addTransaction({ + txn: makeAssetTransferTxnWithSuggestedParamsFromObject({ + from: userAddress, + to: userAddress, + amount: 0, + suggestedParams: await getParamsWithFeeCount(client, 1), + assetIndex: passId, + }), + signer: userSigner, + }); + const optInResult = await optInAtc.execute(client, DEFAULT_AWAIT_ROUNDS); + + console.log("Opted in to pass", optInResult); + return optInResult; +} + +export function normalizePrice( + price: number, + decimals: number, + direction = PriceNormalizationType.RAW // RAW = multiply by decimals, PRETTY = divide by decimals +): number { + return direction === PriceNormalizationType.RAW + ? Math.floor(price * 10 ** decimals) + : Math.floor(price / 10 ** decimals); +} + +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]; +} + +export async function getAssetByID( + client: Algodv2, + assetID: number +): Promise { + if (assetID === 0) { + return ALGO_ASSET; + } + + // Fetch the asset by ID + const assetResponse = await client.getAssetByID(assetID).do(); + const assetParams = assetResponse["params"]; + + // Extract asset details + const asset: AssetMetadata = { + creator: assetParams["creator"], + index: assetID, + name: Object.prototype.hasOwnProperty.call(assetParams, "name") + ? assetParams["name"] + : "", + decimals: assetParams["decimals"], + unitName: assetParams["unit-name"], + }; + + return asset; +} + +export async function getParamsWithFeeCount( + client: Algodv2, + txnNumber: number +): Promise { + // Get suggested params with a specific fee. + const params: SuggestedParams = await client.getTransactionParams().do(); + params.flatFee = true; + params.fee = ALGORAND_MIN_TX_FEE * txnNumber; + return params; +} diff --git a/src/contracts/smi_client.ts b/src/contracts/smi_client.ts new file mode 100644 index 0000000..e69cf73 --- /dev/null +++ b/src/contracts/smi_client.ts @@ -0,0 +1,540 @@ +// ============================================================================= +// Subtopia JS SDK +// Copyright (C) 2023 Altynbek Orumbayev +// ============================================================================= + +import algosdk from "algosdk"; +import * as bkr from "beaker-ts"; +export class Subscription { + sub_type = BigInt(0); + sub_id = BigInt(0); + created_at = BigInt(0); + expires_at = BigInt(0); + static codec: algosdk.ABIType = algosdk.ABIType.from( + "(uint64,uint64,uint64,uint64)" + ); + static fields: string[] = ["sub_type", "sub_id", "created_at", "expires_at"]; + 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, + }, + expires_in: { + type: bkr.AVMType.uint64, + key: "expires_in", + 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 = + "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSA4IDEyIDEyOCAyNTUKYnl0ZWNibG9jayAweCAweDZkNjE2ZTYxNjc2NTcyIDB4NjE2Mzc0Njk3NjY1NWY3Mzc1NjI3MyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkgMHgxNTFmN2M3NSAweDZjNjk2NjY1NjM3OTYzNmM2NSAweDZkNjE3ODVmNzM3NTYyNzMgMHg3MDcyNjk2MzY1IDB4NzM3NTYyNWY3NDc5NzA2NSAweDc0NmY3NDYxNmM1ZjczNzU2MjczIDB4NjU3ODcwNjk3MjY1NzM1ZjY5NmUgMHg2ZTYxNmQ2NSAweDUwNzI2ZjY3NzI2MTZkIDB4NjM2ZjY5NmU1ZjY5NjQgMHg3NjY1NzI3MzY5NmY2ZQp0eG4gTnVtQXBwQXJncwppbnRjXzAgLy8gMAo9PQpibnogbWFpbl9sMjQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg3ZGU2ZWUzZiAvLyAiY3JlYXRlKHN0cmluZyxzdHJpbmcsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KXZvaWQiCj09CmJueiBtYWluX2wyMwp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGM4NmZkYjAxIC8vICJ1cGRhdGVfbWFuYWdlcihhZGRyZXNzKXZvaWQiCj09CmJueiBtYWluX2wyMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGY2Y2NmZDViIC8vICJzdWJzY3JpYmUoYWRkcmVzcyxwYXksdHhuKXVpbnQ2NCIKPT0KYm56IG1haW5fbDIxCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4ZGQzYTU0OTYgLy8gImdldF9zdWJzY3JpcHRpb24oYWRkcmVzcykodWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKPT0KYm56IG1haW5fbDIwCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MWVjNWU5OGEgLy8gImlzX3N1YnNjcmliZXIoYWRkcmVzcyl1aW50NjQiCj09CmJueiBtYWluX2wxOQp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDM1NDkzODY4IC8vICJjbGFpbV9zdWJzY3JpcHRpb24odWludDY0KXZvaWQiCj09CmJueiBtYWluX2wxOAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDdiMmVjYzMxIC8vICJ0cmFuc2Zlcl9zdWJzY3JpcHRpb24oYWRkcmVzcyx1aW50NjQpdm9pZCIKPT0KYm56IG1haW5fbDE3CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4OTJhOTBhZjYgLy8gInVuc3Vic2NyaWJlKGFzc2V0KXVpbnQ2NCIKPT0KYm56IG1haW5fbDE2CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4ODJkNTdmY2MgLy8gIm1hcmtfZm9yX2RlbGV0aW9uKHBheSl2b2lkIgo9PQpibnogbWFpbl9sMTUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgyOGUxZWE4ZiAvLyAiZGVsZXRlX3N1YnNjcmlwdGlvbihhZGRyZXNzLHVpbnQ2NCl2b2lkIgo9PQpibnogbWFpbl9sMTQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgyNDM3OGQzYyAvLyAiZGVsZXRlKCl2b2lkIgo9PQpibnogbWFpbl9sMTMKZXJyCm1haW5fbDEzOgp0eG4gT25Db21wbGV0aW9uCnB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBkZWxldGVfMjAKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE0Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCnN0b3JlIDE4CnR4bmEgQXBwbGljYXRpb25BcmdzIDIKYnRvaQpzdG9yZSAxOQpsb2FkIDE4CmxvYWQgMTkKY2FsbHN1YiBkZWxldGVzdWJzY3JpcHRpb25fMTkKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE1Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCnN0b3JlIDE3CmxvYWQgMTcKZ3R4bnMgVHlwZUVudW0KaW50Y18xIC8vIHBheQo9PQphc3NlcnQKbG9hZCAxNwpjYWxsc3ViIG1hcmtmb3JkZWxldGlvbl8xOAppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTY6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpjYWxsc3ViIHVuc3Vic2NyaWJlXzE3CnN0b3JlIDE2CmJ5dGVjIDQgLy8gMHgxNTFmN2M3NQpsb2FkIDE2Cml0b2IKY29uY2F0CmxvZwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTc6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKc3RvcmUgMTQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCnN0b3JlIDE1CmxvYWQgMTQKbG9hZCAxNQpjYWxsc3ViIHRyYW5zZmVyc3Vic2NyaXB0aW9uXzE2CmludGNfMSAvLyAxCnJldHVybgptYWluX2wxODoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpidG9pCmNhbGxzdWIgY2xhaW1zdWJzY3JpcHRpb25fMTUKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE5Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmNhbGxzdWIgaXNzdWJzY3JpYmVyXzE0CnN0b3JlIDEzCmJ5dGVjIDQgLy8gMHgxNTFmN2M3NQpsb2FkIDEzCml0b2IKY29uY2F0CmxvZwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjA6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKY2FsbHN1YiBnZXRzdWJzY3JpcHRpb25fMTMKc3RvcmUgMTIKYnl0ZWMgNCAvLyAweDE1MWY3Yzc1CmxvYWQgMTIKY29uY2F0CmxvZwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjE6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKc3RvcmUgOAp0eG4gR3JvdXBJbmRleApwdXNoaW50IDIgLy8gMgotCnN0b3JlIDkKbG9hZCA5Cmd0eG5zIFR5cGVFbnVtCmludGNfMSAvLyBwYXkKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0Kc3RvcmUgMTAKbG9hZCA4CmxvYWQgOQpsb2FkIDEwCmNhbGxzdWIgc3Vic2NyaWJlXzEyCnN0b3JlIDExCmJ5dGVjIDQgLy8gMHgxNTFmN2M3NQpsb2FkIDExCml0b2IKY29uY2F0CmxvZwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMjI6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKY2FsbHN1YiB1cGRhdGVtYW5hZ2VyXzExCmludGNfMSAvLyAxCnJldHVybgptYWluX2wyMzoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAo9PQomJgphc3NlcnQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpzdG9yZSAwCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKc3RvcmUgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCnN0b3JlIDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNApidG9pCnN0b3JlIDMKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQpidG9pCnN0b3JlIDQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgpidG9pCnN0b3JlIDUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwpidG9pCnN0b3JlIDYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOApidG9pCnN0b3JlIDcKbG9hZCAwCmxvYWQgMQpsb2FkIDIKbG9hZCAzCmxvYWQgNApsb2FkIDUKbG9hZCA2CmxvYWQgNwpjYWxsc3ViIGNyZWF0ZV8zCmludGNfMSAvLyAxCnJldHVybgptYWluX2wyNDoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzEgLy8gT3B0SW4KPT0KYm56IG1haW5fbDI4CnR4biBPbkNvbXBsZXRpb24KcHVzaGludCAyIC8vIENsb3NlT3V0Cj09CmJueiBtYWluX2wyNwplcnIKbWFpbl9sMjc6CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CmFzc2VydApjYWxsc3ViIGNsb3Nlb3V0XzUKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDI4Ogp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQphc3NlcnQKY2FsbHN1YiBvcHRpbl80CmludGNfMSAvLyAxCnJldHVybgoKLy8gaW50X3RvX2FzY2lpCmludHRvYXNjaWlfMDoKcHJvdG8gMSAxCnB1c2hieXRlcyAweDMwMzEzMjMzMzQzNTM2MzczODM5IC8vICIwMTIzNDU2Nzg5IgpmcmFtZV9kaWcgLTEKaW50Y18xIC8vIDEKZXh0cmFjdDMKcmV0c3ViCgovLyBpdG9hCml0b2FfMToKcHJvdG8gMSAxCmZyYW1lX2RpZyAtMQppbnRjXzAgLy8gMAo9PQpibnogaXRvYV8xX2w1CmZyYW1lX2RpZyAtMQpwdXNoaW50IDEwIC8vIDEwCi8KaW50Y18wIC8vIDAKPgpibnogaXRvYV8xX2w0CmJ5dGVjXzAgLy8gIiIKaXRvYV8xX2wzOgpmcmFtZV9kaWcgLTEKcHVzaGludCAxMCAvLyAxMAolCmNhbGxzdWIgaW50dG9hc2NpaV8wCmNvbmNhdApiIGl0b2FfMV9sNgppdG9hXzFfbDQ6CmZyYW1lX2RpZyAtMQpwdXNoaW50IDEwIC8vIDEwCi8KY2FsbHN1YiBpdG9hXzEKYiBpdG9hXzFfbDMKaXRvYV8xX2w1OgpwdXNoYnl0ZXMgMHgzMCAvLyAiMCIKaXRvYV8xX2w2OgpyZXRzdWIKCi8vIGVuY29kZV91dmFyaW50X2ltcGwKZW5jb2RldXZhcmludGltcGxfMjoKcHJvdG8gMiAxCmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgLTIKaW50YyA0IC8vIDEyOAo+PQpibnogZW5jb2RldXZhcmludGltcGxfMl9sMgpmcmFtZV9kaWcgLTIKaW50YyA1IC8vIDI1NQomCml0b2IKZXh0cmFjdCA3IDEKYiBlbmNvZGV1dmFyaW50aW1wbF8yX2wzCmVuY29kZXV2YXJpbnRpbXBsXzJfbDI6CmZyYW1lX2RpZyAtMgpwdXNoaW50IDcgLy8gNwpzaHIKZnJhbWVfZGlnIC0yCmludGMgNSAvLyAyNTUKJgppbnRjIDQgLy8gMTI4CnwKaXRvYgpleHRyYWN0IDcgMQpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzIKZW5jb2RldXZhcmludGltcGxfMl9sMzoKY29uY2F0CnJldHN1YgoKLy8gY3JlYXRlCmNyZWF0ZV8zOgpwcm90byA4IDAKYnl0ZWNfMiAvLyAiYWN0aXZlX3N1YnMiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDEzIC8vICJjb2luX2lkIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyAxMCAvLyAiZXhwaXJlc19pbiIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNSAvLyAibGlmZWN5Y2xlIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlY18xIC8vICJtYW5hZ2VyIgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNiAvLyAibWF4X3N1YnMiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDExIC8vICJuYW1lIgpwdXNoYnl0ZXMgMHg2NDY1NjY2MTc1NmM3NCAvLyAiZGVmYXVsdCIKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNyAvLyAicHJpY2UiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDggLy8gInN1Yl90eXBlIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyA5IC8vICJ0b3RhbF9zdWJzIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyAxNCAvLyAidmVyc2lvbiIKYnl0ZWNfMCAvLyAiIgphcHBfZ2xvYmFsX3B1dApieXRlYyAxNCAvLyAidmVyc2lvbiIKZnJhbWVfZGlnIC04CmV4dHJhY3QgMiAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDExIC8vICJuYW1lIgpmcmFtZV9kaWcgLTcKZXh0cmFjdCAyIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMSAvLyAibWFuYWdlciIKZnJhbWVfZGlnIC02CmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDggLy8gInN1Yl90eXBlIgpmcmFtZV9kaWcgLTUKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNyAvLyAicHJpY2UiCmZyYW1lX2RpZyAtNAphcHBfZ2xvYmFsX3B1dApieXRlYyA2IC8vICJtYXhfc3VicyIKZnJhbWVfZGlnIC0zCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDEzIC8vICJjb2luX2lkIgpmcmFtZV9kaWcgLTIKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgMTAgLy8gImV4cGlyZXNfaW4iCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIG9wdGluCm9wdGluXzQ6CnByb3RvIDAgMApyZXRzdWIKCi8vIGNsb3Nlb3V0CmNsb3Nlb3V0XzU6CnByb3RvIDAgMAppbnRjXzEgLy8gMQpyZXR1cm4KCi8vIGlubmVyX2NyZWF0ZV9uZnQKaW5uZXJjcmVhdGVuZnRfNjoKcHJvdG8gMyAxCml0eG5fYmVnaW4KcHVzaGludCAzIC8vIGFjZmcKaXR4bl9maWVsZCBUeXBlRW51bQppbnRjXzEgLy8gMQppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCmludGNfMSAvLyAxCml0eG5fZmllbGQgQ29uZmlnQXNzZXREZWZhdWx0RnJvemVuCmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKZnJhbWVfZGlnIC0zCml0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0Cml0eG4gQ3JlYXRlZEFzc2V0SUQKcmV0c3ViCgovLyBpbm5lcl90cmFuc2Zlcl9uZnQKaW5uZXJ0cmFuc2Zlcm5mdF83Ogpwcm90byAzIDAKaXR4bl9iZWdpbgpwdXNoaW50IDQgLy8gYXhmZXIKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTMKaXR4bl9maWVsZCBYZmVyQXNzZXQKaW50Y18xIC8vIDEKaXR4bl9maWVsZCBBc3NldEFtb3VudApmcmFtZV9kaWcgLTIKaXR4bl9maWVsZCBBc3NldFNlbmRlcgpmcmFtZV9kaWcgLTEKaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CnJldHN1YgoKLy8gaW5uZXJfZGVsZXRlX25mdAppbm5lcmRlbGV0ZW5mdF84Ogpwcm90byAxIDAKaXR4bl9iZWdpbgpwdXNoaW50IDMgLy8gYWNmZwppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0CmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CnJldHN1YgoKLy8gaW5uZXJfZGVsZXRlX3N1YnNjcmlwdGlvbgppbm5lcmRlbGV0ZXN1YnNjcmlwdGlvbl85Ogpwcm90byAyIDAKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAtMQphc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKc3RvcmUgNDYKc3RvcmUgNDUKbG9hZCA0Ngpsb2FkIDQ1CmludGNfMCAvLyAwCj4KJiYKYm56IGlubmVyZGVsZXRlc3Vic2NyaXB0aW9uXzlfbDMKaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fOV9sMToKZnJhbWVfZGlnIC0xCmNhbGxzdWIgaW5uZXJkZWxldGVuZnRfOApieXRlY18yIC8vICJhY3RpdmVfc3VicyIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKIT0KYnogaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fOV9sNApieXRlY18yIC8vICJhY3RpdmVfc3VicyIKYnl0ZWNfMiAvLyAiYWN0aXZlX3N1YnMiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCi0KYXBwX2dsb2JhbF9wdXQKYiBpbm5lcmRlbGV0ZXN1YnNjcmlwdGlvbl85X2w0CmlubmVyZGVsZXRlc3Vic2NyaXB0aW9uXzlfbDM6CmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgLTIKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKY2FsbHN1YiBpbm5lcnRyYW5zZmVybmZ0XzcKYiBpbm5lcmRlbGV0ZXN1YnNjcmlwdGlvbl85X2wxCmlubmVyZGVsZXRlc3Vic2NyaXB0aW9uXzlfbDQ6CmZyYW1lX2RpZyAtMgpib3hfZGVsCnBvcApyZXRzdWIKCi8vIGlubmVyX2NvbXB1dGVfZXhwaXJhdGlvbgppbm5lcmNvbXB1dGVleHBpcmF0aW9uXzEwOgpwcm90byAyIDEKZnJhbWVfZGlnIC0yCmludGNfMCAvLyAwCj09CmJueiBpbm5lcmNvbXB1dGVleHBpcmF0aW9uXzEwX2wyCmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKZnJhbWVfZGlnIC0xCisKYiBpbm5lcmNvbXB1dGVleHBpcmF0aW9uXzEwX2wzCmlubmVyY29tcHV0ZWV4cGlyYXRpb25fMTBfbDI6CmludGNfMCAvLyAwCmlubmVyY29tcHV0ZWV4cGlyYXRpb25fMTBfbDM6CnJldHN1YgoKLy8gdXBkYXRlX21hbmFnZXIKdXBkYXRlbWFuYWdlcl8xMToKcHJvdG8gMSAwCnR4biBTZW5kZXIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCj09Ci8vIHVuYXV0aG9yaXplZAphc3NlcnQKYnl0ZWNfMSAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKZnJhbWVfZGlnIC0xCiE9Ci8vIE5ldyBtYW5hZ2VyIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgb2xkIG1hbmFnZXIKYXNzZXJ0CmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIHN1YnNjcmliZQpzdWJzY3JpYmVfMTI6CnByb3RvIDMgMQppbnRjXzAgLy8gMApieXRlY18wIC8vICIiCmR1cAppbnRjXzAgLy8gMApkdXBuIDQKYnl0ZWNfMCAvLyAiIgppbnRjXzAgLy8gMApkdXAKYnl0ZWNfMCAvLyAiIgpkdXAKZnJhbWVfZGlnIC0zCmZyYW1lX2RpZyAtMgpndHhucyBTZW5kZXIKPT0KLy8gU3Vic2NyaWJlciBhY2NvdW50IG11c3QgYmUgdGhlIHNlbmRlcgphc3NlcnQKYnl0ZWMgMTIgLy8gIlByb2dyYW0iCmludGNfMCAvLyAwCnN0b3JlIDIxCmludGNfMCAvLyAwCnN0b3JlIDIyCmJ5dGVjXzAgLy8gIiIKc3RvcmUgMjMKYnl0ZWNfMCAvLyAiIgpzdG9yZSAyNApieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldApsZW4KYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzIKYnl0ZWNfMSAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKY29uY2F0CnN0b3JlIDIzCmxvYWQgMjQKYnl0ZWNfMyAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCAyMQppbnRjXzIgLy8gOApzdWJzdHJpbmczCmNvbmNhdApsb2FkIDIzCmNvbmNhdApzdG9yZSAyNApsb2FkIDIyCmxvYWQgMjMKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSAyMgppbnRjXzIgLy8gOAppbnRjXzEgLy8gMQorCnN0b3JlIDIxCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwpsZW4KYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCmNvbmNhdApzdG9yZSAyMwpsb2FkIDI0CmJ5dGVjXzMgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgMjEKaW50Y18zIC8vIDEyCnN1YnN0cmluZzMKY29uY2F0CmxvYWQgMjMKY29uY2F0CnN0b3JlIDI0CmxvYWQgMjIKbG9hZCAyMwpsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDIyCmludGNfMyAvLyAxMgppbnRjXzEgLy8gMQorCnN0b3JlIDIxCmxvYWQgMjQKYnl0ZWNfMyAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCAyMQpkaWcgMQpsZW4Kc3Vic3RyaW5nMwpjb25jYXQKc3RvcmUgMjQKbG9hZCAyNApjb25jYXQKc2hhNTEyXzI1NgpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKbGVuCnB1c2hpbnQgMzIgLy8gMzIKPT0KYXNzZXJ0CmZyYW1lX2RpZyAtMQpndHhucyBUeXBlRW51bQppbnRjXzEgLy8gcGF5Cj09CmZyYW1lX2RpZyAtMQpndHhucyBBbW91bnQKYnl0ZWMgNyAvLyAicHJpY2UiCmFwcF9nbG9iYWxfZ2V0Cj09CiYmCmZyYW1lX2RpZyAtMQpndHhucyBSZWNlaXZlcgpmcmFtZV9kaWcgMQo9PQomJgpmcmFtZV9kaWcgLTEKZ3R4bnMgVHlwZUVudW0KcHVzaGludCA0IC8vIGF4ZmVyCj09CmZyYW1lX2RpZyAtMQpndHhucyBBc3NldFJlY2VpdmVyCmZyYW1lX2RpZyAxCj09CiYmCmZyYW1lX2RpZyAtMQpndHhucyBBc3NldEFtb3VudApieXRlYyA3IC8vICJwcmljZSIKYXBwX2dsb2JhbF9nZXQKPT0KJiYKfHwKLy8gU3Vic2NyaXB0aW9uIHBheW1lbnQgbXVzdCBiZSBzZW5kIHRvIGxvY2tlciB3aXRoIHJpZ2h0IHBheQphc3NlcnQKYnl0ZWMgNiAvLyAibWF4X3N1YnMiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj4KYm56IHN1YnNjcmliZV8xMl9sNgpzdWJzY3JpYmVfMTJfbDE6CmZyYW1lX2RpZyAtMwpib3hfbGVuCnN0b3JlIDI2CnN0b3JlIDI1CmxvYWQgMjYKYm56IHN1YnNjcmliZV8xMl9sMwpieXRlY18yIC8vICJhY3RpdmVfc3VicyIKYnl0ZWNfMiAvLyAiYWN0aXZlX3N1YnMiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCisKYXBwX2dsb2JhbF9wdXQKYiBzdWJzY3JpYmVfMTJfbDcKc3Vic2NyaWJlXzEyX2wzOgpmcmFtZV9kaWcgLTMKYm94X2dldApzdG9yZSAyOApzdG9yZSAyNwpsb2FkIDI4CmFzc2VydApsb2FkIDI3CmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgMgpwdXNoaW50IDI0IC8vIDI0CmV4dHJhY3RfdWludDY0CmZyYW1lX2J1cnkgMwpmcmFtZV9kaWcgMwppbnRjXzAgLy8gMAohPQpibnogc3Vic2NyaWJlXzEyX2w1CmludGNfMCAvLyAwCnJldHVybgpzdWJzY3JpYmVfMTJfbDU6CmZyYW1lX2RpZyAzCmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKPAovLyBTdWJzY3JpcHRpb24gc3RpbGwgYWN0aXZlCmFzc2VydApiIHN1YnNjcmliZV8xMl9sNwpzdWJzY3JpYmVfMTJfbDY6CmJ5dGVjXzIgLy8gImFjdGl2ZV9zdWJzIgphcHBfZ2xvYmFsX2dldAppbnRjXzEgLy8gMQorCmJ5dGVjIDYgLy8gIm1heF9zdWJzIgphcHBfZ2xvYmFsX2dldAo8PQovLyBNYXggaXRlbXMgcmVhY2hlZAphc3NlcnQKYiBzdWJzY3JpYmVfMTJfbDEKc3Vic2NyaWJlXzEyX2w3OgpieXRlYyA5IC8vICJ0b3RhbF9zdWJzIgpieXRlYyA5IC8vICJ0b3RhbF9zdWJzIgphcHBfZ2xvYmFsX2dldAppbnRjXzEgLy8gMQorCmFwcF9nbG9iYWxfcHV0CnB1c2hieXRlcyAweDIzIC8vICIjIgpieXRlYyA5IC8vICJ0b3RhbF9zdWJzIgphcHBfZ2xvYmFsX2dldApjYWxsc3ViIGl0b2FfMQpjb25jYXQKcHVzaGJ5dGVzIDB4MjAyZDIwIC8vICIgLSAiCmNvbmNhdApieXRlYyAxMSAvLyAibmFtZSIKYXBwX2dsb2JhbF9nZXQKY29uY2F0CnB1c2hieXRlcyAweDUzNTQ1MCAvLyAiU1RQIgpwdXNoYnl0ZXMgMHg2OTcwNjY3MzNhMmYyZjYyNjE2Njc5NjI2NTY5NjM2NDY0N2EzNzZiNjI3NTc4NjE2YTZhMzY2MjZmNjIzNTYyNmE3MTc0Nzc2NTcxMzY3NzYzNjg2YjY0NmI2OTcxMzQ3Njc2Njg3NzcyNzc3MjZlNjUzNzY5N2EzNDY2MzIzNTc4NjkgLy8gImlwZnM6Ly9iYWZ5YmVpY2RkejdrYnV4YWpqNmJvYjVianF0d2VxNndjaGtka2lxNHZ2aHdyd3JuZTdpejRmMjV4aSIKY2FsbHN1YiBpbm5lcmNyZWF0ZW5mdF82CnN0b3JlIDIwCmxvYWQgMjAKaW50Y18wIC8vIDAKIT0KYXNzZXJ0CmJ5dGVjIDggLy8gInN1Yl90eXBlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9idXJ5IDQKbG9hZCAyMApmcmFtZV9idXJ5IDUKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcApmcmFtZV9idXJ5IDYKYnl0ZWMgOCAvLyAic3ViX3R5cGUiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDEwIC8vICJleHBpcmVzX2luIgphcHBfZ2xvYmFsX2dldApjYWxsc3ViIGlubmVyY29tcHV0ZWV4cGlyYXRpb25fMTAKZnJhbWVfYnVyeSA3CmZyYW1lX2RpZyA0Cml0b2IKZnJhbWVfZGlnIDUKaXRvYgpjb25jYXQKZnJhbWVfZGlnIDYKaXRvYgpjb25jYXQKZnJhbWVfZGlnIDcKaXRvYgpjb25jYXQKZnJhbWVfYnVyeSA4CmZyYW1lX2RpZyAtMwpib3hfZGVsCnBvcApmcmFtZV9kaWcgLTMKZnJhbWVfZGlnIDgKYm94X3B1dApsb2FkIDIwCmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIGdldF9zdWJzY3JpcHRpb24KZ2V0c3Vic2NyaXB0aW9uXzEzOgpwcm90byAxIDEKYnl0ZWNfMCAvLyAiIgpmcmFtZV9kaWcgLTEKYm94X2dldApzdG9yZSAzMApzdG9yZSAyOQpsb2FkIDMwCmFzc2VydApsb2FkIDI5CmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIGlzX3N1YnNjcmliZXIKaXNzdWJzY3JpYmVyXzE0Ogpwcm90byAxIDEKaW50Y18wIC8vIDAKYnl0ZWNfMCAvLyAiIgppbnRjXzAgLy8gMApmcmFtZV9kaWcgLTEKYm94X2xlbgpzdG9yZSAzMgpzdG9yZSAzMQpsb2FkIDMyCmJueiBpc3N1YnNjcmliZXJfMTRfbDIKaW50Y18wIC8vIDAKZnJhbWVfYnVyeSAwCmIgaXNzdWJzY3JpYmVyXzE0X2wzCmlzc3Vic2NyaWJlcl8xNF9sMjoKZnJhbWVfZGlnIC0xCmJveF9nZXQKc3RvcmUgMzQKc3RvcmUgMzMKbG9hZCAzNAphc3NlcnQKbG9hZCAzMwpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKcHVzaGludCAyNCAvLyAyNApleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIDIKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAo+CmZyYW1lX2J1cnkgMAppc3N1YnNjcmliZXJfMTRfbDM6CnJldHN1YgoKLy8gY2xhaW1fc3Vic2NyaXB0aW9uCmNsYWltc3Vic2NyaXB0aW9uXzE1Ogpwcm90byAxIDAKdHhuIFNlbmRlcgpmcmFtZV9kaWcgLTEKYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCnN0b3JlIDM2CnN0b3JlIDM1CmxvYWQgMzYKLy8gU3Vic2NyaWJlciBub3Qgb3B0ZWQtaW4gZm9yIFN1YnNjcmlwdGlvbiBORlQKYXNzZXJ0CmZyYW1lX2RpZyAtMQpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwp0eG4gU2VuZGVyCmNhbGxzdWIgaW5uZXJ0cmFuc2Zlcm5mdF83CnJldHN1YgoKLy8gdHJhbnNmZXJfc3Vic2NyaXB0aW9uCnRyYW5zZmVyc3Vic2NyaXB0aW9uXzE2Ogpwcm90byAyIDAKYnl0ZWNfMCAvLyAiIgp0eG4gU2VuZGVyCmJveF9sZW4Kc3RvcmUgMzgKc3RvcmUgMzcKbG9hZCAzOAovLyBDdXJyZW50IGFkZHJlc3Mgbm90IHN1YnNjcmliZWQKYXNzZXJ0CnR4biBTZW5kZXIKZnJhbWVfZGlnIC0xCmFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQpzdG9yZSA0MApzdG9yZSAzOQpsb2FkIDQwCmxvYWQgMzkKaW50Y18wIC8vIDAKPgomJgpieiB0cmFuc2ZlcnN1YnNjcmlwdGlvbl8xNl9sMgpmcmFtZV9kaWcgLTEKdHhuIFNlbmRlcgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpjYWxsc3ViIGlubmVydHJhbnNmZXJuZnRfNwp0cmFuc2ZlcnN1YnNjcmlwdGlvbl8xNl9sMjoKdHhuIFNlbmRlcgpib3hfZ2V0CnN0b3JlIDQyCnN0b3JlIDQxCmxvYWQgNDIKYXNzZXJ0CmxvYWQgNDEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAtMgpib3hfZGVsCnBvcApmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIDAKYm94X3B1dAp0eG4gU2VuZGVyCmJveF9kZWwKcG9wCnJldHN1YgoKLy8gdW5zdWJzY3JpYmUKdW5zdWJzY3JpYmVfMTc6CnByb3RvIDEgMQppbnRjXzAgLy8gMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCnR4biBTZW5kZXIKYm94X2xlbgpzdG9yZSA0NApzdG9yZSA0Mwpsb2FkIDQ0Ci8vIE5vdCBzdWJzY3JpYmVkCmFzc2VydAp0eG4gU2VuZGVyCmZyYW1lX2J1cnkgMQpmcmFtZV9kaWcgMQpsZW4KcHVzaGludCAzMiAvLyAzMgo9PQphc3NlcnQKZnJhbWVfZGlnIC0xCnR4bmFzIEFzc2V0cwpmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIDEKZnJhbWVfZGlnIDIKY2FsbHN1YiBpbm5lcmRlbGV0ZXN1YnNjcmlwdGlvbl85CmZyYW1lX2RpZyAtMQp0eG5hcyBBc3NldHMKZnJhbWVfYnVyeSAwCnJldHN1YgoKLy8gbWFya19mb3JfZGVsZXRpb24KbWFya2ZvcmRlbGV0aW9uXzE4Ogpwcm90byAxIDAKYnl0ZWNfMCAvLyAiIgp0eG4gU2VuZGVyCmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0Cj09Ci8vIHVuYXV0aG9yaXplZAphc3NlcnQKdHhuIFNlbmRlcgpieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldAo9PQovLyBPbmx5IG1hbmFnZXIgY2FuIG1hcmsgZm9yIGRlbGV0aW9uCmFzc2VydApmcmFtZV9kaWcgLTEKZ3R4bnMgU2VuZGVyCmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0Cj09Ci8vIE9ubHkgbWFuYWdlciBjYW4gbWFyayBmb3IgZGVsZXRpb24KYXNzZXJ0CmJ5dGVjIDEyIC8vICJQcm9ncmFtIgppbnRjXzAgLy8gMApzdG9yZSA0NwppbnRjXzAgLy8gMApzdG9yZSA0OApieXRlY18wIC8vICIiCnN0b3JlIDQ5CmJ5dGVjXzAgLy8gIiIKc3RvcmUgNTAKYnl0ZWNfMSAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8yCmJ5dGVjXzEgLy8gIm1hbmFnZXIiCmFwcF9nbG9iYWxfZ2V0CmNvbmNhdApzdG9yZSA0OQpsb2FkIDUwCmJ5dGVjXzMgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgNDcKaW50Y18yIC8vIDgKc3Vic3RyaW5nMwpjb25jYXQKbG9hZCA0OQpjb25jYXQKc3RvcmUgNTAKbG9hZCA0OApsb2FkIDQ5CmxlbgorCmludGNfMSAvLyAxCi0Kc3RvcmUgNDgKaW50Y18yIC8vIDgKaW50Y18xIC8vIDEKKwpzdG9yZSA0NwpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8yCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwpjb25jYXQKc3RvcmUgNDkKbG9hZCA1MApieXRlY18zIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDQ3CmludGNfMyAvLyAxMgpzdWJzdHJpbmczCmNvbmNhdApsb2FkIDQ5CmNvbmNhdApzdG9yZSA1MApsb2FkIDQ4CmxvYWQgNDkKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSA0OAppbnRjXzMgLy8gMTIKaW50Y18xIC8vIDEKKwpzdG9yZSA0Nwpsb2FkIDUwCmJ5dGVjXzMgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgNDcKZGlnIDEKbGVuCnN1YnN0cmluZzMKY29uY2F0CnN0b3JlIDUwCmxvYWQgNTAKY29uY2F0CnNoYTUxMl8yNTYKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmxlbgpwdXNoaW50IDMyIC8vIDMyCj09CmFzc2VydApmcmFtZV9kaWcgLTEKZ3R4bnMgUmVjZWl2ZXIKZnJhbWVfZGlnIDAKPT0KLy8gSW52YWxpZCBsb2NrZXIgYWRkcmVzcwphc3NlcnQKYnl0ZWNfMiAvLyAiYWN0aXZlX3N1YnMiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj4KYm56IG1hcmtmb3JkZWxldGlvbl8xOF9sMgpmcmFtZV9kaWcgLTEKZ3R4bnMgQW1vdW50CmludGNfMCAvLyAwCj09Ci8vIE5vIHN1YnNjcmlwdGlvbnMgdG8gZGVsZXRlLCBzbyBmZWUgbXVzdCBiZSAwCmFzc2VydApiIG1hcmtmb3JkZWxldGlvbl8xOF9sMwptYXJrZm9yZGVsZXRpb25fMThfbDI6CmZyYW1lX2RpZyAtMQpndHhucyBBbW91bnQKZ2xvYmFsIE1pblR4bkZlZQpwdXNoaW50IDMgLy8gMwoqCmJ5dGVjXzIgLy8gImFjdGl2ZV9zdWJzIgphcHBfZ2xvYmFsX2dldAoqCj49Ci8vIE5vdCBlbm91Z2ggZnVuZHMgdG8gZGVsZXRlIGFsbCBzdWJzY3JpcHRpb25zCmFzc2VydAptYXJrZm9yZGVsZXRpb25fMThfbDM6CmJ5dGVjIDUgLy8gImxpZmVjeWNsZSIKaW50Y18xIC8vIDEKYXBwX2dsb2JhbF9wdXQKcmV0c3ViCgovLyBkZWxldGVfc3Vic2NyaXB0aW9uCmRlbGV0ZXN1YnNjcmlwdGlvbl8xOToKcHJvdG8gMiAwCmJ5dGVjXzAgLy8gIiIKYnl0ZWMgNSAvLyAibGlmZWN5Y2xlIgphcHBfZ2xvYmFsX2dldAppbnRjXzEgLy8gMQo9PQovLyBTdWJzY3JpcHRpb24gc2VydmljZSBub3QgbWFya2VkIGZvciBkZWxldGlvbgphc3NlcnQKYnl0ZWMgMTIgLy8gIlByb2dyYW0iCmludGNfMCAvLyAwCnN0b3JlIDUxCmludGNfMCAvLyAwCnN0b3JlIDUyCmJ5dGVjXzAgLy8gIiIKc3RvcmUgNTMKYnl0ZWNfMCAvLyAiIgpzdG9yZSA1NApieXRlY18xIC8vICJtYW5hZ2VyIgphcHBfZ2xvYmFsX2dldApsZW4KYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzIKYnl0ZWNfMSAvLyAibWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKY29uY2F0CnN0b3JlIDUzCmxvYWQgNTQKYnl0ZWNfMyAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCA1MQppbnRjXzIgLy8gOApzdWJzdHJpbmczCmNvbmNhdApsb2FkIDUzCmNvbmNhdApzdG9yZSA1NApsb2FkIDUyCmxvYWQgNTMKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSA1MgppbnRjXzIgLy8gOAppbnRjXzEgLy8gMQorCnN0b3JlIDUxCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwpsZW4KYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCmNvbmNhdApzdG9yZSA1Mwpsb2FkIDU0CmJ5dGVjXzMgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgNTEKaW50Y18zIC8vIDEyCnN1YnN0cmluZzMKY29uY2F0CmxvYWQgNTMKY29uY2F0CnN0b3JlIDU0CmxvYWQgNTIKbG9hZCA1MwpsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDUyCmludGNfMyAvLyAxMgppbnRjXzEgLy8gMQorCnN0b3JlIDUxCmxvYWQgNTQKYnl0ZWNfMyAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCA1MQpkaWcgMQpsZW4Kc3Vic3RyaW5nMwpjb25jYXQKc3RvcmUgNTQKbG9hZCA1NApjb25jYXQKc2hhNTEyXzI1NgpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKbGVuCnB1c2hpbnQgMzIgLy8gMzIKPT0KYXNzZXJ0CmZyYW1lX2RpZyAwCnR4biBHcm91cEluZGV4Cmd0eG5zIFNlbmRlcgo9PQovLyBQcmVjb25kaXRpb25zIGZvciBTTUwgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlsZWQKYXNzZXJ0CnR4biBHcm91cEluZGV4Cmd0eG5zIFJla2V5VG8KZ2xvYmFsIFplcm9BZGRyZXNzCj09Ci8vIFByZWNvbmRpdGlvbnMgZm9yIFNNTCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZAphc3NlcnQKdHhuIEdyb3VwSW5kZXgKZ3R4bnMgQ2xvc2VSZW1haW5kZXJUbwpnbG9iYWwgWmVyb0FkZHJlc3MKPT0KLy8gUHJlY29uZGl0aW9ucyBmb3IgU01MIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmFpbGVkCmFzc2VydApmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIC0xCmNhbGxzdWIgaW5uZXJkZWxldGVzdWJzY3JpcHRpb25fOQpyZXRzdWIKCi8vIGRlbGV0ZQpkZWxldGVfMjA6CnByb3RvIDAgMAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmJ5dGVjIDUgLy8gImxpZmVjeWNsZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDEKPT0KLy8gQXBwIHN0aWxsIGhhcyBhY3RpdmUgc3Vic2NyaXB0aW9ucyBvciBhY3RpdmUgbGlmZWN5Y2xlIHN0YXRlCmFzc2VydApieXRlY18yIC8vICJhY3RpdmVfc3VicyIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPT0KLy8gQXBwIHN0aWxsIGhhcyBhY3RpdmUgc3Vic2NyaXB0aW9ucyBvciBhY3RpdmUgbGlmZWN5Y2xlIHN0YXRlCmFzc2VydApyZXRzdWI="; + override clearProgram = + "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu"; + override methods: algosdk.ABIMethod[] = [ + new algosdk.ABIMethod({ + name: "create", + desc: "", + args: [ + { type: "string", name: "version", desc: "" }, + { type: "string", name: "name", desc: "" }, + { type: "address", name: "manager", 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: "uint64", name: "expires_in", desc: "" }, + ], + returns: { type: "void", desc: "" }, + }), + new algosdk.ABIMethod({ + name: "update_manager", + desc: "", + args: [{ type: "address", name: "new_manager_account", desc: "" }], + returns: { type: "void", desc: "" }, + }), + new algosdk.ABIMethod({ + name: "subscribe", + desc: "", + args: [ + { type: "address", name: "subscriber_account", desc: "" }, + { type: "pay", name: "fee_txn", desc: "" }, + { type: "txn", name: "subscribe_pay_txn", desc: "" }, + ], + returns: { type: "uint64", desc: "" }, + }), + new algosdk.ABIMethod({ + name: "get_subscription", + desc: "", + args: [{ type: "address", name: "subscriber", desc: "" }], + returns: { type: "(uint64,uint64,uint64,uint64)", desc: "" }, + }), + new algosdk.ABIMethod({ + name: "is_subscriber", + desc: "", + args: [{ type: "address", name: "subscriber", desc: "" }], + returns: { type: "uint64", desc: "" }, + }), + new algosdk.ABIMethod({ + name: "claim_subscription", + desc: "", + args: [{ type: "uint64", name: "subscription_id", desc: "" }], + returns: { type: "void", desc: "" }, + }), + new algosdk.ABIMethod({ + name: "transfer_subscription", + desc: "", + args: [ + { type: "address", name: "new_address", desc: "" }, + { type: "uint64", name: "subscription_id", desc: "" }, + ], + returns: { type: "void", desc: "" }, + }), + new algosdk.ABIMethod({ + name: "unsubscribe", + desc: "", + args: [{ type: "asset", name: "sub_id", desc: "" }], + returns: { type: "uint64", desc: "" }, + }), + new algosdk.ABIMethod({ + name: "mark_for_deletion", + desc: "", + args: [{ type: "pay", name: "locker_fund_txn", desc: "" }], + returns: { type: "void", desc: "" }, + }), + new algosdk.ABIMethod({ + name: "delete_subscription", + desc: "", + args: [ + { type: "address", name: "subscriber", desc: "" }, + { type: "uint64", name: "subscription_id", desc: "" }, + ], + returns: { type: "void", desc: "" }, + }), + new algosdk.ABIMethod({ + name: "delete", + desc: "", + args: [], + returns: { type: "void", desc: "" }, + }), + ]; + async create_app( + args: { + version: string; + name: string; + manager: string; + sub_type: bigint; + price: bigint; + max_subs: bigint; + coin_id: bigint; + expires_in: 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, + expires_in: args.expires_in, + }, + 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 subscribe( + args: { + subscriber_account: string; + 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, + 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<[bigint, bigint, bigint, bigint]>( + result, + result.returnValue as [bigint, bigint, bigint, bigint] + ); + } + 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_app( + 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; + expires_in: 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, + expires_in: args.expires_in, + }, + 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 + ); + }, + subscribe: async ( + args: { + subscriber_account: string; + 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, + 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 => { + return this.addMethodCall( + algosdk.getMethodByName(this.methods, "delete"), + {}, + txnParams, + atc + ); + }, + }; +} diff --git a/src/contracts/smr_client.ts b/src/contracts/smr_client.ts new file mode 100644 index 0000000..cb891f9 --- /dev/null +++ b/src/contracts/smr_client.ts @@ -0,0 +1,295 @@ +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 = + "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSA4IDEyIDEyOCAyNTUgMjAwMDAwIDEwMDAwMApieXRlY2Jsb2NrIDB4IDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OSAweDUwNzI2ZjY3NzI2MTZkIDB4MTUxZjdjNzUKdHhuIE51bUFwcEFyZ3MKaW50Y18wIC8vIDAKPT0KYm56IG1haW5fbDEyCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4M2ZlMDdhODAgLy8gImFkZChzdHJpbmcsc3RyaW5nLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsYWRkcmVzcyxhZGRyZXNzLHBheSl1aW50NjQiCj09CmJueiBtYWluX2wxMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGZlZWZjOGUyIC8vICJ0cmFuc2Zlcl9zbWkodWludDY0LGFkZHJlc3MsYWRkcmVzcyxhZGRyZXNzLHBheSkoYWRkcmVzcyx1aW50NjQpIgo9PQpibnogbWFpbl9sMTAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgyZjYxZTA0MiAvLyAiY2xhaW1fc21pKGFkZHJlc3MsYXBwbGljYXRpb24sdWludDY0KXZvaWQiCj09CmJueiBtYWluX2w5CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4NGRiNzQyOTIgLy8gInJla2V5X2xvY2tlcl9iYWNrKGFkZHJlc3Mpdm9pZCIKPT0KYm56IG1haW5fbDgKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgzZjEyOTk3OSAvLyAiZGVsZXRlX3NtaSh1aW50NjQpdm9pZCIKPT0KYm56IG1haW5fbDcKZXJyCm1haW5fbDc6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpjYWxsc3ViIGRlbGV0ZXNtaV83CmludGNfMSAvLyAxCnJldHVybgptYWluX2w4Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmNhbGxzdWIgcmVrZXlsb2NrZXJiYWNrXzYKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDk6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKc3RvcmUgMTcKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgppbnRjXzAgLy8gMApnZXRieXRlCnN0b3JlIDE4CnR4bmEgQXBwbGljYXRpb25BcmdzIDMKYnRvaQpzdG9yZSAxOQpsb2FkIDE3CmxvYWQgMTgKbG9hZCAxOQpjYWxsc3ViIGNsYWltc21pXzUKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDEwOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmJ0b2kKc3RvcmUgMTEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgpzdG9yZSAxMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCnN0b3JlIDEzCnR4bmEgQXBwbGljYXRpb25BcmdzIDQKc3RvcmUgMTQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpzdG9yZSAxNQpsb2FkIDE1Cmd0eG5zIFR5cGVFbnVtCmludGNfMSAvLyBwYXkKPT0KYXNzZXJ0CmxvYWQgMTEKbG9hZCAxMgpsb2FkIDEzCmxvYWQgMTQKbG9hZCAxNQpjYWxsc3ViIHRyYW5zZmVyc21pXzQKc3RvcmUgMTYKYnl0ZWNfMyAvLyAweDE1MWY3Yzc1CmxvYWQgMTYKY29uY2F0CmxvZwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTE6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKc3RvcmUgMAp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCnN0b3JlIDEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwpidG9pCnN0b3JlIDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNApidG9pCnN0b3JlIDMKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQpidG9pCnN0b3JlIDQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgpidG9pCnN0b3JlIDUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwpidG9pCnN0b3JlIDYKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOApzdG9yZSA3CnR4bmEgQXBwbGljYXRpb25BcmdzIDkKc3RvcmUgOAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCnN0b3JlIDkKbG9hZCA5Cmd0eG5zIFR5cGVFbnVtCmludGNfMSAvLyBwYXkKPT0KYXNzZXJ0CmxvYWQgMApsb2FkIDEKbG9hZCAyCmxvYWQgMwpsb2FkIDQKbG9hZCA1CmxvYWQgNgpsb2FkIDcKbG9hZCA4CmxvYWQgOQpjYWxsc3ViIGFkZF8zCnN0b3JlIDEwCmJ5dGVjXzMgLy8gMHgxNTFmN2M3NQpsb2FkIDEwCml0b2IKY29uY2F0CmxvZwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTI6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KYm56IG1haW5fbDE0CmVycgptYWluX2wxNDoKdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKPT0KYXNzZXJ0CmNhbGxzdWIgY3JlYXRlXzEKaW50Y18xIC8vIDEKcmV0dXJuCgovLyBlbmNvZGVfdXZhcmludF9pbXBsCmVuY29kZXV2YXJpbnRpbXBsXzA6CnByb3RvIDIgMQpmcmFtZV9kaWcgLTEKZnJhbWVfZGlnIC0yCmludGMgNCAvLyAxMjgKPj0KYm56IGVuY29kZXV2YXJpbnRpbXBsXzBfbDIKZnJhbWVfZGlnIC0yCmludGMgNSAvLyAyNTUKJgppdG9iCmV4dHJhY3QgNyAxCmIgZW5jb2RldXZhcmludGltcGxfMF9sMwplbmNvZGV1dmFyaW50aW1wbF8wX2wyOgpmcmFtZV9kaWcgLTIKcHVzaGludCA3IC8vIDcKc2hyCmZyYW1lX2RpZyAtMgppbnRjIDUgLy8gMjU1CiYKaW50YyA0IC8vIDEyOAp8Cml0b2IKZXh0cmFjdCA3IDEKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8wCmVuY29kZXV2YXJpbnRpbXBsXzBfbDM6CmNvbmNhdApyZXRzdWIKCi8vIGNyZWF0ZQpjcmVhdGVfMToKcHJvdG8gMCAwCnB1c2hieXRlcyAweDc2NjU3MjczNjk2ZjZlIC8vICJ2ZXJzaW9uIgpwdXNoYnl0ZXMgMHgzMDJlMzEyZTMwIC8vICIwLjEuMCIKYXBwX2dsb2JhbF9wdXQKcmV0c3ViCgovLyBvcHRpbl9zbWlfdG9fbG9ja2VyCm9wdGluc21pdG9sb2NrZXJfMjoKcHJvdG8gMyAwCmludGNfMCAvLyAwCmZyYW1lX2RpZyAtMgppbnRjXzAgLy8gMAohPQpibnogb3B0aW5zbWl0b2xvY2tlcl8yX2w0CmludGNfMCAvLyAwCm9wdGluc21pdG9sb2NrZXJfMl9sMjoKZnJhbWVfYnVyeSAwCml0eG5fYmVnaW4KaW50Y18xIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIFJlY2VpdmVyCmludGMgNiAvLyAyMDAwMDAKZnJhbWVfZGlnIDAKKwppdHhuX2ZpZWxkIEFtb3VudApnbG9iYWwgTWluVHhuRmVlCnB1c2hpbnQgMiAvLyAyCioKaXR4bl9maWVsZCBGZWUKaXR4bl9uZXh0CmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIFNlbmRlcgpwdXNoaW50IDYgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCmludGNfMSAvLyBPcHRJbgppdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgpmcmFtZV9kaWcgLTMKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmZyYW1lX2RpZyAtMgppbnRjXzAgLy8gMAohPQpieiBvcHRpbnNtaXRvbG9ja2VyXzJfbDUKaXR4bl9uZXh0CnB1c2hpbnQgNCAvLyBheGZlcgppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIFNlbmRlcgpmcmFtZV9kaWcgLTEKaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCmludGNfMCAvLyAwCml0eG5fZmllbGQgQXNzZXRBbW91bnQKZnJhbWVfZGlnIC0yCml0eG5fZmllbGQgWGZlckFzc2V0CmIgb3B0aW5zbWl0b2xvY2tlcl8yX2w1Cm9wdGluc21pdG9sb2NrZXJfMl9sNDoKcHVzaGludCAyMDAwIC8vIDIwMDAKYiBvcHRpbnNtaXRvbG9ja2VyXzJfbDIKb3B0aW5zbWl0b2xvY2tlcl8yX2w1OgppdHhuX3N1Ym1pdApyZXRzdWIKCi8vIGFkZAphZGRfMzoKcHJvdG8gMTAgMQppbnRjXzAgLy8gMApieXRlY18wIC8vICIiCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIiIKZnJhbWVfZGlnIC0xCmd0eG5zIFNlbmRlcgpmcmFtZV9kaWcgLTMKPT0KLy8gTWFuYWdlciBhZGRyZXNzIG11c3QgbWF0Y2ggZmVlIHR4biBzZW5kZXIKYXNzZXJ0CmZyYW1lX2RpZyAtMwpmcmFtZV9idXJ5IDEKaXR4bl9iZWdpbgpwdXNoaW50IDYgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCnB1c2hieXRlcyAweDA4MjAwNjAwMDEwODBjODAwMWZmMDEyNjBmMDAwNzZkNjE2ZTYxNjc2NTcyMGI2MTYzNzQ2OTc2NjU1ZjczNzU2MjczZTEwNTA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkwNDE1MWY3Yzc1MDk2YzY5NjY2NTYzNzk2MzZjNjUwODZkNjE3ODVmNzM3NTYyNzMwNTcwNzI2OTYzNjUwODczNzU2MjVmNzQ3OTcwNjUwYTc0NmY3NDYxNmM1ZjczNzU2MjczMGE2NTc4NzA2OTcyNjU3MzVmNjk2ZTA0NmU2MTZkNjUwNzUwNzI2ZjY3NzI2MTZkMDc2MzZmNjk2ZTVmNjk2NDA3NzY2NTcyNzM2OTZmNmUzMTFiMjIxMjQwMDFmNDM2MWEwMDgwMDQ3ZGU2ZWUzZjEyNDAwMTliMzYxYTAwODAwNGM4NmZkYjAxMTI0MDAxN2MzNjFhMDA4MDA0ZjZjY2ZkNWIxMjQwMDEzODM2MWEwMDgwMDRkZDNhNTQ5NjEyNDAwMTExMzYxYTAwODAwNDFlYzVlOThhMTI0MDAwZTkzNjFhMDA4MDA0MzU0OTM4NjgxMjQwMDBjOTM2MWEwMDgwMDQ3YjJlY2MzMTEyNDAwMDllMzYxYTAwODAwNDkyYTkwYWY2MTI0MDAwNzQzNjFhMDA4MDA0ODJkNTdmY2MxMjQwMDA0OTM2MWEwMDgwMDQyOGUxZWE4ZjEyNDAwMDFlMzYxYTAwODAwNDI0Mzc4ZDNjMTI0MDAwMDEwMDMxMTk4MTA1MTIzMTE4MjIxMzEwNDQ4ODA3MDgyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDEzNTM1MzYxYTAyMTczNTM2MzQzNTM0MzY4ODA2NDkyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzMTE2MjMwOTM1MzQzNDM0MzgxMDIzMTI0NDM0MzQ4ODA1NzAyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDEyMjU1ODgwNTJkMzUzMzI3MDQzNDMzMTY1MGIwMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxMzUzMTM2MWEwMjE3MzUzMjM0MzEzNDMyODgwNGJmMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxMTc4ODA0OTIyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDE4ODA0NGIzNTMwMjcwNDM0MzAxNjUwYjAyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDE4ODA0MWQzNTJmMjcwNDM0MmY1MGIwMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxMzUyYjMxMTY4MTAyMDkzNTJjMzQyYzM4MTAyMzEyNDQzMTE2MjMwOTM1MmQzNDJiMzQyYzM0MmQ4ODAyMzMzNTJlMjcwNDM0MmUxNjUwYjAyMzQzMzExOTIyMTIzMTE4MjIxMzEwNDQzNjFhMDE4ODAyMDQyMzQzMzExOTIyMTIzMTE4MjIxMjEwNDQzNjFhMDEzNTIzMzYxYTAyMzUyNDM2MWEwMzM1MjUzNjFhMDQxNzM1MjYzNjFhMDUxNzM1MjczNjFhMDYxNzM1MjgzNjFhMDcxNzM1MjkzNjFhMDgxNzM1MmEzNDIzMzQyNDM0MjUzNDI2MzQyNzM0MjgzNDI5MzQyYTg4MDA5OTIzNDMzMTE5MjMxMjQwMDAxMzMxMTk4MTAyMTI0MDAwMDEwMDMxMTgyMjEzNDQ4ODAwZTcyMzQzMzExODIyMTM0NDg4MDBkOTIzNDM4YTAxMDE4MDBhMzAzMTMyMzMzNDM1MzYzNzM4Mzk4YmZmMjM1ODg5OGEwMTAxOGJmZjIyMTI0MDAwMjI4YmZmODEwYTBhMjIwZDQwMDAwZDI4OGJmZjgxMGExODg4ZmZjZjUwNDIwMDBlOGJmZjgxMGEwYTg4ZmZkNzQyZmZlOTgwMDEzMDg5OGEwMjAxOGJmZjhiZmUyMTA0MGY0MDAwMGM4YmZlMjEwNTFhMTY1NzA3MDE0MjAwMTQ4YmZlODEwNzkxOGJmZTIxMDUxYTIxMDQxOTE2NTcwNzAxODhmZmQzNTA4OThhMDgwMDJhMjI2NzI3MGQyMjY3MjcwYTIyNjcyNzA1MjI2NzI5MzIwOTY3MjcwNjIyNjcyNzBiODAwNzY0NjU2NjYxNzU2Yzc0NjcyNzA3MjI2NzI3MDgyMjY3MjcwOTIyNjcyNzBlMjg2NzI3MGU4YmY4NTcwMjAwNjcyNzBiOGJmOTU3MDIwMDY3Mjk4YmZhNjcyNzA4OGJmYjY3MjcwNzhiZmM2NzI3MDY4YmZkNjcyNzBkOGJmZTY3MjcwYThiZmY2Nzg5OGEwMDAwODk4YTAwMDAyMzQzOGEwMzAxYjE4MTAzYjIxMDIzYjIyMjIyYjIyMzIzYjIyNDhiZmViMjI1OGJmZGIyMjY4YmZmYjIyNzMyMGFiMjI5MzIwYWIyMmEzMjBhYjIyYjMyMGFiMjJjMjJiMjAxYjNiNDNjODk4YTAzMDBiMTgxMDRiMjEwOGJmZGIyMTEyM2IyMTI4YmZlYjIxMzhiZmZiMjE0MjJiMjAxYjM4OThhMDEwMGIxODEwM2IyMTA4YmZmYjIyMTIyYjIwMWIzODk4YTAyMDA4YmZlOGJmZjcwMDAzNTFhMzUxOTM0MWEzNDE5MjIwZDEwNDAwMDE1OGJmZjg4ZmZkMzJhNjQyMjEzNDEwMDE1MmEyYTY0MjMwOTY3NDIwMDBjOGJmZjhiZmUzMjBhODhmZjllNDJmZmRmOGJmZWJjNDg4OThhMDIwMThiZmUyMjEyNDAwMDA4MzIwNzhiZmYwODQyMDAwMTIyODk4YTAxMDAzMTAwMzIwOTEyNDQyOTY0OGJmZjEzNDQyOThiZmY2Nzg5OGEwMzAxMjIyODQ5MjI0NzA0MjgyMjQ5Mjg0OThiZmQ4YmZlMzgwMDEyNDQyNzBjMjIzNTAxMjIzNTAyMjgzNTAzMjgzNTA0Mjk2NDE1Mjg4OGZlNzMyOTY0NTAzNTAzMzQwNDJiMzQwMTI0NTI1MDM0MDM1MDM1MDQzNDAyMzQwMzE1MDgyMzA5MzUwMjI0MjMwODM1MDEzMjA5MTUyODg4ZmU0YjMyMDk1MDM1MDMzNDA0MmIzNDAxMjU1MjUwMzQwMzUwMzUwNDM0MDIzNDAzMTUwODIzMDkzNTAyMjUyMzA4MzUwMTM0MDQyYjM0MDE0YjAxMTU1MjUwMzUwNDM0MDQ1MDAzOGMwMThiMDExNTgxMjAxMjQ0OGJmZjM4MTAyMzEyOGJmZjM4MDgyNzA3NjQxMjEwOGJmZjM4MDc4YjAxMTIxMDhiZmYzODEwODEwNDEyOGJmZjM4MTQ4YjAxMTIxMDhiZmYzODEyMjcwNzY0MTIxMDExNDQyNzA2NjQyMjBkNDAwMDNjOGJmZGJkMzUwNjM1MDUzNDA2NDAwMDA5MmEyYTY0MjMwODY3NDIwMDMzOGIgLy8gMHgwODIwMDYwMDAxMDgwYzgwMDFmZjAxMjYwZjAwMDc2ZDYxNmU2MTY3NjU3MjBiNjE2Mzc0Njk3NjY1NWY3Mzc1NjI3M2UxMDUwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5MDQxNTFmN2M3NTA5NmM2OTY2NjU2Mzc5NjM2YzY1MDg2ZDYxNzg1ZjczNzU2MjczMDU3MDcyNjk2MzY1MDg3Mzc1NjI1Zjc0Nzk3MDY1MGE3NDZmNzQ2MTZjNWY3Mzc1NjI3MzBhNjU3ODcwNjk3MjY1NzM1ZjY5NmUwNDZlNjE2ZDY1MDc1MDcyNmY2NzcyNjE2ZDA3NjM2ZjY5NmU1ZjY5NjQwNzc2NjU3MjczNjk2ZjZlMzExYjIyMTI0MDAxZjQzNjFhMDA4MDA0N2RlNmVlM2YxMjQwMDE5YjM2MWEwMDgwMDRjODZmZGIwMTEyNDAwMTdjMzYxYTAwODAwNGY2Y2NmZDViMTI0MDAxMzgzNjFhMDA4MDA0ZGQzYTU0OTYxMjQwMDExMTM2MWEwMDgwMDQxZWM1ZTk4YTEyNDAwMGU5MzYxYTAwODAwNDM1NDkzODY4MTI0MDAwYzkzNjFhMDA4MDA0N2IyZWNjMzExMjQwMDA5ZTM2MWEwMDgwMDQ5MmE5MGFmNjEyNDAwMDc0MzYxYTAwODAwNDgyZDU3ZmNjMTI0MDAwNDkzNjFhMDA4MDA0MjhlMWVhOGYxMjQwMDAxZTM2MWEwMDgwMDQyNDM3OGQzYzEyNDAwMDAxMDAzMTE5ODEwNTEyMzExODIyMTMxMDQ0ODgwNzA4MjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxMzUzNTM2MWEwMjE3MzUzNjM0MzUzNDM2ODgwNjQ5MjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzExNjIzMDkzNTM0MzQzNDM4MTAyMzEyNDQzNDM0ODgwNTcwMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxMjI1NTg4MDUyZDM1MzMyNzA0MzQzMzE2NTBiMDIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDM2MWEwMTM1MzEzNjFhMDIxNzM1MzIzNDMxMzQzMjg4MDRiZjIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDM2MWEwMTE3ODgwNDkyMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxODgwNDRiMzUzMDI3MDQzNDMwMTY1MGIwMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxODgwNDFkMzUyZjI3MDQzNDJmNTBiMDIzNDMzMTE5MjIxMjMxMTgyMjEzMTA0NDM2MWEwMTM1MmIzMTE2ODEwMjA5MzUyYzM0MmMzODEwMjMxMjQ0MzExNjIzMDkzNTJkMzQyYjM0MmMzNDJkODgwMjMzMzUyZTI3MDQzNDJlMTY1MGIwMjM0MzMxMTkyMjEyMzExODIyMTMxMDQ0MzYxYTAxODgwMjA0MjM0MzMxMTkyMjEyMzExODIyMTIxMDQ0MzYxYTAxMzUyMzM2MWEwMjM1MjQzNjFhMDMzNTI1MzYxYTA0MTczNTI2MzYxYTA1MTczNTI3MzYxYTA2MTczNTI4MzYxYTA3MTczNTI5MzYxYTA4MTczNTJhMzQyMzM0MjQzNDI1MzQyNjM0MjczNDI4MzQyOTM0MmE4ODAwOTkyMzQzMzExOTIzMTI0MDAwMTMzMTE5ODEwMjEyNDAwMDAxMDAzMTE4MjIxMzQ0ODgwMGU3MjM0MzMxMTgyMjEzNDQ4ODAwZDkyMzQzOGEwMTAxODAwYTMwMzEzMjMzMzQzNTM2MzczODM5OGJmZjIzNTg4OThhMDEwMThiZmYyMjEyNDAwMDIyOGJmZjgxMGEwYTIyMGQ0MDAwMGQyODhiZmY4MTBhMTg4OGZmY2Y1MDQyMDAwZThiZmY4MTBhMGE4OGZmZDc0MmZmZTk4MDAxMzA4OThhMDIwMThiZmY4YmZlMjEwNDBmNDAwMDBjOGJmZTIxMDUxYTE2NTcwNzAxNDIwMDE0OGJmZTgxMDc5MThiZmUyMTA1MWEyMTA0MTkxNjU3MDcwMTg4ZmZkMzUwODk4YTA4MDAyYTIyNjcyNzBkMjI2NzI3MGEyMjY3MjcwNTIyNjcyOTMyMDk2NzI3MDYyMjY3MjcwYjgwMDc2NDY1NjY2MTc1NmM3NDY3MjcwNzIyNjcyNzA4MjI2NzI3MDkyMjY3MjcwZTI4NjcyNzBlOGJmODU3MDIwMDY3MjcwYjhiZjk1NzAyMDA2NzI5OGJmYTY3MjcwODhiZmI2NzI3MDc4YmZjNjcyNzA2OGJmZDY3MjcwZDhiZmU2NzI3MGE4YmZmNjc4OThhMDAwMDg5OGEwMDAwMjM0MzhhMDMwMWIxODEwM2IyMTAyM2IyMjIyMmIyMjMyM2IyMjQ4YmZlYjIyNThiZmRiMjI2OGJmZmIyMjczMjBhYjIyOTMyMGFiMjJhMzIwYWIyMmIzMjBhYjIyYzIyYjIwMWIzYjQzYzg5OGEwMzAwYjE4MTA0YjIxMDhiZmRiMjExMjNiMjEyOGJmZWIyMTM4YmZmYjIxNDIyYjIwMWIzODk4YTAxMDBiMTgxMDNiMjEwOGJmZmIyMjEyMmIyMDFiMzg5OGEwMjAwOGJmZThiZmY3MDAwMzUxYTM1MTkzNDFhMzQxOTIyMGQxMDQwMDAxNThiZmY4OGZmZDMyYTY0MjIxMzQxMDAxNTJhMmE2NDIzMDk2NzQyMDAwYzhiZmY4YmZlMzIwYTg4ZmY5ZTQyZmZkZjhiZmViYzQ4ODk4YTAyMDE4YmZlMjIxMjQwMDAwODMyMDc4YmZmMDg0MjAwMDEyMjg5OGEwMTAwMzEwMDMyMDkxMjQ0Mjk2NDhiZmYxMzQ0Mjk4YmZmNjc4OThhMDMwMTIyMjg0OTIyNDcwNDI4MjI0OTI4NDk4YmZkOGJmZTM4MDAxMjQ0MjcwYzIyMzUwMTIyMzUwMjI4MzUwMzI4MzUwNDI5NjQxNTI4ODhmZTczMjk2NDUwMzUwMzM0MDQyYjM0MDEyNDUyNTAzNDAzNTAzNTA0MzQwMjM0MDMxNTA4MjMwOTM1MDIyNDIzMDgzNTAxMzIwOTE1Mjg4OGZlNGIzMjA5NTAzNTAzMzQwNDJiMzQwMTI1NTI1MDM0MDM1MDM1MDQzNDAyMzQwMzE1MDgyMzA5MzUwMjI1MjMwODM1MDEzNDA0MmIzNDAxNGIwMTE1NTI1MDM1MDQzNDA0NTAwMzhjMDE4YjAxMTU4MTIwMTI0NDhiZmYzODEwMjMxMjhiZmYzODA4MjcwNzY0MTIxMDhiZmYzODA3OGIwMTEyMTA4YmZmMzgxMDgxMDQxMjhiZmYzODE0OGIwMTEyMTA4YmZmMzgxMjI3MDc2NDEyMTAxMTQ0MjcwNjY0MjIwZDQwMDAzYzhiZmRiZDM1MDYzNTA1MzQwNjQwMDAwOTJhMmE2NDIzMDg2NzQyMDAzMzhiCml0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKcHVzaGJ5dGVzIDB4ZmRiZTM1MDgzNTA3MzQwODQ0MzQwNzhjMDI4YjAyODExODViOGMwMzhiMDMyMjEzNDAwMDAyMjI0MzhiMDMzMjA3MGM0NDQyMDAwYzJhNjQyMzA4MjcwNjY0MGU0NDQyZmZiODI3MDkyNzA5NjQyMzA4Njc4MDAxMjMyNzA5NjQ4OGZkNGY1MDgwMDMyMDJkMjA1MDI3MGI2NDUwODAwMzUzNTQ1MDgwNDI2OTcwNjY3MzNhMmYyZjYyNjE2Njc5NjI2NTY5NjM2NDY0N2EzNzZiNjI3NTc4NjE2YTZhMzY2MjZmNjIzNTYyNmE3MTc0Nzc2NTcxMzY3NzYzNjg2YjY0NmI2OTcxMzQ3Njc2Njg3NzcyNzc3MjZlNjUzNzY5N2EzNDY2MzIzNTc4Njk4OGZkYzQzNTAwMzQwMDIyMTM0NDI3MDg2NDhjMDQzNDAwOGMwNTMyMDc4YzA2MjcwODY0MjcwYTY0ODhmZTQ1OGMwNzhiMDQxNjhiMDUxNjUwOGIwNjE2NTA4YjA3MTY1MDhjMDg4YmZkYmM0ODhiZmQ4YjA4YmYzNDAwOGMwMDg5OGEwMTAxMjg4YmZmYmUzNTBhMzUwOTM0MGE0NDM0MDk4YzAwODk4YTAxMDEyMjI4MjI4YmZmYmQzNTBjMzUwYjM0MGM0MDAwMDYyMjhjMDA0MjAwMWM4YmZmYmUzNTBlMzUwZDM0MGU0NDM0MGQ4YzAxOGIwMTgxMTg1YjhjMDI4YjAyMzIwNzBkOGMwMDg5OGEwMTAwMzEwMDhiZmY3MDAwMzUxMDM1MGYzNDEwNDQ4YmZmMzIwYTMxMDA4OGZkNTk4OThhMDIwMDI4MzEwMGJkMzUxMjM1MTEzNDEyNDQzMTAwOGJmZjcwMDAzNTE0MzUxMzM0MTQzNDEzMjIwZDEwNDEwMDA5OGJmZjMxMDAzMjBhODhmZDJkMzEwMGJlMzUxNjM1MTUzNDE2NDQzNDE1OGMwMDhiZmViYzQ4OGJmZThiMDBiZjMxMDBiYzQ4ODk4YTAxMDEyMjI4MjIzMTAwYmQzNTE4MzUxNzM0MTg0NDMxMDA4YzAxOGIwMTE1ODEyMDEyNDQ4YmZmYzAzMDhjMDI4YjAxOGIwMjg4ZmQxNjhiZmZjMDMwOGMwMDg5OGEwMTAwMjgzMTAwMjk2NDEyNDQzMTAwMjk2NDEyNDQ4YmZmMzgwMDI5NjQxMjQ0MjcwYzIyMzUxYjIyMzUxYzI4MzUxZDI4MzUxZTI5NjQxNTI4ODhmYmU1Mjk2NDUwMzUxZDM0MWUyYjM0MWIyNDUyNTAzNDFkNTAzNTFlMzQxYzM0MWQxNTA4MjMwOTM1MWMyNDIzMDgzNTFiMzIwOTE1Mjg4OGZiYmQzMjA5NTAzNTFkMzQxZTJiMzQxYjI1NTI1MDM0MWQ1MDM1MWUzNDFjMzQxZDE1MDgyMzA5MzUxYzI1MjMwODM1MWIzNDFlMmIzNDFiNGIwMTE1NTI1MDM1MWUzNDFlNTAwMzhjMDA4YjAwMTU4MTIwMTI0NDhiZmYzODA3OGIwMDEyNDQyYTY0MjIwZDQwMDAwYThiZmYzODA4MjIxMjQ0NDIwMDBlOGJmZjM4MDgzMjAwODEwMzBiMmE2NDBiMGY0NDI3MDUyMzY3ODk4YTAyMDAyODI3MDU2NDIzMTI0NDI3MGMyMjM1MWYyMjM1MjAyODM1MjEyODM1MjIyOTY0MTUyODg4ZmIzODI5NjQ1MDM1MjEzNDIyMmIzNDFmMjQ1MjUwMzQyMTUwMzUyMjM0MjAzNDIxMTUwODIzMDkzNTIwMjQyMzA4MzUxZjMyMDkxNTI4ODhmYjEwMzIwOTUwMzUyMTM0MjIyYjM0MWYyNTUyNTAzNDIxNTAzNTIyMzQyMDM0MjExNTA4MjMwOTM1MjAyNTIzMDgzNTFmMzQyMjJiMzQxZjRiMDExNTUyNTAzNTIyMzQyMjUwMDM4YzAwOGIwMDE1ODEyMDEyNDQ4YjAwMzExNjM4MDAxMjQ0MzExNjM4MjAzMjAzMTI0NDMxMTYzODA5MzIwMzEyNDQ4YmZlOGJmZjg4ZmJiNDg5OGEwMDAwMzEwMDMyMDkxMjQ0MjcwNTY0MjMxMjQ0MmE2NDIyMTI0NDg5IC8vIDB4ZmRiZTM1MDgzNTA3MzQwODQ0MzQwNzhjMDI4YjAyODExODViOGMwMzhiMDMyMjEzNDAwMDAyMjI0MzhiMDMzMjA3MGM0NDQyMDAwYzJhNjQyMzA4MjcwNjY0MGU0NDQyZmZiODI3MDkyNzA5NjQyMzA4Njc4MDAxMjMyNzA5NjQ4OGZkNGY1MDgwMDMyMDJkMjA1MDI3MGI2NDUwODAwMzUzNTQ1MDgwNDI2OTcwNjY3MzNhMmYyZjYyNjE2Njc5NjI2NTY5NjM2NDY0N2EzNzZiNjI3NTc4NjE2YTZhMzY2MjZmNjIzNTYyNmE3MTc0Nzc2NTcxMzY3NzYzNjg2YjY0NmI2OTcxMzQ3Njc2Njg3NzcyNzc3MjZlNjUzNzY5N2EzNDY2MzIzNTc4Njk4OGZkYzQzNTAwMzQwMDIyMTM0NDI3MDg2NDhjMDQzNDAwOGMwNTMyMDc4YzA2MjcwODY0MjcwYTY0ODhmZTQ1OGMwNzhiMDQxNjhiMDUxNjUwOGIwNjE2NTA4YjA3MTY1MDhjMDg4YmZkYmM0ODhiZmQ4YjA4YmYzNDAwOGMwMDg5OGEwMTAxMjg4YmZmYmUzNTBhMzUwOTM0MGE0NDM0MDk4YzAwODk4YTAxMDEyMjI4MjI4YmZmYmQzNTBjMzUwYjM0MGM0MDAwMDYyMjhjMDA0MjAwMWM4YmZmYmUzNTBlMzUwZDM0MGU0NDM0MGQ4YzAxOGIwMTgxMTg1YjhjMDI4YjAyMzIwNzBkOGMwMDg5OGEwMTAwMzEwMDhiZmY3MDAwMzUxMDM1MGYzNDEwNDQ4YmZmMzIwYTMxMDA4OGZkNTk4OThhMDIwMDI4MzEwMGJkMzUxMjM1MTEzNDEyNDQzMTAwOGJmZjcwMDAzNTE0MzUxMzM0MTQzNDEzMjIwZDEwNDEwMDA5OGJmZjMxMDAzMjBhODhmZDJkMzEwMGJlMzUxNjM1MTUzNDE2NDQzNDE1OGMwMDhiZmViYzQ4OGJmZThiMDBiZjMxMDBiYzQ4ODk4YTAxMDEyMjI4MjIzMTAwYmQzNTE4MzUxNzM0MTg0NDMxMDA4YzAxOGIwMTE1ODEyMDEyNDQ4YmZmYzAzMDhjMDI4YjAxOGIwMjg4ZmQxNjhiZmZjMDMwOGMwMDg5OGEwMTAwMjgzMTAwMjk2NDEyNDQzMTAwMjk2NDEyNDQ4YmZmMzgwMDI5NjQxMjQ0MjcwYzIyMzUxYjIyMzUxYzI4MzUxZDI4MzUxZTI5NjQxNTI4ODhmYmU1Mjk2NDUwMzUxZDM0MWUyYjM0MWIyNDUyNTAzNDFkNTAzNTFlMzQxYzM0MWQxNTA4MjMwOTM1MWMyNDIzMDgzNTFiMzIwOTE1Mjg4OGZiYmQzMjA5NTAzNTFkMzQxZTJiMzQxYjI1NTI1MDM0MWQ1MDM1MWUzNDFjMzQxZDE1MDgyMzA5MzUxYzI1MjMwODM1MWIzNDFlMmIzNDFiNGIwMTE1NTI1MDM1MWUzNDFlNTAwMzhjMDA4YjAwMTU4MTIwMTI0NDhiZmYzODA3OGIwMDEyNDQyYTY0MjIwZDQwMDAwYThiZmYzODA4MjIxMjQ0NDIwMDBlOGJmZjM4MDgzMjAwODEwMzBiMmE2NDBiMGY0NDI3MDUyMzY3ODk4YTAyMDAyODI3MDU2NDIzMTI0NDI3MGMyMjM1MWYyMjM1MjAyODM1MjEyODM1MjIyOTY0MTUyODg4ZmIzODI5NjQ1MDM1MjEzNDIyMmIzNDFmMjQ1MjUwMzQyMTUwMzUyMjM0MjAzNDIxMTUwODIzMDkzNTIwMjQyMzA4MzUxZjMyMDkxNTI4ODhmYjEwMzIwOTUwMzUyMTM0MjIyYjM0MWYyNTUyNTAzNDIxNTAzNTIyMzQyMDM0MjExNTA4MjMwOTM1MjAyNTIzMDgzNTFmMzQyMjJiMzQxZjRiMDExNTUyNTAzNTIyMzQyMjUwMDM4YzAwOGIwMDE1ODEyMDEyNDQ4YjAwMzExNjM4MDAxMjQ0MzExNjM4MjAzMjAzMTI0NDMxMTYzODA5MzIwMzEyNDQ4YmZlOGJmZjg4ZmJiNDg5OGEwMDAwMzEwMDMyMDkxMjQ0MjcwNTY0MjMxMjQ0MmE2NDIyMTI0NDg5Cml0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtUGFnZXMKcHVzaGJ5dGVzIDB4MDg4MTAwNDMgLy8gMHgwODgxMDA0MwppdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtUGFnZXMKaW50Y18xIC8vIDEKaXR4bl9maWVsZCBFeHRyYVByb2dyYW1QYWdlcwpwdXNoaW50IDMgLy8gMwppdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQppbnRjXzIgLy8gOAppdHhuX2ZpZWxkIEdsb2JhbE51bVVpbnQKcHVzaGJ5dGVzIDB4N2RlNmVlM2YgLy8gMHg3ZGU2ZWUzZgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTEwCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAtOQppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgMQppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTgKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTcKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTYKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTUKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwpmcmFtZV9kaWcgLTQKaXRvYgppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwppdHhuX3N1Ym1pdAppdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgMgpmcmFtZV9idXJ5IDAKYnl0ZWNfMiAvLyAiUHJvZ3JhbSIKaW50Y18wIC8vIDAKc3RvcmUgMjAKaW50Y18wIC8vIDAKc3RvcmUgMjEKYnl0ZWNfMCAvLyAiIgpzdG9yZSAyMgpieXRlY18wIC8vICIiCnN0b3JlIDIzCmZyYW1lX2RpZyAxCmxlbgpieXRlY18wIC8vICIiCmNhbGxzdWIgZW5jb2RldXZhcmludGltcGxfMApmcmFtZV9kaWcgMQpjb25jYXQKc3RvcmUgMjIKbG9hZCAyMwpieXRlY18xIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDIwCmludGNfMiAvLyA4CnN1YnN0cmluZzMKY29uY2F0CmxvYWQgMjIKY29uY2F0CnN0b3JlIDIzCmxvYWQgMjEKbG9hZCAyMgpsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDIxCmludGNfMiAvLyA4CmludGNfMSAvLyAxCisKc3RvcmUgMjAKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8wCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmNvbmNhdApzdG9yZSAyMgpsb2FkIDIzCmJ5dGVjXzEgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgMjAKaW50Y18zIC8vIDEyCnN1YnN0cmluZzMKY29uY2F0CmxvYWQgMjIKY29uY2F0CnN0b3JlIDIzCmxvYWQgMjEKbG9hZCAyMgpsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDIxCmludGNfMyAvLyAxMgppbnRjXzEgLy8gMQorCnN0b3JlIDIwCmxvYWQgMjMKYnl0ZWNfMSAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCAyMApkaWcgMQpsZW4Kc3Vic3RyaW5nMwpjb25jYXQKc3RvcmUgMjMKbG9hZCAyMwpjb25jYXQKc2hhNTEyXzI1NgpmcmFtZV9idXJ5IDMKZnJhbWVfZGlnIDMKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDMKY29uY2F0CmZyYW1lX2J1cnkgMwpmcmFtZV9kaWcgMwpleHRyYWN0IDIgMApmcmFtZV9kaWcgLTIKPT0KYXNzZXJ0CmZyYW1lX2RpZyAyCmZyYW1lX2RpZyAtNQpmcmFtZV9kaWcgLTIKY2FsbHN1YiBvcHRpbnNtaXRvbG9ja2VyXzIKZnJhbWVfZGlnIDMKZXh0cmFjdCAyIDAKZnJhbWVfZGlnIC0yCj09CmFzc2VydAppdHhuX2JlZ2luCmZyYW1lX2RpZyAzCmV4dHJhY3QgMiAwCml0eG5fZmllbGQgU2VuZGVyCmludGNfMSAvLyBwYXkKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgMwpleHRyYWN0IDIgMAppdHhuX2ZpZWxkIFJlY2VpdmVyCmZyYW1lX2RpZyAzCmV4dHJhY3QgMiAwCml0eG5fZmllbGQgUmVrZXlUbwppbnRjIDcgLy8gMTAwMDAwCml0eG5fZmllbGQgQW1vdW50Cmdsb2JhbCBNaW5UeG5GZWUKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKcmV0c3ViCgovLyB0cmFuc2Zlcl9zbWkKdHJhbnNmZXJzbWlfNDoKcHJvdG8gNSAxCmJ5dGVjXzAgLy8gIiIKZHVwbiAzCmludGNfMCAvLyAwCmR1cApieXRlY18wIC8vICIiCmR1cApmcmFtZV9kaWcgLTMKYm94X2xlbgpzdG9yZSAyNQpzdG9yZSAyNApsb2FkIDI1CmludGNfMCAvLyAwCj09Ci8vIE5ldyBvd25lciBoYXMgcGVuZGluZyBzdWJzY3JpcHRpb24gdHJhbnNmZXJzCmFzc2VydApieXRlY18yIC8vICJQcm9ncmFtIgppbnRjXzAgLy8gMApzdG9yZSAyNgppbnRjXzAgLy8gMApzdG9yZSAyNwpieXRlY18wIC8vICIiCnN0b3JlIDI4CmJ5dGVjXzAgLy8gIiIKc3RvcmUgMjkKZnJhbWVfZGlnIC0xCmd0eG5zIFNlbmRlcgpsZW4KYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzAKZnJhbWVfZGlnIC0xCmd0eG5zIFNlbmRlcgpjb25jYXQKc3RvcmUgMjgKbG9hZCAyOQpieXRlY18xIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDI2CmludGNfMiAvLyA4CnN1YnN0cmluZzMKY29uY2F0CmxvYWQgMjgKY29uY2F0CnN0b3JlIDI5CmxvYWQgMjcKbG9hZCAyOApsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDI3CmludGNfMiAvLyA4CmludGNfMSAvLyAxCisKc3RvcmUgMjYKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8wCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmNvbmNhdApzdG9yZSAyOApsb2FkIDI5CmJ5dGVjXzEgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgMjYKaW50Y18zIC8vIDEyCnN1YnN0cmluZzMKY29uY2F0CmxvYWQgMjgKY29uY2F0CnN0b3JlIDI5CmxvYWQgMjcKbG9hZCAyOApsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDI3CmludGNfMyAvLyAxMgppbnRjXzEgLy8gMQorCnN0b3JlIDI2CmxvYWQgMjkKYnl0ZWNfMSAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCAyNgpkaWcgMQpsZW4Kc3Vic3RyaW5nMwpjb25jYXQKc3RvcmUgMjkKbG9hZCAyOQpjb25jYXQKc2hhNTEyXzI1NgpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKbGVuCnB1c2hpbnQgMzIgLy8gMzIKPT0KYXNzZXJ0CmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAtNAo9PQovLyBPbGQgbG9ja2VyIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggYWNjb3VudCByZWZlcmVuY2UKYXNzZXJ0CmJ5dGVjXzIgLy8gIlByb2dyYW0iCmludGNfMCAvLyAwCnN0b3JlIDMwCmludGNfMCAvLyAwCnN0b3JlIDMxCmJ5dGVjXzAgLy8gIiIKc3RvcmUgMzIKYnl0ZWNfMCAvLyAiIgpzdG9yZSAzMwpmcmFtZV9kaWcgLTMKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8wCmZyYW1lX2RpZyAtMwpjb25jYXQKc3RvcmUgMzIKbG9hZCAzMwpieXRlY18xIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDMwCmludGNfMiAvLyA4CnN1YnN0cmluZzMKY29uY2F0CmxvYWQgMzIKY29uY2F0CnN0b3JlIDMzCmxvYWQgMzEKbG9hZCAzMgpsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDMxCmludGNfMiAvLyA4CmludGNfMSAvLyAxCisKc3RvcmUgMzAKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8wCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmNvbmNhdApzdG9yZSAzMgpsb2FkIDMzCmJ5dGVjXzEgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgMzAKaW50Y18zIC8vIDEyCnN1YnN0cmluZzMKY29uY2F0CmxvYWQgMzIKY29uY2F0CnN0b3JlIDMzCmxvYWQgMzEKbG9hZCAzMgpsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDMxCmludGNfMyAvLyAxMgppbnRjXzEgLy8gMQorCnN0b3JlIDMwCmxvYWQgMzMKYnl0ZWNfMSAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCAzMApkaWcgMQpsZW4Kc3Vic3RyaW5nMwpjb25jYXQKc3RvcmUgMzMKbG9hZCAzMwpjb25jYXQKc2hhNTEyXzI1NgpmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIDIKbGVuCnB1c2hpbnQgMzIgLy8gMzIKPT0KYXNzZXJ0CmZyYW1lX2RpZyAyCmZyYW1lX2RpZyAtMgo9PQovLyBOZXcgbG9ja2VyIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggYWNjb3VudCByZWZlcmVuY2UKYXNzZXJ0Cml0eG5fYmVnaW4KaW50Y18xIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIFJlY2VpdmVyCmludGMgNiAvLyAyMDAwMDAKaXR4bl9maWVsZCBBbW91bnQKZ2xvYmFsIE1pblR4bkZlZQppdHhuX2ZpZWxkIEZlZQppdHhuX3N1Ym1pdAppdHhuX2JlZ2luCmZyYW1lX2RpZyAtNAppdHhuX2ZpZWxkIFNlbmRlcgpwdXNoaW50IDYgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCnB1c2hpbnQgMiAvLyBDbG9zZU91dAppdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgpmcmFtZV9kaWcgLTUKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0Cml0eG5fYmVnaW4KcHVzaGludCA2IC8vIGFwcGwKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTUKaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECnB1c2hieXRlcyAweGM4NmZkYjAxIC8vICJ1cGRhdGVfbWFuYWdlcihhZGRyZXNzKXZvaWQiCml0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCmZyYW1lX2RpZyAtMwppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwppdHhuX3N1Ym1pdAppdHhuX2JlZ2luCmZyYW1lX2RpZyAtNAppdHhuX2ZpZWxkIFNlbmRlcgppbnRjXzEgLy8gcGF5Cml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC00Cml0eG5fZmllbGQgUmVjZWl2ZXIKZnJhbWVfZGlnIC00Cml0eG5fZmllbGQgUmVrZXlUbwppbnRjIDcgLy8gMTAwMDAwCml0eG5fZmllbGQgQW1vdW50Cmdsb2JhbCBNaW5UeG5GZWUKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAtNQppdG9iCmNvbmNhdApmcmFtZV9idXJ5IDMKZnJhbWVfZGlnIC0zCmJveF9kZWwKcG9wCmZyYW1lX2RpZyAtMwpmcmFtZV9kaWcgMwpib3hfcHV0CmZyYW1lX2RpZyAtMwpib3hfZ2V0CnN0b3JlIDM1CnN0b3JlIDM0CmxvYWQgMzUKYXNzZXJ0CmxvYWQgMzQKZnJhbWVfYnVyeSAwCnJldHN1YgoKLy8gY2xhaW1fc21pCmNsYWltc21pXzU6CnByb3RvIDMgMApieXRlY18wIC8vICIiCmR1cAppbnRjXzAgLy8gMApieXRlY18yIC8vICJQcm9ncmFtIgppbnRjXzAgLy8gMApzdG9yZSAzNgppbnRjXzAgLy8gMApzdG9yZSAzNwpieXRlY18wIC8vICIiCnN0b3JlIDM4CmJ5dGVjXzAgLy8gIiIKc3RvcmUgMzkKZnJhbWVfZGlnIC0zCmxlbgpieXRlY18wIC8vICIiCmNhbGxzdWIgZW5jb2RldXZhcmludGltcGxfMApmcmFtZV9kaWcgLTMKY29uY2F0CnN0b3JlIDM4CmxvYWQgMzkKYnl0ZWNfMSAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCAzNgppbnRjXzIgLy8gOApzdWJzdHJpbmczCmNvbmNhdApsb2FkIDM4CmNvbmNhdApzdG9yZSAzOQpsb2FkIDM3CmxvYWQgMzgKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSAzNwppbnRjXzIgLy8gOAppbnRjXzEgLy8gMQorCnN0b3JlIDM2Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmxlbgpieXRlY18wIC8vICIiCmNhbGxzdWIgZW5jb2RldXZhcmludGltcGxfMApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpjb25jYXQKc3RvcmUgMzgKbG9hZCAzOQpieXRlY18xIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDM2CmludGNfMyAvLyAxMgpzdWJzdHJpbmczCmNvbmNhdApsb2FkIDM4CmNvbmNhdApzdG9yZSAzOQpsb2FkIDM3CmxvYWQgMzgKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSAzNwppbnRjXzMgLy8gMTIKaW50Y18xIC8vIDEKKwpzdG9yZSAzNgpsb2FkIDM5CmJ5dGVjXzEgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgMzYKZGlnIDEKbGVuCnN1YnN0cmluZzMKY29uY2F0CnN0b3JlIDM5CmxvYWQgMzkKY29uY2F0CnNoYTUxMl8yNTYKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmxlbgpwdXNoaW50IDMyIC8vIDMyCj09CmFzc2VydAp0eG4gU2VuZGVyCmJveF9nZXQKc3RvcmUgNDEKc3RvcmUgNDAKbG9hZCA0MQphc3NlcnQKbG9hZCA0MApmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKcHVzaGludCAzMiAvLyAzMgpleHRyYWN0X3VpbnQ2NApmcmFtZV9idXJ5IDIKZnJhbWVfZGlnIDIKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwo9PQphc3NlcnQKZnJhbWVfZGlnIDIKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAwCmNhbGxzdWIgb3B0aW5zbWl0b2xvY2tlcl8yCml0eG5fYmVnaW4KZnJhbWVfZGlnIDAKaXR4bl9maWVsZCBTZW5kZXIKaW50Y18xIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAwCml0eG5fZmllbGQgUmVjZWl2ZXIKZnJhbWVfZGlnIDAKaXR4bl9maWVsZCBSZWtleVRvCmludGNfMCAvLyAwCml0eG5fZmllbGQgQW1vdW50CmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CmZyYW1lX2RpZyAtMwpib3hfZGVsCnBvcApyZXRzdWIKCi8vIHJla2V5X2xvY2tlcl9iYWNrCnJla2V5bG9ja2VyYmFja182Ogpwcm90byAxIDAKYnl0ZWNfMCAvLyAiIgpieXRlY18yIC8vICJQcm9ncmFtIgppbnRjXzAgLy8gMApzdG9yZSA0MgppbnRjXzAgLy8gMApzdG9yZSA0MwpieXRlY18wIC8vICIiCnN0b3JlIDQ0CmJ5dGVjXzAgLy8gIiIKc3RvcmUgNDUKdHhuIFNlbmRlcgpsZW4KYnl0ZWNfMCAvLyAiIgpjYWxsc3ViIGVuY29kZXV2YXJpbnRpbXBsXzAKdHhuIFNlbmRlcgpjb25jYXQKc3RvcmUgNDQKbG9hZCA0NQpieXRlY18xIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDQyCmludGNfMiAvLyA4CnN1YnN0cmluZzMKY29uY2F0CmxvYWQgNDQKY29uY2F0CnN0b3JlIDQ1CmxvYWQgNDMKbG9hZCA0NApsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDQzCmludGNfMiAvLyA4CmludGNfMSAvLyAxCisKc3RvcmUgNDIKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8wCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmNvbmNhdApzdG9yZSA0NApsb2FkIDQ1CmJ5dGVjXzEgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgNDIKaW50Y18zIC8vIDEyCnN1YnN0cmluZzMKY29uY2F0CmxvYWQgNDQKY29uY2F0CnN0b3JlIDQ1CmxvYWQgNDMKbG9hZCA0NApsZW4KKwppbnRjXzEgLy8gMQotCnN0b3JlIDQzCmludGNfMyAvLyAxMgppbnRjXzEgLy8gMQorCnN0b3JlIDQyCmxvYWQgNDUKYnl0ZWNfMSAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCA0MgpkaWcgMQpsZW4Kc3Vic3RyaW5nMwpjb25jYXQKc3RvcmUgNDUKbG9hZCA0NQpjb25jYXQKc2hhNTEyXzI1NgpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKbGVuCml0b2IKZXh0cmFjdCA2IDAKZnJhbWVfZGlnIDAKY29uY2F0CmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMApleHRyYWN0IDIgMApmcmFtZV9kaWcgLTEKPT0KLy8gTG9ja2VyIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggYWNjb3VudCByZWZlcmVuY2UKYXNzZXJ0Cml0eG5fYmVnaW4KZnJhbWVfZGlnIDAKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBTZW5kZXIKaW50Y18xIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAwCmV4dHJhY3QgMiAwCml0eG5fZmllbGQgUmVjZWl2ZXIKZnJhbWVfZGlnIDAKZXh0cmFjdCAyIDAKaXR4bl9maWVsZCBSZWtleVRvCmludGNfMCAvLyAwCml0eG5fZmllbGQgQW1vdW50CmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CnJldHN1YgoKLy8gZGVsZXRlX3NtaQpkZWxldGVzbWlfNzoKcHJvdG8gMSAwCmJ5dGVjXzAgLy8gIiIKYnl0ZWNfMiAvLyAiUHJvZ3JhbSIKaW50Y18wIC8vIDAKc3RvcmUgNDYKaW50Y18wIC8vIDAKc3RvcmUgNDcKYnl0ZWNfMCAvLyAiIgpzdG9yZSA0OApieXRlY18wIC8vICIiCnN0b3JlIDQ5CnR4biBTZW5kZXIKbGVuCmJ5dGVjXzAgLy8gIiIKY2FsbHN1YiBlbmNvZGV1dmFyaW50aW1wbF8wCnR4biBTZW5kZXIKY29uY2F0CnN0b3JlIDQ4CmxvYWQgNDkKYnl0ZWNfMSAvLyAweDA4MjAwNDAxMDAwMjA0ODAwMDM1MDA4MDAwMzUwMTMyMDQyNDEyNDAwMTVlMjM0MDAxNTAzMjA0MjQxMjQwMDEzNDIzNDAwMTI4MzIwNDIyMTI0MDAxMTIyMzQwMDBmYTMyMDQyNDEyNDAwMGRlMzIwNDgxMDMxMjQwMDBiYjIzNDAwMDk0MzIwNDI0MTI0MDAwNzkyMzQwMDA2ZDMyMDQ4MTExMGU0MDAwMDkyMzQwMDAwMTAwMjI0MjAxMmEyMzM1MDIyMzM1MDMyMzM1MDIzNDAyMzIwNDBjNDAwMDA4MzQwMzMyMDQxMjQyZmZkZjM0MDIzODEwODEwNjEyNDQzNDAyMzgxOTIzMTI0NDM0MDIzODA5MzIwMzEyNDQzNDAyMzgyMDMyMDMxMjQ0MzQwMjM4MDEyMzEyMzQwMjM4MDEzMjAwODEwMzMyMDQwYjBiMGUxMTQ0MzQwMzIyMDgzNTAzMzQwMjIyMDgzNTAyNDJmZmFkMzQwMDg4MDFlNDQyMDBjNjIzMzgxMDIyMTIyMjM4MTAyNTEyMjIzODEwMjIxMjExMTA0MmZmNzQzMjA0MjQxMjQwMDAxNDMyMDQ4MTAzMTI0MDAwMDQyMzQyMDA5ZjM0MDE4ODAxMTE0MjAwOTczNDAxODgwMGU2NDIwMDhmMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwMjQzODEwMjUxMjEwNDJmZjJiMjMzODEwMjIxMjIyMzgxMDgxMDYxMjEwMjIzODE5MjIxMjEwNDJmZjE2MjM4MTA2ODgwMDVhMjMzODAxMzIwMDMyMDQwYjBlNDQyMjQyMDA0YjIzMzgxMDgxMDYxMjIzMzgxOTI0MTIxMDQyZmVlMDM0MDE4ODAxMGU0MjAwMzQyMzM4MTAyMjEyMjIzODEwMjUxMjEwMjIzODE0MzQwMDEzMTA0MmZlYjgzNDAwMzQwMTg4MDBhYzQyMDAxNTIzMzgxMDIyMTIyMjM4MTAyMjEyMTAyMjM4MDczNDAwMTMxMDQyZmU4ZTQzOGEwMjAwOGJmZTMyMDQwYzQ0OGJmZTM4MTA4YmZmMTI0NDhiZmUzODA5MzIwMzEyNDQ4YmZlMzgxMDI1MTI0MTAwMDg4YmZlMzgxNTMyMDMxMjQ0ODk4YTAzMDA4YmZkOGJmZjg4ZmZjYjhiZmQzODAxOGJmZTEyNDQ4OThhMDMwMDhiZmQ4YmZlOGJmZjg4ZmZlMThiZmQzODIwMzIwMzEyNDQ4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZmRlMjIyMzgxMDY4OGZmZDcyMzM4MDA4YmZmMTI0NDIyMzgxOTIyMTI0NDIyODk4YTAxMDEyNDIzMjU4OGZmYmYyNDM4MTMyNDM4MDcxMjQ0MjQzODEyMjMxMjQ0OGJmZjg4ZmZjMTg5OGEwMjAxMjMzMjAwMzIwNDBiMjI4OGZmOWUyMjIzMjI4OGZmODUyMzM4MDA4YmZlMTI0NDIzMzgwODgxYTA4ZDA2MGY0NDIyMzgwMDIyMzgwNzEyNDQyMjM4MDgyMzEyNDQyMjM4MjA4YmZmMTIyMjM4MjAzMjAzMTIxMTIyMTI0NDIyODk4YTAxMDEyMzMyMDAyNDBiMjI4OGZmNWMyMjMyMDAyNDBiMjU4OGZmNTMyMjM4MTMzMjAzMTI0NDIzMzgwMDhiZmYxMjQ0MjMzODA3MjIzODAwMTI0NDIzMzgwODgxZDBlODBjMGY0NDIyMzgwMDIyMzgxNDEyNDQyMjM4MTIyMzEyNDQyMjg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmMTcyMjM4MTAyNTEyNDAwMDA5MjIyMzIyODhmZjA5NDIwMDA2MjIyMzI1ODhmZjAwMjMzODAwOGJmZjEyNDQyMjM4MDc4YmZmMTIyMjM4MTQ4YmZmMTIxMTIyMTI0NDIyODkKbG9hZCA0NgppbnRjXzIgLy8gOApzdWJzdHJpbmczCmNvbmNhdApsb2FkIDQ4CmNvbmNhdApzdG9yZSA0OQpsb2FkIDQ3CmxvYWQgNDgKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSA0NwppbnRjXzIgLy8gOAppbnRjXzEgLy8gMQorCnN0b3JlIDQ2Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmxlbgpieXRlY18wIC8vICIiCmNhbGxzdWIgZW5jb2RldXZhcmludGltcGxfMApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpjb25jYXQKc3RvcmUgNDgKbG9hZCA0OQpieXRlY18xIC8vIDB4MDgyMDA0MDEwMDAyMDQ4MDAwMzUwMDgwMDAzNTAxMzIwNDI0MTI0MDAxNWUyMzQwMDE1MDMyMDQyNDEyNDAwMTM0MjM0MDAxMjgzMjA0MjIxMjQwMDExMjIzNDAwMGZhMzIwNDI0MTI0MDAwZGUzMjA0ODEwMzEyNDAwMGJiMjM0MDAwOTQzMjA0MjQxMjQwMDA3OTIzNDAwMDZkMzIwNDgxMTEwZTQwMDAwOTIzNDAwMDAxMDAyMjQyMDEyYTIzMzUwMjIzMzUwMzIzMzUwMjM0MDIzMjA0MGM0MDAwMDgzNDAzMzIwNDEyNDJmZmRmMzQwMjM4MTA4MTA2MTI0NDM0MDIzODE5MjMxMjQ0MzQwMjM4MDkzMjAzMTI0NDM0MDIzODIwMzIwMzEyNDQzNDAyMzgwMTIzMTIzNDAyMzgwMTMyMDA4MTAzMzIwNDBiMGIwZTExNDQzNDAzMjIwODM1MDMzNDAyMjIwODM1MDI0MmZmYWQzNDAwODgwMWU0NDIwMGM2MjMzODEwMjIxMjIyMzgxMDI1MTIyMjM4MTAyMjEyMTExMDQyZmY3NDMyMDQyNDEyNDAwMDE0MzIwNDgxMDMxMjQwMDAwNDIzNDIwMDlmMzQwMTg4MDExMTQyMDA5NzM0MDE4ODAwZTY0MjAwOGYyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTAyNDM4MTAyNTEyMTA0MmZmMmIyMzM4MTAyMjEyMjIzODEwODEwNjEyMTAyMjM4MTkyMjEyMTA0MmZmMTYyMzgxMDY4ODAwNWEyMzM4MDEzMjAwMzIwNDBiMGU0NDIyNDIwMDRiMjMzODEwODEwNjEyMjMzODE5MjQxMjEwNDJmZWUwMzQwMTg4MDEwZTQyMDAzNDIzMzgxMDIyMTIyMjM4MTAyNTEyMTAyMjM4MTQzNDAwMTMxMDQyZmViODM0MDAzNDAxODgwMGFjNDIwMDE1MjMzODEwMjIxMjIyMzgxMDIyMTIxMDIyMzgwNzM0MDAxMzEwNDJmZThlNDM4YTAyMDA4YmZlMzIwNDBjNDQ4YmZlMzgxMDhiZmYxMjQ0OGJmZTM4MDkzMjAzMTI0NDhiZmUzODEwMjUxMjQxMDAwODhiZmUzODE1MzIwMzEyNDQ4OThhMDMwMDhiZmQ4YmZmODhmZmNiOGJmZDM4MDE4YmZlMTI0NDg5OGEwMzAwOGJmZDhiZmU4YmZmODhmZmUxOGJmZDM4MjAzMjAzMTI0NDg5OGEwMTAxMjMzMjAwMzIwNDBiMjI4OGZmZGUyMjIzODEwNjg4ZmZkNzIzMzgwMDhiZmYxMjQ0MjIzODE5MjIxMjQ0MjI4OThhMDEwMTI0MjMyNTg4ZmZiZjI0MzgxMzI0MzgwNzEyNDQyNDM4MTIyMzEyNDQ4YmZmODhmZmMxODk4YTAyMDEyMzMyMDAzMjA0MGIyMjg4ZmY5ZTIyMjMyMjg4ZmY4NTIzMzgwMDhiZmUxMjQ0MjMzODA4ODFhMDhkMDYwZjQ0MjIzODAwMjIzODA3MTI0NDIyMzgwODIzMTI0NDIyMzgyMDhiZmYxMjIyMzgyMDMyMDMxMjExMjIxMjQ0MjI4OThhMDEwMTIzMzIwMDI0MGIyMjg4ZmY1YzIyMzIwMDI0MGIyNTg4ZmY1MzIyMzgxMzMyMDMxMjQ0MjMzODAwOGJmZjEyNDQyMzM4MDcyMjM4MDAxMjQ0MjMzODA4ODFkMGU4MGMwZjQ0MjIzODAwMjIzODE0MTI0NDIyMzgxMjIzMTI0NDIyODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmYxNzIyMzgxMDI1MTI0MDAwMDkyMjIzMjI4OGZmMDk0MjAwMDYyMjIzMjU4OGZmMDAyMzM4MDA4YmZmMTI0NDIyMzgwNzhiZmYxMjIyMzgxNDhiZmYxMjExMjIxMjQ0MjI4OQpsb2FkIDQ2CmludGNfMyAvLyAxMgpzdWJzdHJpbmczCmNvbmNhdApsb2FkIDQ4CmNvbmNhdApzdG9yZSA0OQpsb2FkIDQ3CmxvYWQgNDgKbGVuCisKaW50Y18xIC8vIDEKLQpzdG9yZSA0NwppbnRjXzMgLy8gMTIKaW50Y18xIC8vIDEKKwpzdG9yZSA0Ngpsb2FkIDQ5CmJ5dGVjXzEgLy8gMHgwODIwMDQwMTAwMDIwNDgwMDAzNTAwODAwMDM1MDEzMjA0MjQxMjQwMDE1ZTIzNDAwMTUwMzIwNDI0MTI0MDAxMzQyMzQwMDEyODMyMDQyMjEyNDAwMTEyMjM0MDAwZmEzMjA0MjQxMjQwMDBkZTMyMDQ4MTAzMTI0MDAwYmIyMzQwMDA5NDMyMDQyNDEyNDAwMDc5MjM0MDAwNmQzMjA0ODExMTBlNDAwMDA5MjM0MDAwMDEwMDIyNDIwMTJhMjMzNTAyMjMzNTAzMjMzNTAyMzQwMjMyMDQwYzQwMDAwODM0MDMzMjA0MTI0MmZmZGYzNDAyMzgxMDgxMDYxMjQ0MzQwMjM4MTkyMzEyNDQzNDAyMzgwOTMyMDMxMjQ0MzQwMjM4MjAzMjAzMTI0NDM0MDIzODAxMjMxMjM0MDIzODAxMzIwMDgxMDMzMjA0MGIwYjBlMTE0NDM0MDMyMjA4MzUwMzM0MDIyMjA4MzUwMjQyZmZhZDM0MDA4ODAxZTQ0MjAwYzYyMzM4MTAyMjEyMjIzODEwMjUxMjIyMzgxMDIyMTIxMTEwNDJmZjc0MzIwNDI0MTI0MDAwMTQzMjA0ODEwMzEyNDAwMDA0MjM0MjAwOWYzNDAxODgwMTExNDIwMDk3MzQwMTg4MDBlNjQyMDA4ZjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDI0MzgxMDI1MTIxMDQyZmYyYjIzMzgxMDIyMTIyMjM4MTA4MTA2MTIxMDIyMzgxOTIyMTIxMDQyZmYxNjIzODEwNjg4MDA1YTIzMzgwMTMyMDAzMjA0MGIwZTQ0MjI0MjAwNGIyMzM4MTA4MTA2MTIyMzM4MTkyNDEyMTA0MmZlZTAzNDAxODgwMTBlNDIwMDM0MjMzODEwMjIxMjIyMzgxMDI1MTIxMDIyMzgxNDM0MDAxMzEwNDJmZWI4MzQwMDM0MDE4ODAwYWM0MjAwMTUyMzM4MTAyMjEyMjIzODEwMjIxMjEwMjIzODA3MzQwMDEzMTA0MmZlOGU0MzhhMDIwMDhiZmUzMjA0MGM0NDhiZmUzODEwOGJmZjEyNDQ4YmZlMzgwOTMyMDMxMjQ0OGJmZTM4MTAyNTEyNDEwMDA4OGJmZTM4MTUzMjAzMTI0NDg5OGEwMzAwOGJmZDhiZmY4OGZmY2I4YmZkMzgwMThiZmUxMjQ0ODk4YTAzMDA4YmZkOGJmZThiZmY4OGZmZTE4YmZkMzgyMDMyMDMxMjQ0ODk4YTAxMDEyMzMyMDAzMjA0MGIyMjg4ZmZkZTIyMjM4MTA2ODhmZmQ3MjMzODAwOGJmZjEyNDQyMjM4MTkyMjEyNDQyMjg5OGEwMTAxMjQyMzI1ODhmZmJmMjQzODEzMjQzODA3MTI0NDI0MzgxMjIzMTI0NDhiZmY4OGZmYzE4OThhMDIwMTIzMzIwMDMyMDQwYjIyODhmZjllMjIyMzIyODhmZjg1MjMzODAwOGJmZTEyNDQyMzM4MDg4MWEwOGQwNjBmNDQyMjM4MDAyMjM4MDcxMjQ0MjIzODA4MjMxMjQ0MjIzODIwOGJmZjEyMjIzODIwMzIwMzEyMTEyMjEyNDQyMjg5OGEwMTAxMjMzMjAwMjQwYjIyODhmZjVjMjIzMjAwMjQwYjI1ODhmZjUzMjIzODEzMzIwMzEyNDQyMzM4MDA4YmZmMTI0NDIzMzgwNzIyMzgwMDEyNDQyMzM4MDg4MWQwZTgwYzBmNDQyMjM4MDAyMjM4MTQxMjQ0MjIzODEyMjMxMjQ0MjI4OThhMDEwMTIzMzIwMDMyMDQwYjIyODhmZjE3MjIzODEwMjUxMjQwMDAwOTIyMjMyMjg4ZmYwOTQyMDAwNjIyMjMyNTg4ZmYwMDIzMzgwMDhiZmYxMjQ0MjIzODA3OGJmZjEyMjIzODE0OGJmZjEyMTEyMjEyNDQyMjg5CmxvYWQgNDYKZGlnIDEKbGVuCnN1YnN0cmluZzMKY29uY2F0CnN0b3JlIDQ5CmxvYWQgNDkKY29uY2F0CnNoYTUxMl8yNTYKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmxlbgpwdXNoaW50IDMyIC8vIDMyCj09CmFzc2VydAppdHhuX2JlZ2luCmZyYW1lX2RpZyAwCml0eG5fZmllbGQgU2VuZGVyCnB1c2hpbnQgNiAvLyBhcHBsCml0eG5fZmllbGQgVHlwZUVudW0KcHVzaGludCAyIC8vIENsb3NlT3V0Cml0eG5fZmllbGQgT25Db21wbGV0aW9uCmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBGZWUKaXR4bl9zdWJtaXQKaXR4bl9iZWdpbgpwdXNoaW50IDYgLy8gYXBwbAppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKcHVzaGJ5dGVzIDB4MjQzNzhkM2MgLy8gImRlbGV0ZSgpdm9pZCIKaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCml0eG5fZmllbGQgT25Db21wbGV0aW9uCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0Cml0eG5fYmVnaW4KZnJhbWVfZGlnIDAKaXR4bl9maWVsZCBTZW5kZXIKaW50Y18xIC8vIHBheQppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAwCml0eG5fZmllbGQgUmVjZWl2ZXIKZnJhbWVfZGlnIDAKaXR4bl9maWVsZCBSZWtleVRvCmludGNfMCAvLyAwCml0eG5fZmllbGQgQW1vdW50CmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CnJldHN1Yg=="; + override clearProgram = + "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu"; + override methods: algosdk.ABIMethod[] = [ + new algosdk.ABIMethod({ + name: "add", + desc: "", + 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: "uint64", name: "expires_in", 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: "", + 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: "", + args: [ + { type: "address", name: "new_owner", desc: "" }, + { type: "application", name: "smi", desc: "" }, + { type: "uint64", name: "coin_id", desc: "" }, + ], + returns: { type: "void", desc: "" }, + }), + new algosdk.ABIMethod({ + name: "rekey_locker_back", + desc: "", + args: [{ type: "address", name: "locker_address", desc: "" }], + 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; + expires_in: 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, + expires_in: args.expires_in, + 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<[string, bigint]>( + result, + result.returnValue as [string, bigint] + ); + } + 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; + expires_in: 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, + expires_in: args.expires_in, + 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 + ); + }, + }; +} diff --git a/src/index.ts b/src/index.ts index 7743ba2..59e0be0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,277 +1,74 @@ +// ============================================================================= +// Subtopia JS SDK +// Copyright (C) 2023 Altynbek Orumbayev +// ============================================================================= + +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { SubtopiaClient } from "./client"; +import { SubtopiaAdminClient } from "./adminClient"; +import { + getLocker, + loadApplicationState, + normalizePrice, +} from "./common/utils"; +import { + SUBTOPIA_CONTRACTS_VERSION, + SUBTOPIA_REGISTRY_APP_ID, +} from "./common/constants"; import { - ABIType, - ABIValue, - ABIMethod, - AtomicTransactionComposer, - TransactionWithSigner, - getMethodByName, - Transaction, -} from "algosdk"; + PriceNormalizationType, + SubscriptionType, + SMILifecycle, +} from "./common/enums"; import { - decodeNamedTuple, - Schema, - AVMType, - ApplicationClient, - ABIResult, - TransactionOverrides, -} from "beaker-ts"; + SMIClaimSubscriptionParams, + SMIState, + ChainMethodParams, + SMISubscribeParams, + SMITransferSubscriptionParams, + SMIUnsubscribeParams, + SMIMarkForDeletionParams, + SMRAddInfrastructureParams, + SMRClaimInfrastructureParams, + SMRTransferInfrastructureParams, + SMIInputParams, + SMRGetRegistryParams, + SMIClaimRevenueParams, + SubscriptionRecord, + SMIDeleteSubscriptionParams, + Locker, + User, +} from "./common/interfaces"; -export class SubtopiaSubscription { - sub_type = ""; - sub_asa_id = BigInt(0); - created_at_timestamp = BigInt(0); - updated_at_timestamp = BigInt(0); - static codec: ABIType = ABIType.from("(string,uint64,uint64,uint64)"); - static fields: string[] = [ - "sub_type", - "sub_asa_id", - "created_at_timestamp", - "updated_at_timestamp", - ]; - static decodeResult(val: ABIValue | undefined): SubtopiaSubscription { - return decodeNamedTuple( - val, - SubtopiaSubscription.fields - ) as SubtopiaSubscription; - } - static decodeBytes(val: Uint8Array): SubtopiaSubscription { - return decodeNamedTuple( - SubtopiaSubscription.codec.decode(val), - SubtopiaSubscription.fields - ) as SubtopiaSubscription; - } -} +export { + PriceNormalizationType, + SubtopiaAdminClient, + SubtopiaClient, + SubscriptionType, + getLocker, + loadApplicationState, + normalizePrice, +}; -export class Subtopia extends ApplicationClient { - desc = ""; - override appSchema: Schema = { - declared: { - sub_name: { - type: AVMType.bytes, - key: "sub_name", - desc: "", - static: false, - }, - sub_manager: { - type: AVMType.bytes, - key: "sub_manager", - desc: "", - static: false, - }, - sub_price: { - type: AVMType.uint64, - key: "sub_price", - desc: "", - static: false, - }, - sub_total_items: { - type: AVMType.uint64, - key: "sub_total_items", - desc: "", - static: false, - }, - sub_max_items: { - type: AVMType.uint64, - key: "sub_max_items", - desc: "", - static: false, - }, - sub_asa_id: { - type: AVMType.uint64, - key: "sub_asa_id", - desc: "", - static: false, - }, - sub_type: { - type: AVMType.bytes, - key: "sub_type", - desc: "", - static: false, - }, - sub_expiration_timestamp: { - type: AVMType.uint64, - key: "sub_expiration_timestamp", - desc: "", - static: false, - }, - }, - reserved: {}, - }; - override acctSchema: Schema = { declared: {}, reserved: {} }; - override approvalProgram = - "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSAxMCAyCmJ5dGVjYmxvY2sgMHg3Mzc1NjI1Zjc0NmY3NDYxNmM1ZjY5NzQ2NTZkNzMgMHg3Mzc1NjI1ZjZkNjE2ZTYxNjc2NTcyIDB4IDB4NzM3NTYyNWY3MDcyNjk2MzY1IDB4NzM3NTYyNWY2ZDYxNzg1ZjY5NzQ2NTZkNzMgMHg3Mzc1NjI1ZjZlNjE2ZDY1IDB4NzM3NTYyNWY3NDc5NzA2NSAweDczNzU2MjVmNjE3MzYxNWY2OTY0IDB4NzM3NTYyNWY2NTc4NzA2OTcyNjE3NDY5NmY2ZTVmNzQ2OTZkNjU3Mzc0NjE2ZDcwCnR4biBOdW1BcHBBcmdzCmludGNfMCAvLyAwCj09CmJueiBtYWluX2wxNgp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDNkZmNlNmJlIC8vICJ1cGRhdGVfY29uZmlnKHBheSxzdHJpbmcsc3RyaW5nLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCl2b2lkIgo9PQpibnogbWFpbl9sMTUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHhjODZmZGIwMSAvLyAidXBkYXRlX21hbmFnZXIoYWRkcmVzcyl2b2lkIgo9PQpibnogbWFpbl9sMTQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgxODJlMzY3OSAvLyAic3Vic2NyaWJlKHBheSx0eG4sYWNjb3VudCl2b2lkIgo9PQpibnogbWFpbl9sMTMKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg4NzZmZDg1MSAvLyAiZ2V0X3N1YnNjcmlwdGlvbihhZGRyZXNzLChzdHJpbmcsdWludDY0LHVpbnQ2NCx1aW50NjQpKXZvaWQiCj09CmJueiBtYWluX2wxMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDI2OTYzODk2IC8vICJjbGFpbV9zdWJzY3JpcHRpb24oKXZvaWQiCj09CmJueiBtYWluX2wxMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweGMwN2Y3NmZiIC8vICJ0cmFuc2Zlcl9zdWJzY3JpcHRpb24oYWRkcmVzcyl2b2lkIgo9PQpibnogbWFpbl9sMTAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHg3ZDA5ZDY0YiAvLyAiZGVsZXRlX3N1YnNjcmlwdGlvbigpdm9pZCIKPT0KYm56IG1haW5fbDkKZXJyCm1haW5fbDk6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgZGVsZXRlc3Vic2NyaXB0aW9uXzE2CmludGNfMSAvLyAxCnJldHVybgptYWluX2wxMDoKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpjYWxsc3ViIHRyYW5zZmVyc3Vic2NyaXB0aW9uXzE1CmludGNfMSAvLyAxCnJldHVybgptYWluX2wxMToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBjbGFpbXN1YnNjcmlwdGlvbl8xNAppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTI6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKc3RvcmUgMTAKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgpzdG9yZSAxMQpsb2FkIDEwCmxvYWQgMTEKY2FsbHN1YiBnZXRzdWJzY3JpcHRpb25fMTMKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDEzOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmludGNfMCAvLyAwCmdldGJ5dGUKc3RvcmUgOQp0eG4gR3JvdXBJbmRleAppbnRjXzMgLy8gMgotCnN0b3JlIDcKbG9hZCA3Cmd0eG5zIFR5cGVFbnVtCmludGNfMSAvLyBwYXkKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0Kc3RvcmUgOApsb2FkIDcKbG9hZCA4CmxvYWQgOQpjYWxsc3ViIHN1YnNjcmliZV8xMgppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTQ6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDEKY2FsbHN1YiB1cGRhdGVtYW5hZ2VyXzExCmludGNfMSAvLyAxCnJldHVybgptYWluX2wxNToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQpzdG9yZSAxCnR4bmEgQXBwbGljYXRpb25BcmdzIDIKc3RvcmUgMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmJ0b2kKc3RvcmUgMwp0eG5hIEFwcGxpY2F0aW9uQXJncyA0CmJ0b2kKc3RvcmUgNAp0eG5hIEFwcGxpY2F0aW9uQXJncyA1CmJ0b2kKc3RvcmUgNQp0eG5hIEFwcGxpY2F0aW9uQXJncyA2CmJ0b2kKc3RvcmUgNgp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCnN0b3JlIDAKbG9hZCAwCmd0eG5zIFR5cGVFbnVtCmludGNfMSAvLyBwYXkKPT0KYXNzZXJ0CmxvYWQgMApsb2FkIDEKbG9hZCAyCmxvYWQgMwpsb2FkIDQKbG9hZCA1CmxvYWQgNgpjYWxsc3ViIHVwZGF0ZWNvbmZpZ18xMAppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTY6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KYm56IG1haW5fbDIwCnR4biBPbkNvbXBsZXRpb24KcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCj09CmJueiBtYWluX2wxOQplcnIKbWFpbl9sMTk6CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CmFzc2VydApjYWxsc3ViIGRlbGV0ZV82CmludGNfMSAvLyAxCnJldHVybgptYWluX2wyMDoKdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKPT0KYXNzZXJ0CmNhbGxzdWIgY3JlYXRlXzIKaW50Y18xIC8vIDEKcmV0dXJuCgovLyBpbnRfdG9fYXNjaWkKaW50dG9hc2NpaV8wOgpwcm90byAxIDEKcHVzaGJ5dGVzIDB4MzAzMTMyMzMzNDM1MzYzNzM4MzkgLy8gIjAxMjM0NTY3ODkiCmZyYW1lX2RpZyAtMQppbnRjXzEgLy8gMQpleHRyYWN0MwpyZXRzdWIKCi8vIGl0b2EKaXRvYV8xOgpwcm90byAxIDEKZnJhbWVfZGlnIC0xCmludGNfMCAvLyAwCj09CmJueiBpdG9hXzFfbDUKZnJhbWVfZGlnIC0xCmludGNfMiAvLyAxMAovCmludGNfMCAvLyAwCj4KYm56IGl0b2FfMV9sNApieXRlY18yIC8vICIiCml0b2FfMV9sMzoKZnJhbWVfZGlnIC0xCmludGNfMiAvLyAxMAolCmNhbGxzdWIgaW50dG9hc2NpaV8wCmNvbmNhdApiIGl0b2FfMV9sNgppdG9hXzFfbDQ6CmZyYW1lX2RpZyAtMQppbnRjXzIgLy8gMTAKLwpjYWxsc3ViIGl0b2FfMQpiIGl0b2FfMV9sMwppdG9hXzFfbDU6CnB1c2hieXRlcyAweDMwIC8vICIwIgppdG9hXzFfbDY6CnJldHN1YgoKLy8gY3JlYXRlCmNyZWF0ZV8yOgpwcm90byAwIDAKYnl0ZWMgNSAvLyAic3ViX25hbWUiCnB1c2hieXRlcyAweDY0NjU2NjYxNzU2Yzc0IC8vICJkZWZhdWx0IgphcHBfZ2xvYmFsX3B1dApieXRlY18xIC8vICJzdWJfbWFuYWdlciIKZ2xvYmFsIENyZWF0b3JBZGRyZXNzCmFwcF9nbG9iYWxfcHV0CmJ5dGVjXzMgLy8gInN1Yl9wcmljZSIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMCAvLyAic3ViX3RvdGFsX2l0ZW1zIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyA0IC8vICJzdWJfbWF4X2l0ZW1zIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyA3IC8vICJzdWJfYXNhX2lkIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlYyA2IC8vICJzdWJfdHlwZSIKcHVzaGJ5dGVzIDB4NzU2ZTZjNjk2ZDY5NzQ2NTY0IC8vICJ1bmxpbWl0ZWQiCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDggLy8gInN1Yl9leHBpcmF0aW9uX3RpbWVzdGFtcCIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKcmV0c3ViCgovLyBhdXRoX29ubHkKYXV0aG9ubHlfMzoKcHJvdG8gMSAxCmZyYW1lX2RpZyAtMQpieXRlY18xIC8vICJzdWJfbWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKPT0KcmV0c3ViCgovLyBhdXRoX29ubHkKYXV0aG9ubHlfNDoKcHJvdG8gMSAxCmZyYW1lX2RpZyAtMQpieXRlY18xIC8vICJzdWJfbWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKPT0KcmV0c3ViCgovLyBhdXRoX29ubHkKYXV0aG9ubHlfNToKcHJvdG8gMSAxCmZyYW1lX2RpZyAtMQpieXRlY18xIC8vICJzdWJfbWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKPT0KcmV0c3ViCgovLyBkZWxldGUKZGVsZXRlXzY6CnByb3RvIDAgMAp0eG4gU2VuZGVyCmNhbGxzdWIgYXV0aG9ubHlfNQovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmJ5dGVjXzAgLy8gInN1Yl90b3RhbF9pdGVtcyIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPT0KLy8gQWN0aXZlIHN1YnNjcmlwdG9ucyBleGlzdC4gRGVsZXRlIHRoZW0gZmlyc3QuCmFzc2VydApyZXRzdWIKCi8vIGlubmVyX2NyZWF0ZV9uZnQKaW5uZXJjcmVhdGVuZnRfNzoKcHJvdG8gMyAxCml0eG5fYmVnaW4KcHVzaGludCAzIC8vIGFjZmcKaXR4bl9maWVsZCBUeXBlRW51bQppbnRjXzEgLy8gMQppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKaW50Y18wIC8vIDAKaXR4bl9maWVsZCBDb25maWdBc3NldERlY2ltYWxzCmludGNfMSAvLyAxCml0eG5fZmllbGQgQ29uZmlnQXNzZXREZWZhdWx0RnJvemVuCmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VW5pdE5hbWUKZnJhbWVfZGlnIC0zCml0eG5fZmllbGQgQ29uZmlnQXNzZXROYW1lCmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VVJMCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRNYW5hZ2VyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRSZXNlcnZlCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCml0eG5fZmllbGQgQ29uZmlnQXNzZXRGcmVlemUKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKaXR4bl9maWVsZCBDb25maWdBc3NldENsYXdiYWNrCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0Cml0eG4gQ3JlYXRlZEFzc2V0SUQKcmV0c3ViCgovLyBpbm5lcl90cmFuc2Zlcl9uZnQKaW5uZXJ0cmFuc2Zlcm5mdF84Ogpwcm90byAzIDAKaXR4bl9iZWdpbgpwdXNoaW50IDQgLy8gYXhmZXIKaXR4bl9maWVsZCBUeXBlRW51bQpmcmFtZV9kaWcgLTMKaXR4bl9maWVsZCBYZmVyQXNzZXQKaW50Y18xIC8vIDEKaXR4bl9maWVsZCBBc3NldEFtb3VudApmcmFtZV9kaWcgLTIKaXR4bl9maWVsZCBBc3NldFNlbmRlcgpmcmFtZV9kaWcgLTEKaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCml0eG5fc3VibWl0CnJldHN1YgoKLy8gaW5uZXJfZGVsZXRlX25mdAppbm5lcmRlbGV0ZW5mdF85Ogpwcm90byAxIDAKaXR4bl9iZWdpbgpwdXNoaW50IDMgLy8gYWNmZwppdHhuX2ZpZWxkIFR5cGVFbnVtCmZyYW1lX2RpZyAtMQppdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0Cml0eG5fc3VibWl0CnJldHN1YgoKLy8gdXBkYXRlX2NvbmZpZwp1cGRhdGVjb25maWdfMTA6CnByb3RvIDcgMAp0eG4gU2VuZGVyCmNhbGxzdWIgYXV0aG9ubHlfMwovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmZyYW1lX2RpZyAtNwpndHhucyBBbW91bnQKcHVzaGludCAxMTAwMDAgLy8gMTEwMDAwCj09CmFzc2VydApieXRlYyA1IC8vICJzdWJfbmFtZSIKZnJhbWVfZGlnIC02CmV4dHJhY3QgMiAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDYgLy8gInN1Yl90eXBlIgpmcmFtZV9kaWcgLTUKZXh0cmFjdCAyIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMyAvLyAic3ViX3ByaWNlIgpmcmFtZV9kaWcgLTQKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNCAvLyAic3ViX21heF9pdGVtcyIKZnJhbWVfZGlnIC0zCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDcgLy8gInN1Yl9hc2FfaWQiCmZyYW1lX2RpZyAtMgphcHBfZ2xvYmFsX3B1dApieXRlYyA4IC8vICJzdWJfZXhwaXJhdGlvbl90aW1lc3RhbXAiCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX3B1dApyZXRzdWIKCi8vIHVwZGF0ZV9tYW5hZ2VyCnVwZGF0ZW1hbmFnZXJfMTE6CnByb3RvIDEgMAp0eG4gU2VuZGVyCmNhbGxzdWIgYXV0aG9ubHlfNAovLyB1bmF1dGhvcml6ZWQKYXNzZXJ0CmJ5dGVjXzEgLy8gInN1Yl9tYW5hZ2VyIgpmcmFtZV9kaWcgLTEKYXBwX2dsb2JhbF9wdXQKcmV0c3ViCgovLyBzdWJzY3JpYmUKc3Vic2NyaWJlXzEyOgpwcm90byAzIDAKYnl0ZWNfMiAvLyAiIgppbnRjXzAgLy8gMApkdXBuIDIKYnl0ZWNfMiAvLyAiIgppbnRjXzAgLy8gMApkdXAKYnl0ZWNfMiAvLyAiIgpkdXAKZnJhbWVfZGlnIC0yCmd0eG5zIFR5cGVFbnVtCmludGNfMSAvLyBwYXkKPT0KZnJhbWVfZGlnIC0yCmd0eG5zIEFtb3VudApieXRlY18zIC8vICJzdWJfcHJpY2UiCmFwcF9nbG9iYWxfZ2V0Cj09CiYmCmZyYW1lX2RpZyAtMgpndHhucyBSZWNlaXZlcgpieXRlY18xIC8vICJzdWJfbWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKPT0KJiYKZnJhbWVfZGlnIC0yCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNCAvLyBheGZlcgo9PQpmcmFtZV9kaWcgLTIKZ3R4bnMgQXNzZXRSZWNlaXZlcgpieXRlY18xIC8vICJzdWJfbWFuYWdlciIKYXBwX2dsb2JhbF9nZXQKPT0KJiYKZnJhbWVfZGlnIC0yCmd0eG5zIEFzc2V0QW1vdW50CmJ5dGVjXzMgLy8gInN1Yl9wcmljZSIKYXBwX2dsb2JhbF9nZXQKPT0KJiYKfHwKYXNzZXJ0CmJ5dGVjIDQgLy8gInN1Yl9tYXhfaXRlbXMiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj4KYnogc3Vic2NyaWJlXzEyX2wyCmJ5dGVjXzAgLy8gInN1Yl90b3RhbF9pdGVtcyIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgNCAvLyAic3ViX21heF9pdGVtcyIKYXBwX2dsb2JhbF9nZXQKPD0KLy8gTWF4IGl0ZW1zIHJlYWNoZWQKYXNzZXJ0CnN1YnNjcmliZV8xMl9sMjoKYnl0ZWNfMCAvLyAic3ViX3RvdGFsX2l0ZW1zIgpieXRlY18wIC8vICJzdWJfdG90YWxfaXRlbXMiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCisKYXBwX2dsb2JhbF9wdXQKcHVzaGJ5dGVzIDB4MjMgLy8gIiMiCmJ5dGVjXzAgLy8gInN1Yl90b3RhbF9pdGVtcyIKYXBwX2dsb2JhbF9nZXQKY2FsbHN1YiBpdG9hXzEKY29uY2F0CnB1c2hieXRlcyAweDIwMmQyMCAvLyAiIC0gIgpjb25jYXQKYnl0ZWMgNSAvLyAic3ViX25hbWUiCmFwcF9nbG9iYWxfZ2V0CmNvbmNhdApwdXNoYnl0ZXMgMHg1MzU0NTAgLy8gIlNUUCIKcHVzaGJ5dGVzIDB4Njk3MDY2NzMzYTJmMmY2MjYxNjY3OTYyNjU2OTYzNjQ2NDdhMzc2YjYyNzU3ODYxNmE2YTM2NjI2ZjYyMzU2MjZhNzE3NDc3NjU3MTM2Nzc2MzY4NmI2NDZiNjk3MTM0NzY3NjY4Nzc3Mjc3NzI2ZTY1Mzc2OTdhMzQ2NjMyMzU3ODY5IC8vICJpcGZzOi8vYmFmeWJlaWNkZHo3a2J1eGFqajZib2I1YmpxdHdlcTZ3Y2hrZGtpcTR2dmh3cndybmU3aXo0ZjI1eGkiCmNhbGxzdWIgaW5uZXJjcmVhdGVuZnRfNwpzdG9yZSAxMgpsb2FkIDEyCmludGNfMCAvLyAwCiE9CmFzc2VydApieXRlYyA2IC8vICJzdWJfdHlwZSIKYXBwX2dsb2JhbF9nZXQKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmxlbgppdG9iCmV4dHJhY3QgNiAwCmZyYW1lX2RpZyAwCmNvbmNhdApmcmFtZV9idXJ5IDAKbG9hZCAxMgpmcmFtZV9idXJ5IDEKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcApmcmFtZV9idXJ5IDIKZ2xvYmFsIExhdGVzdFRpbWVzdGFtcApmcmFtZV9idXJ5IDMKZnJhbWVfZGlnIDAKZnJhbWVfYnVyeSA4CmZyYW1lX2RpZyA4CmZyYW1lX2J1cnkgNwpwdXNoaW50IDI2IC8vIDI2CmZyYW1lX2J1cnkgNQpmcmFtZV9kaWcgNQppdG9iCmV4dHJhY3QgNiAwCmZyYW1lX2RpZyAxCml0b2IKY29uY2F0CmZyYW1lX2RpZyAyCml0b2IKY29uY2F0CmZyYW1lX2RpZyAzCml0b2IKY29uY2F0CmZyYW1lX2RpZyA3CmNvbmNhdApmcmFtZV9idXJ5IDQKZnJhbWVfZGlnIC0xCnR4bmFzIEFjY291bnRzCmJveF9kZWwKcG9wCmZyYW1lX2RpZyAtMQp0eG5hcyBBY2NvdW50cwpmcmFtZV9kaWcgNApib3hfcHV0CnJldHN1YgoKLy8gZ2V0X3N1YnNjcmlwdGlvbgpnZXRzdWJzY3JpcHRpb25fMTM6CnByb3RvIDIgMApmcmFtZV9kaWcgLTIKYm94X2dldApzdG9yZSAxNApzdG9yZSAxMwpsb2FkIDE0CmFzc2VydApsb2FkIDEzCmZyYW1lX2J1cnkgLTEKcmV0c3ViCgovLyBjbGFpbV9zdWJzY3JpcHRpb24KY2xhaW1zdWJzY3JpcHRpb25fMTQ6CnByb3RvIDAgMAp0eG4gU2VuZGVyCnR4bmEgQXNzZXRzIDAKYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCnN0b3JlIDE2CnN0b3JlIDE1CmxvYWQgMTYKLy8gU3Vic2NyaWJlciBub3Qgb3B0ZWQtaW4gZm9yIFN1YnNjcmlwdGlvbiBORlQKYXNzZXJ0CnR4bmEgQXNzZXRzIDAKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKdHhuIFNlbmRlcgpjYWxsc3ViIGlubmVydHJhbnNmZXJuZnRfOApyZXRzdWIKCi8vIHRyYW5zZmVyX3N1YnNjcmlwdGlvbgp0cmFuc2ZlcnN1YnNjcmlwdGlvbl8xNToKcHJvdG8gMSAwCmJ5dGVjXzIgLy8gIiIKZHVwCmludGNfMCAvLyAwCmR1cG4gNApieXRlY18yIC8vICIiCmR1cAp0eG4gU2VuZGVyCmJveF9nZXQKc3RvcmUgMTgKc3RvcmUgMTcKbG9hZCAxOAovLyBDdXJyZW50IGFkZHJlc3Mgbm90IHN1YnNjcmliZWQKYXNzZXJ0CnR4bmEgQXNzZXRzIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpjYWxsc3ViIGlubmVydHJhbnNmZXJuZnRfOAp0eG4gU2VuZGVyCmJveF9nZXQKc3RvcmUgMjAKc3RvcmUgMTkKbG9hZCAyMAphc3NlcnQKbG9hZCAxOQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKZnJhbWVfZGlnIDAKaW50Y18wIC8vIDAKZXh0cmFjdF91aW50MTYKZGlnIDEKbGVuCnN1YnN0cmluZzMKZnJhbWVfYnVyeSAxCmZyYW1lX2RpZyAwCmludGNfMyAvLyAyCmV4dHJhY3RfdWludDY0CmZyYW1lX2J1cnkgMgpmcmFtZV9kaWcgMAppbnRjXzIgLy8gMTAKZXh0cmFjdF91aW50NjQKZnJhbWVfYnVyeSAzCmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKZnJhbWVfYnVyeSA0CmZyYW1lX2RpZyAxCmZyYW1lX2J1cnkgOApmcmFtZV9kaWcgOApmcmFtZV9idXJ5IDcKcHVzaGludCAyNiAvLyAyNgpmcmFtZV9idXJ5IDUKZnJhbWVfZGlnIDUKaXRvYgpleHRyYWN0IDYgMApmcmFtZV9kaWcgMgppdG9iCmNvbmNhdApmcmFtZV9kaWcgMwppdG9iCmNvbmNhdApmcmFtZV9kaWcgNAppdG9iCmNvbmNhdApmcmFtZV9kaWcgNwpjb25jYXQKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAtMQpib3hfZGVsCnBvcApmcmFtZV9kaWcgLTEKZnJhbWVfZGlnIDAKYm94X3B1dAp0eG4gU2VuZGVyCmJveF9kZWwKcG9wCnJldHN1YgoKLy8gZGVsZXRlX3N1YnNjcmlwdGlvbgpkZWxldGVzdWJzY3JpcHRpb25fMTY6CnByb3RvIDAgMAp0eG4gU2VuZGVyCnR4bmEgQXNzZXRzIDAKYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCnN0b3JlIDIyCnN0b3JlIDIxCmxvYWQgMjIKYm56IGRlbGV0ZXN1YnNjcmlwdGlvbl8xNl9sMwpkZWxldGVzdWJzY3JpcHRpb25fMTZfbDE6CnR4bmEgQXNzZXRzIDAKY2FsbHN1YiBpbm5lcmRlbGV0ZW5mdF85CmJ5dGVjXzAgLy8gInN1Yl90b3RhbF9pdGVtcyIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKIT0KYnogZGVsZXRlc3Vic2NyaXB0aW9uXzE2X2w0CmJ5dGVjXzAgLy8gInN1Yl90b3RhbF9pdGVtcyIKYnl0ZWNfMCAvLyAic3ViX3RvdGFsX2l0ZW1zIgphcHBfZ2xvYmFsX2dldAppbnRjXzEgLy8gMQotCmFwcF9nbG9iYWxfcHV0CmIgZGVsZXRlc3Vic2NyaXB0aW9uXzE2X2w0CmRlbGV0ZXN1YnNjcmlwdGlvbl8xNl9sMzoKdHhuYSBBc3NldHMgMAp0eG4gU2VuZGVyCmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmNhbGxzdWIgaW5uZXJ0cmFuc2Zlcm5mdF84CmIgZGVsZXRlc3Vic2NyaXB0aW9uXzE2X2wxCmRlbGV0ZXN1YnNjcmlwdGlvbl8xNl9sNDoKdHhuIFNlbmRlcgpib3hfZGVsCnBvcApyZXRzdWI="; - override clearProgram = - "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu"; - override methods: ABIMethod[] = [ - new ABIMethod({ - name: "subscribe", - desc: "", - args: [ - { type: "pay", name: "box_fee_txn", desc: "" }, - { type: "txn", name: "subscribe_pay_txn", desc: "" }, - { type: "account", name: "subscriber_account", desc: "" }, - ], - returns: { type: "void", desc: "" }, - }), - new ABIMethod({ - name: "get_subscription", - desc: "", - args: [{ type: "address", name: "subscriber_address", desc: "" }], - returns: { type: "void", desc: "" }, - }), - new ABIMethod({ - name: "claim_subscription", - desc: "", - args: [], - returns: { type: "void", desc: "" }, - }), - new ABIMethod({ - name: "transfer_subscription", - desc: "", - args: [{ type: "address", name: "new_address", desc: "" }], - returns: { type: "void", desc: "" }, - }), - new ABIMethod({ - name: "delete_subscription", - desc: "", - args: [], - returns: { type: "void", desc: "" }, - }), - ]; - async subscribe( - args: { - box_fee_txn: TransactionWithSigner | Transaction; - subscribe_pay_txn: TransactionWithSigner | Transaction; - subscriber_account: string; - }, - txnParams?: TransactionOverrides - ): Promise> { - const result = await this.execute( - await this.compose.subscribe( - { - box_fee_txn: args.box_fee_txn, - subscribe_pay_txn: args.subscribe_pay_txn, - subscriber_account: args.subscriber_account, - }, - txnParams - ) - ); - return new ABIResult(result); - } - async get_subscription( - args: { - subscriber_address: string; - }, - txnParams?: TransactionOverrides - ): Promise> { - const result = await this.execute( - await this.compose.get_subscription( - { subscriber_address: args.subscriber_address }, - txnParams - ) - ); - return new ABIResult(result); - } - async claim_subscription( - txnParams?: TransactionOverrides - ): Promise> { - const result = await this.execute( - await this.compose.claim_subscription(txnParams) - ); - return new ABIResult(result); - } - async transfer_subscription( - args: { - new_address: string; - }, - txnParams?: TransactionOverrides - ): Promise> { - const result = await this.execute( - await this.compose.transfer_subscription( - { new_address: args.new_address }, - txnParams - ) - ); - return new ABIResult(result); - } - async delete_subscription( - txnParams?: TransactionOverrides - ): Promise> { - const result = await this.execute( - await this.compose.delete_subscription(txnParams) - ); - return new ABIResult(result); - } - compose = { - subscribe: async ( - args: { - box_fee_txn: TransactionWithSigner | Transaction; - subscribe_pay_txn: TransactionWithSigner | Transaction; - subscriber_account: string; - }, - txnParams?: TransactionOverrides, - atc?: AtomicTransactionComposer - ): Promise => { - return this.addMethodCall( - getMethodByName(this.methods, "subscribe"), - { - box_fee_txn: args.box_fee_txn, - subscribe_pay_txn: args.subscribe_pay_txn, - subscriber_account: args.subscriber_account, - }, - txnParams, - atc - ); - }, - get_subscription: async ( - args: { - subscriber_address: string; - }, - txnParams?: TransactionOverrides, - atc?: AtomicTransactionComposer - ): Promise => { - return this.addMethodCall( - getMethodByName(this.methods, "get_subscription"), - { subscriber_address: args.subscriber_address }, - txnParams, - atc - ); - }, - claim_subscription: async ( - txnParams?: TransactionOverrides, - atc?: AtomicTransactionComposer - ): Promise => { - return this.addMethodCall( - getMethodByName(this.methods, "claim_subscription"), - {}, - txnParams, - atc - ); - }, - transfer_subscription: async ( - args: { - new_address: string; - }, - txnParams?: TransactionOverrides, - atc?: AtomicTransactionComposer - ): Promise => { - return this.addMethodCall( - getMethodByName(this.methods, "transfer_subscription"), - { new_address: args.new_address }, - txnParams, - atc - ); - }, - delete_subscription: async ( - txnParams?: TransactionOverrides, - atc?: AtomicTransactionComposer - ): Promise => { - return this.addMethodCall( - getMethodByName(this.methods, "delete_subscription"), - {}, - txnParams, - atc - ); - }, - }; -} +export type { + Locker, + SUBTOPIA_CONTRACTS_VERSION, + SUBTOPIA_REGISTRY_APP_ID, + SMILifecycle, + SMRGetRegistryParams, + SMIClaimRevenueParams, + SMIMarkForDeletionParams, + SMRAddInfrastructureParams, + SMRClaimInfrastructureParams, + SMRTransferInfrastructureParams, + SMIInputParams, + SMIDeleteSubscriptionParams, + SMIClaimSubscriptionParams, + User, + SMIState, + ChainMethodParams, + SMISubscribeParams, + SMITransferSubscriptionParams, + SMIUnsubscribeParams, + SubscriptionRecord, +}; diff --git a/tests/interfaces.ts b/tests/interfaces.ts new file mode 100644 index 0000000..92b9b51 --- /dev/null +++ b/tests/interfaces.ts @@ -0,0 +1,6 @@ +export interface AssetMetadata { + index: number; + name: string; + total: number; + decimals: number; +} diff --git a/tests/subtopia.test.ts b/tests/subtopia.test.ts new file mode 100644 index 0000000..b15df06 --- /dev/null +++ b/tests/subtopia.test.ts @@ -0,0 +1,837 @@ +import { Algodv2, decodeAddress } from "algosdk"; +import { getLocker, SubtopiaAdminClient, SubtopiaClient } from "../src/index"; +import { it, describe, expect } from "vitest"; +import { sandbox } from "beaker-ts"; + +import { SandboxAccount } from "beaker-ts/lib/sandbox/accounts"; +import { SMR } from "../src/contracts/smr_client"; +import { getRandomAccount, filterAsync, generateRandomAsset } from "./utils"; +import { rekeyLocker } from "../src/common/utils"; + +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 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.create({ + 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 }; +} + +describe("subtopia", () => { + it( + "should correctly add infrastructure", + async () => { + // Setup + const { dummyRegistryId } = await setupDummyRegistry(); + + // Test + const result = await SubtopiaAdminClient.addInfrastructure({ + creator: { address: adminAccount.addr, signer: adminAccount.signer }, + smrID: dummyRegistryId, + name: "Cool infrastructure", + price: 1, + client: algodClient, + subType: 0, + maxSubs: 0, + coinID: 0, + expiresIn: 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( + "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: 0, + maxSubs: 0, + coinID: 0, + expiresIn: 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( + "should correctly purchase subscription with algo", + 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: 0, + maxSubs: 0, + coinID: 0, + expiresIn: 0, + }); + + const infrastructureID = Number(response.returnValue); + + // Test + const subscriber = await getRandomAccount( + algodClient, + adminAccount.addr, + adminAccount.signer + ); + + const result = await SubtopiaClient.subscribe( + { + subscriber: { + address: subscriber.address, + signer: subscriber.signer, + }, + smiID: infrastructureID, + smrID: dummyRegistryId, + }, + { + 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)); + + await SubtopiaClient.unsubscribe( + { + smiID: infrastructureID, + subscriber: { + address: subscriber.address, + signer: subscriber.signer, + }, + }, + { + client: algodClient, + } + ); + }, + { timeout: 1e6 } + ); + + it( + "should correctly claim revenue with algo", + 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: 0, + maxSubs: 0, + coinID: 0, + expiresIn: 0, + }); + + const infrastructureID = Number(response.returnValue); + + // Test + const subscriber = await getRandomAccount( + algodClient, + adminAccount.addr, + adminAccount.signer + ); + + await SubtopiaClient.subscribe( + { + subscriber: { + address: subscriber.address, + signer: subscriber.signer, + }, + smiID: infrastructureID, + smrID: dummyRegistryId, + }, + { + client: algodClient, + } + ); + + const claimResponse = await SubtopiaClient.claimRevenue( + { + user: { + address: adminAccount.addr, + signer: adminAccount.signer, + }, + smrID: dummyRegistryId, + }, + { + client: algodClient, + } + ); + + // Assert + expect(claimResponse).toBeDefined(); + }, + { timeout: 1e6 } + ); + + it( + "should correctly delete SMI with N subscribers before deleting SMI", + async () => { + // 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: 0, + maxSubs: 0, + coinID: 0, + expiresIn: 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 result = await SubtopiaClient.subscribe( + { + subscriber: { + address: subscriber.address, + signer: subscriber.signer, + }, + smiID: infrastructureID, + smrID: dummyRegistryId, + }, + { + 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)); + } + + 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 purchase subscription with custom ASA", + 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, + coinID: randomAsset.index, + subType: 1, + maxSubs: 0, + expiresIn: 0, + }); + + const infrastructureID = Number(response.returnValue); + + // Test + const subscriber = await getRandomAccount( + algodClient, + adminAccount.addr, + adminAccount.signer, + randomAsset + ); + + const result = await SubtopiaClient.subscribe( + { + subscriber: { + address: subscriber.address, + signer: subscriber.signer, + }, + smiID: infrastructureID, + smrID: dummyRegistryId, + }, + { + 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 custom ASA", + 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, + coinID: randomAsset.index, + subType: 1, + maxSubs: 0, + expiresIn: 0, + }); + + const infrastructureID = Number(response.returnValue); + + // Test + const subscriber = await getRandomAccount( + algodClient, + adminAccount.addr, + adminAccount.signer, + randomAsset + ); + + await SubtopiaClient.subscribe( + { + subscriber: { + address: subscriber.address, + signer: subscriber.signer, + }, + smiID: infrastructureID, + smrID: dummyRegistryId, + }, + { + client: algodClient, + } + ); + + const claimResponse = await SubtopiaClient.claimRevenue( + { + user: { + address: adminAccount.addr, + signer: adminAccount.signer, + }, + smrID: dummyRegistryId, + coinID: randomAsset.index, + }, + { + client: algodClient, + } + ); + + // Assert + expect(claimResponse).toBeDefined(); + }, + { timeout: 1e6 } + ); + + it( + "should correctly transfer SMI to new owner", + 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: 0, + maxSubs: 0, + coinID: 0, + expiresIn: 0, + }); + const infrastructureID = Number(response.returnValue); + + const oldOwner = await getRandomAccount( + algodClient, + adminAccount.addr, + adminAccount.signer + ); + + const result = await SubtopiaClient.subscribe( + { + subscriber: { address: oldOwner.address, signer: oldOwner.signer }, + smiID: infrastructureID, + smrID: dummyRegistryId, + }, + { + 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: 0, + maxSubs: 0, + coinID: 0, + expiresIn: 0, + }); + const infrastructureID = Number(response.returnValue); + + const subscriber = await getRandomAccount( + algodClient, + adminAccount.addr, + adminAccount.signer + ); + + const result = await SubtopiaClient.subscribe( + { + subscriber: { + address: subscriber.address, + signer: subscriber.signer, + }, + smiID: infrastructureID, + smrID: dummyRegistryId, + }, + { + 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: 0, + maxSubs: 0, + coinID: 0, + expiresIn: 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: 0, + maxSubs: 0, + coinID: randomAsset.index, + expiresIn: 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 } + ); +}); diff --git a/tests/utils.ts b/tests/utils.ts new file mode 100644 index 0000000..0e3be3b --- /dev/null +++ b/tests/utils.ts @@ -0,0 +1,133 @@ +import { + Algodv2, + generateAccount, + makePaymentTxnWithSuggestedParamsFromObject, + TransactionSigner, + AtomicTransactionComposer, + makeBasicAccountTransactionSigner, + makeAssetCreateTxnWithSuggestedParamsFromObject, + makeAssetTransferTxnWithSuggestedParamsFromObject, +} from "algosdk"; +import { SandboxAccount } from "beaker-ts/lib/sandbox/accounts"; +import { DEFAULT_AWAIT_ROUNDS } from "../src/common/constants"; +import { PriceNormalizationType } from "../src/common/enums"; +import { normalizePrice, optInAsset } from "../src/common/utils"; +import { AssetMetadata } from "./interfaces"; + +// 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, + funderSigner: TransactionSigner, + asset?: AssetMetadata +) { + const randomAccount = generateAccount(); + + let atc = new AtomicTransactionComposer(); + atc.addTransaction({ + txn: makePaymentTxnWithSuggestedParamsFromObject({ + from: funderAddress, + to: randomAccount.addr, + amount: Number(5e6), + suggestedParams: await client.getTransactionParams().do(), + }), + signer: funderSigner, + }); + + await atc.execute(client, DEFAULT_AWAIT_ROUNDS); + + if (asset) { + await optInAsset( + client, + randomAccount.addr, + makeBasicAccountTransactionSigner(randomAccount), + asset.index + ); + + atc = new AtomicTransactionComposer(); + atc.addTransaction({ + txn: makeAssetTransferTxnWithSuggestedParamsFromObject({ + from: funderAddress, + to: randomAccount.addr, + amount: normalizePrice( + asset.total / 2, + asset.decimals, + PriceNormalizationType.RAW + ), + suggestedParams: await client.getTransactionParams().do(), + assetIndex: asset.index, + }), + signer: funderSigner, + }); + + await atc.execute(client, DEFAULT_AWAIT_ROUNDS); + } + + return { + address: randomAccount.addr, + signer: makeBasicAccountTransactionSigner(randomAccount), + }; +} + +export async function generateRandomAsset( + client: Algodv2, + sender: SandboxAccount, + assetName?: string, + total?: number, + decimals?: number +) { + total = !total ? Math.floor(Math.random() * 100) + 1 : total; + decimals = !decimals ? Math.floor(Math.random() * 10) + 1 : decimals; + assetName = !assetName + ? `ASA ${Math.floor(Math.random() * 100) + 1}_${ + Math.floor(Math.random() * 100) + 1 + }_${total}` + : assetName; + + const params = await client.getTransactionParams().do(); + + const txn = makeAssetCreateTxnWithSuggestedParamsFromObject({ + from: sender.addr, + suggestedParams: params, + total: normalizePrice(total, decimals, PriceNormalizationType.RAW), + decimals: decimals, + defaultFrozen: false, + unitName: "", + assetName: assetName, + manager: sender.addr, + reserve: sender.addr, + freeze: sender.addr, + clawback: sender.addr, + assetURL: "https://path/to/my/asset/details", + }); + + console.log(txn); + + const stxn = txn.signTxn(sender.privateKey); + + let txid = await client.sendRawTransaction(stxn).do(); + txid = txid["txId"]; + + const ptx = await client.pendingTransactionInformation(txid).do(); + + const assetId = ptx["asset-index"]; + + console.log(`\n --- ASA ${assetName} - ${assetId} minted.`); + + return { + index: assetId, + total: total, + decimals: decimals, + name: assetName, + } as AssetMetadata; +} diff --git a/vite.config.ts b/vite.config.ts index fee1581..87e4517 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -12,10 +12,11 @@ export default defineConfig({ fileName: (format) => `index.${format}.js`, }, rollupOptions: { - external: ["algosdk", "beaker-ts"], + external: ["algosdk", "beaker-ts", "axios"], output: { sourcemap: true, globals: { + axios: "axios", algosdk: "algosdk", "beaker-ts": "beaker-ts", }, diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..cd11553 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + coverage: { + provider: "c8", + reporter: ["text", "json", "html"], + }, + }, +}); diff --git a/yarn.lock b/yarn.lock index 821dca4..d9c8bf6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -209,6 +209,68 @@ "@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" + 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" + 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" + 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.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz#4518e77958893d0a5835babe65bf87e2638f6939" + 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" + 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.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz#8f931467dea8c43b9fe38373e303f7c220de6fdc" + 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.yarnpkg.com/@commitlint/types/-/types-17.4.4.tgz#1416df936e9aad0d6a7bbc979ecc31e55dade662" + 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" @@ -346,6 +408,29 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@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" + 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" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + "@humanwhocodes/config-array@^0.11.8": version "0.11.8" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" @@ -365,6 +450,16 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@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" + 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" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + "@jridgewell/gen-mapping@^0.1.0": version "0.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" @@ -405,7 +500,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.9": version "0.3.17" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== @@ -434,6 +529,404 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@npmcli/arborist@^5.6.3": + version "5.6.3" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-5.6.3.tgz#40810080272e097b4a7a4f56108f4a31638a9874" + integrity sha512-/7hbqEM6YuRjwTcQXkK1+xKslEblY5kFQe0tZ7jKyMlIR6x4iOmhLErIkBBGtTKvYxRKdpcxnFXjCobg3UqmsA== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/map-workspaces" "^2.0.3" + "@npmcli/metavuln-calculator" "^3.0.1" + "@npmcli/move-file" "^2.0.0" + "@npmcli/name-from-folder" "^1.0.1" + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/package-json" "^2.0.0" + "@npmcli/query" "^1.2.0" + "@npmcli/run-script" "^4.1.3" + bin-links "^3.0.3" + cacache "^16.1.3" + common-ancestor-path "^1.0.1" + hosted-git-info "^5.2.1" + json-parse-even-better-errors "^2.3.1" + json-stringify-nice "^1.1.4" + minimatch "^5.1.0" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + nopt "^6.0.0" + npm-install-checks "^5.0.0" + npm-package-arg "^9.0.0" + npm-pick-manifest "^7.0.2" + npm-registry-fetch "^13.0.0" + npmlog "^6.0.2" + pacote "^13.6.1" + parse-conflict-json "^2.0.1" + proc-log "^2.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^1.0.1" + read-package-json-fast "^2.0.2" + readdir-scoped-modules "^1.1.0" + rimraf "^3.0.2" + semver "^7.3.7" + ssri "^9.0.0" + treeverse "^2.0.0" + walk-up-path "^1.0.0" + +"@npmcli/ci-detect@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-2.0.0.tgz#e63c91bcd4185ac1e85720a34fc48e164ece5b89" + integrity sha512-8yQtQ9ArHh/TzdUDKQwEvwCgpDuhSWTDAbiKMl3854PcT+Dk4UmWaiawuFTLy9n5twzXOBXVflWe+90/ffXQrA== + +"@npmcli/config@^4.2.1": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-4.2.2.tgz#2e3334dda84f48d059309c53d152e66b05ca24b7" + integrity sha512-5GNcLd+0c4bYBnFop53+26CO5GQP0R9YcxlernohpHDWdIgzUg9I0+GEMk3sNHnLntATVU39d283A4OO+W402w== + dependencies: + "@npmcli/map-workspaces" "^2.0.2" + ini "^3.0.0" + mkdirp-infer-owner "^2.0.0" + nopt "^6.0.0" + proc-log "^2.0.0" + read-package-json-fast "^2.0.3" + semver "^7.3.5" + walk-up-path "^1.0.0" + +"@npmcli/disparity-colors@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-2.0.0.tgz#cb518166ee21573b96241a3613fef70acb2a60ba" + integrity sha512-FFXGrIjhvd2qSZ8iS0yDvbI7nbjdyT2VNO7wotosjYZM2p2r8PN3B7Om3M5NO9KqW/OVzfzLB3L0V5Vo5QXC7A== + dependencies: + ansi-styles "^4.3.0" + +"@npmcli/fs@^2.1.0", "@npmcli/fs@^2.1.1": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-2.1.2.tgz#a9e2541a4a2fec2e69c29b35e6060973da79b865" + integrity sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ== + dependencies: + "@gar/promisify" "^1.1.3" + semver "^7.3.5" + +"@npmcli/git@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-3.0.2.tgz#5c5de6b4d70474cf2d09af149ce42e4e1dacb931" + integrity sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w== + dependencies: + "@npmcli/promise-spawn" "^3.0.0" + lru-cache "^7.4.4" + mkdirp "^1.0.4" + npm-pick-manifest "^7.0.0" + proc-log "^2.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^2.0.2" + +"@npmcli/installed-package-contents@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz#ab7408c6147911b970a8abe261ce512232a3f4fa" + integrity sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw== + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +"@npmcli/map-workspaces@^2.0.2", "@npmcli/map-workspaces@^2.0.3": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz#9e5e8ab655215a262aefabf139782b894e0504fc" + integrity sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg== + dependencies: + "@npmcli/name-from-folder" "^1.0.1" + glob "^8.0.1" + minimatch "^5.0.1" + read-package-json-fast "^2.0.3" + +"@npmcli/metavuln-calculator@^3.0.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz#9359bd72b400f8353f6a28a25c8457b562602622" + integrity sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA== + dependencies: + cacache "^16.0.0" + json-parse-even-better-errors "^2.3.1" + pacote "^13.0.3" + semver "^7.3.5" + +"@npmcli/move-file@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-2.0.1.tgz#26f6bdc379d87f75e55739bab89db525b06100e4" + integrity sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@npmcli/name-from-folder@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz#77ecd0a4fcb772ba6fe927e2e2e155fbec2e6b1a" + integrity sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA== + +"@npmcli/node-gyp@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz#8c20e53e34e9078d18815c1d2dda6f2420d75e35" + integrity sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A== + +"@npmcli/package-json@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-2.0.0.tgz#3bbcf4677e21055adbe673d9f08c9f9cde942e4a" + integrity sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA== + dependencies: + json-parse-even-better-errors "^2.3.1" + +"@npmcli/promise-spawn@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz#53283b5f18f855c6925f23c24e67c911501ef573" + integrity sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g== + dependencies: + infer-owner "^1.0.4" + +"@npmcli/query@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-1.2.0.tgz#46468d583cf013aa92102970700f9555314aabe4" + integrity sha512-uWglsUM3PjBLgTSmZ3/vygeGdvWEIZ3wTUnzGFbprC/RtvQSaT+GAXu1DXmSFj2bD3oOZdcRm1xdzsV2z1YWdw== + dependencies: + npm-package-arg "^9.1.0" + postcss-selector-parser "^6.0.10" + semver "^7.3.7" + +"@npmcli/run-script@^4.1.0", "@npmcli/run-script@^4.1.3", "@npmcli/run-script@^4.2.0", "@npmcli/run-script@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-4.2.1.tgz#c07c5c71bc1c70a5f2a06b0d4da976641609b946" + integrity sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg== + dependencies: + "@npmcli/node-gyp" "^2.0.0" + "@npmcli/promise-spawn" "^3.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^2.0.3" + which "^2.0.2" + +"@octokit/auth-token@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.3.tgz#ce7e48a3166731f26068d7a7a7996b5da58cbe0c" + integrity sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA== + dependencies: + "@octokit/types" "^9.0.0" + +"@octokit/core@^4.1.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.0.tgz#8c253ba9605aca605bc46187c34fcccae6a96648" + integrity sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg== + 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" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.5.tgz#2bb2a911c12c50f10014183f5d596ce30ac67dd1" + integrity sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA== + 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.5" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.5.tgz#a4cb3ea73f83b861893a6370ee82abb36e81afd2" + integrity sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ== + dependencies: + "@octokit/request" "^6.0.0" + "@octokit/types" "^9.0.0" + universal-user-agent "^6.0.0" + +"@octokit/openapi-types@^16.0.0": + version "16.0.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-16.0.0.tgz#d92838a6cd9fb4639ca875ddb3437f1045cc625e" + integrity sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA== + +"@octokit/plugin-paginate-rest@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz#f34b5a7d9416019126042cd7d7b811e006c0d561" + integrity sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw== + dependencies: + "@octokit/types" "^9.0.0" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@^7.0.0": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz#f7ebe18144fd89460f98f35a587b056646e84502" + integrity sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA== + dependencies: + "@octokit/types" "^9.0.0" + deprecation "^2.3.1" + +"@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" + 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.3" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.3.tgz#76d5d6d44da5c8d406620a4c285d280ae310bdb4" + integrity sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA== + 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/rest@^19.0.0": + version "19.0.7" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.7.tgz#d2e21b4995ab96ae5bfae50b4969da7e04e0bb70" + integrity sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA== + dependencies: + "@octokit/core" "^4.1.0" + "@octokit/plugin-paginate-rest" "^6.0.0" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^7.0.0" + +"@octokit/types@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.0.0.tgz#6050db04ddf4188ec92d60e4da1a2ce0633ff635" + integrity sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw== + dependencies: + "@octokit/openapi-types" "^16.0.0" + +"@pnpm/config.env-replace@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.0.0.tgz#c76fa65847c9554e88d910f264c2ba9a1575e833" + integrity sha512-ZVPVDi1E8oeXlYqkGRtX0CkzLTwE2zt62bjWaWKaAvI8NZqHzlMvGeSNDpW+JB3+aKanYb4UETJOF1/CxGPemA== + +"@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" + integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== + dependencies: + graceful-fs "4.2.10" + +"@pnpm/npm-conf@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.1.0.tgz#1bbecd961a1ea447f209556728e2dcadddb0bca6" + integrity sha512-Oe6ntvgsMTE3hDIqy6sajqHF+MnzJrOF06qC2QSiUEybLL7cp6tjoKUa32gpd9+KPVl4QyMs3E3nsXrx/Vdnlw== + dependencies: + "@pnpm/config.env-replace" "^1.0.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.yarnpkg.com/@semantic-release/changelog/-/changelog-6.0.3.tgz#6195630ecbeccad174461de727d5f975abc23eeb" + 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@^9.0.2": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz#a78e54f9834193b55f1073fa6258eecc9a545e03" + integrity sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g== + 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 "^4.17.4" + micromatch "^4.0.2" + +"@semantic-release/error@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-3.0.0.tgz#30a3b97bbb5844d695eb22f9d3aa40f6a92770c2" + integrity sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw== + +"@semantic-release/git@10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@semantic-release/git/-/git-10.0.1.tgz#c646e55d67fae623875bf3a06a634dd434904498" + 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@^8.0.0": + version "8.0.7" + resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.7.tgz#643aee7a5cdd2acd3ae643bb90ad4ac796901de6" + integrity sha512-VtgicRIKGvmTHwm//iqTh/5NGQwsncOMR5vQK9pMT92Aem7dv37JFKKRuulUsAnUOIlO4G8wH3gPiBAA0iW0ww== + dependencies: + "@octokit/rest" "^19.0.0" + "@semantic-release/error" "^3.0.0" + aggregate-error "^3.0.0" + bottleneck "^2.18.1" + debug "^4.0.0" + dir-glob "^3.0.0" + fs-extra "^11.0.0" + globby "^11.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + issue-parser "^6.0.0" + lodash "^4.17.4" + mime "^3.0.0" + p-filter "^2.0.0" + p-retry "^4.0.0" + url-join "^4.0.0" + +"@semantic-release/npm@^9.0.0": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-9.0.2.tgz#0f0903b4df6e93ef237372146bc376087fed4e1d" + integrity sha512-zgsynF6McdzxPnFet+a4iO9HpAlARXOM5adz7VGVCvj0ne8wtL2ZOQoDV2wZPDmdEotDIbVeJjafhelZjs9j6g== + dependencies: + "@semantic-release/error" "^3.0.0" + aggregate-error "^3.0.0" + execa "^5.0.0" + fs-extra "^11.0.0" + lodash "^4.17.15" + nerf-dart "^1.0.0" + normalize-url "^6.0.0" + npm "^8.3.0" + rc "^1.2.8" + read-pkg "^5.0.0" + registry-auth-token "^5.0.0" + semver "^7.1.2" + tempy "^1.0.0" + +"@semantic-release/release-notes-generator@^10.0.0": + version "10.0.3" + resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz#85f7ca78bfa6b01fb5fda0ac48112855d69171dc" + integrity sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w== + 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 "^6.0.0" + import-from "^4.0.0" + into-stream "^6.0.0" + lodash "^4.17.4" + read-pkg-up "^7.0.0" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + 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" @@ -454,6 +947,23 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== +"@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" + integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@^4.3.4": + version "4.3.4" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" + integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== + +"@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" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" @@ -464,7 +974,7 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== -"@types/node@^18.13.0": +"@types/node@*", "@types/node@^18.13.0": version "18.14.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.0.tgz#94c47b9217bbac49d4a67a967fdcdeed89ebb7d0" integrity sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A== @@ -500,6 +1010,11 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" @@ -605,21 +1120,103 @@ magic-string "^0.27.0" react-refresh "^0.14.0" +"@vitest/coverage-c8@^0.29.7": + version "0.29.7" + resolved "https://registry.yarnpkg.com/@vitest/coverage-c8/-/coverage-c8-0.29.7.tgz#ef2ce02ffb6c1645740139a62d1867b521bf1b95" + integrity sha512-TSubtP9JFBuI/wuApxwknHe40VDkX8hFbBak0OXj4/jCeXrEu5B5GPWcxzyk9YvzXgCaDvoiZV79I7AvhNI9YQ== + dependencies: + c8 "^7.13.0" + picocolors "^1.0.0" + std-env "^3.3.1" + +"@vitest/expect@0.29.2": + version "0.29.2" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.29.2.tgz#7503aabd72764612b0bc8258bafa3232ccb81586" + integrity sha512-wjrdHB2ANTch3XKRhjWZN0UueFocH0cQbi2tR5Jtq60Nb3YOSmakjdAvUa2JFBu/o8Vjhj5cYbcMXkZxn1NzmA== + dependencies: + "@vitest/spy" "0.29.2" + "@vitest/utils" "0.29.2" + chai "^4.3.7" + +"@vitest/runner@0.29.2": + version "0.29.2" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.29.2.tgz#bbc7b239758de4158392bb343e48ee5a4aa507e1" + integrity sha512-A1P65f5+6ru36AyHWORhuQBJrOOcmDuhzl5RsaMNFe2jEkoj0faEszQS4CtPU/LxUYVIazlUtZTY0OEZmyZBnA== + dependencies: + "@vitest/utils" "0.29.2" + p-limit "^4.0.0" + pathe "^1.1.0" + +"@vitest/spy@0.29.2": + version "0.29.2" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.29.2.tgz#4210d844fabd9a68a1d2932d6a26c051bd089021" + integrity sha512-Hc44ft5kaAytlGL2PyFwdAsufjbdOvHklwjNy/gy/saRbg9Kfkxfh+PklLm1H2Ib/p586RkQeNFKYuJInUssyw== + dependencies: + tinyspy "^1.0.2" + +"@vitest/utils@0.29.2": + version "0.29.2" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.29.2.tgz#8990794a6855de19b59da80413dc5a1e1991da4d" + integrity sha512-F14/Uc+vCdclStS2KEoXJlOLAEyqRhnw0gM27iXw9bMTcyKRPJrQ+rlC6XZ125GIPvvKYMPpVxNhiou6PsEeYQ== + dependencies: + cli-truncate "^3.1.0" + diff "^5.1.0" + loupe "^2.3.6" + picocolors "^1.0.0" + pretty-format "^27.5.1" + +JSONStream@^1.0.4: + 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, abbrev@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.1.1: +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" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.4.1, acorn@^8.8.0: +acorn@^8.4.1, acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2: version "8.8.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" + 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.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -630,7 +1227,7 @@ 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.0.1, ajv@^8.11.0: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -645,9 +1242,10 @@ algo-msgpack-with-bigint@^2.1.1: resolved "https://registry.yarnpkg.com/algo-msgpack-with-bigint/-/algo-msgpack-with-bigint-2.1.1.tgz#38bb717220525b3ff42232eefdcd9efb9ad405d6" integrity sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ== -algosdk@^2.1.0, "algosdk@https://github.com/algorand/js-algorand-sdk.git#develop": - version "2.1.0" - resolved "https://github.com/algorand/js-algorand-sdk.git#e9635e9ffc9019994f0790ee4b8d9733c6590250" +algosdk@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/algosdk/-/algosdk-2.2.0.tgz#12f80b5f68c955b338aa5b9d5fc6cbd64ce6ea7a" + integrity sha512-FG3u/60DzjMK9Cffy9itst7WcfsTgZKfsD1r8pT33PfsA7r8NoXiUSL7cf0fNWFus6S3E14BpE2CY64VJ8KV1A== dependencies: algo-msgpack-with-bigint "^2.1.1" buffer "^6.0.3" @@ -660,11 +1258,30 @@ algosdk@^2.1.0, "algosdk@https://github.com/algorand/js-algorand-sdk.git#develop 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" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-escapes@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-5.0.0.tgz#b6a0caf0eef0c41af190e9a749e0c00ec04bb2a6" + integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== + dependencies: + type-fest "^1.0.2" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 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" + 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" @@ -672,13 +1289,46 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.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" 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" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + 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" + 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" + 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" + 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" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -689,6 +1339,16 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 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" + 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" + 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" @@ -699,11 +1359,40 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + 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" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +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" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +axios@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.4.tgz#f5760cefd9cfb51fd2481acf88c05f67c4523024" + integrity sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -719,20 +1408,55 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -beaker-ts@^0.0.81: - version "0.0.81" - resolved "https://registry.yarnpkg.com/beaker-ts/-/beaker-ts-0.0.81.tgz#90981829010ac9b1707e7672f80d2720d80cb3da" - integrity sha512-Ovdcgi5750eNeU2JlUSqsQ/BCU6fDxmNuPCMuUhEmoIwW0vlTbnUN/bpv9Mz46cP3uWaNhmpjI5tvPQzHTbntQ== +beaker-ts@^0.0.95: + version "0.0.95" + resolved "https://registry.yarnpkg.com/beaker-ts/-/beaker-ts-0.0.95.tgz#f283bef296506bc15df866216b455037585376d2" + integrity sha512-SZOHK3HYWrzJ/Eoc24nHt4avKc2K58gE3ABoORXWv7/J85k6K6dgVW3DnLJJnqNozcaCZzSRsztMu6Uu1rSYzw== dependencies: - algosdk "^2.1.0" commander "^9.4.0" typescript "^4.7.4" +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" + 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" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== +bin-links@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-3.0.3.tgz#3842711ef3db2cd9f16a5f404a996a12db355a6e" + integrity sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA== + dependencies: + cmd-shim "^5.0.0" + mkdirp-infer-owner "^2.0.0" + npm-normalize-package-bin "^2.0.0" + read-cmd-shim "^3.0.0" + rimraf "^3.0.0" + write-file-atomic "^4.0.0" + +binary-extensions@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bottleneck@^2.18.1: + version "2.19.5" + resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" + 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" @@ -741,6 +1465,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + 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" @@ -758,6 +1489,14 @@ browserslist@^4.21.3: node-releases "^2.0.8" update-browserslist-db "^1.0.10" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + 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.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" @@ -766,6 +1505,65 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +c8@^7.13.0: + version "7.13.0" + resolved "https://registry.yarnpkg.com/c8/-/c8-7.13.0.tgz#a2a70a851278709df5a9247d62d7f3d4bcb5f2e4" + integrity sha512-/NL4hQTv1gBL6J6ei80zu3IiTrmePDKXKXOTLpHvcIWZTVYQlDhVWjjWvkhICylE8EwwnMVzDZugCvdx0/DIIA== + 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.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +cacache@^16.0.0, cacache@^16.1.0, cacache@^16.1.3: + version "16.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" + integrity sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ== + 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" + +cachedir@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + 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" @@ -790,7 +1588,28 @@ caniuse-lite@^1.0.30001449: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001456.tgz#734ec1dbfa4f3abe6e435b78ecf40d68e8c32ce4" integrity sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA== -chalk@^2.0.0: +cardinal@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== + dependencies: + ansicolors "~0.3.2" + redeyed "~2.1.0" + +chai@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" + 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, chalk@^2.3.2, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -799,7 +1618,7 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: +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" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -807,6 +1626,89 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" + integrity sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + 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" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +cidr-regex@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" + 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" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-columns@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" + 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.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + +cli-table3@^0.6.1, cli-table3@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + 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" + 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.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -816,6 +1718,18 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +cmd-shim@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-5.0.0.tgz#8d0aaa1a6b0708630694c4dbde070ed94c707724" + integrity sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw== + dependencies: + mkdirp-infer-owner "^2.0.0" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -840,30 +1754,154 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + 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" 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" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^9.4.0: version "9.5.0" resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== +commitizen@4.3.0, commitizen@^4.0.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.3.0.tgz#0d056c542a2d2b1f9b9aba981aa32575b2849924" + 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.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + 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" + 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.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -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" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cosmiconfig@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + 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.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +conventional-changelog-angular@^5.0.0: + version "5.0.13" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" + integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== + dependencies: + compare-func "^2.0.0" + q "^1.5.1" + +conventional-changelog-writer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" + integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== + 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.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" + integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== + +conventional-commits-filter@^2.0.0, conventional-commits-filter@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" + integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.0" + +conventional-commits-parser@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== + dependencies: + JSONStream "^1.0.4" + is-text-path "^1.0.1" + 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" + 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" + 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" + integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q== + +cosmiconfig@^7.0.0, cosmiconfig@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: "@types/parse-json" "^4.0.0" import-fresh "^3.2.1" @@ -871,6 +1909,16 @@ cosmiconfig@^7.1.0: path-type "^4.0.0" yaml "^1.10.0" +cosmiconfig@^8.0.0: + version "8.1.3" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" + integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== + 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.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" @@ -883,7 +1931,7 @@ cross-fetch@^3.1.5: dependencies: node-fetch "2.6.7" -cross-spawn@^7.0.2: +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" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -892,6 +1940,11 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" +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" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + 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" @@ -907,13 +1960,37 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +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" + 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" + +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: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== + decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" @@ -927,17 +2004,98 @@ decamelize@^1.1.0, decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 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" + 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" + 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" + 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" 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" + 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" + 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" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + 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" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + 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" + 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" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + +dezalgo@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + dependencies: + asap "^2.0.0" + wrappy "1" + diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -dir-glob@^3.0.1: +diff@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + 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" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== @@ -951,6 +2109,13 @@ doctrine@^3.0.0: 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" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + dts-bundle-generator@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/dts-bundle-generator/-/dts-bundle-generator-7.2.0.tgz#1a06f621e33399e38c8968bbd71d65ab577e5327" @@ -959,6 +2124,18 @@ dts-bundle-generator@^7.1.0: typescript ">=4.5.2" yargs "^17.6.0" +duplexer2@~0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + 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" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + electron-to-chromium@^1.4.284: version "1.4.302" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.302.tgz#5770646ffe7051677b489226144aad9386d420f2" @@ -969,6 +2146,37 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 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" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +env-ci@^5.0.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-5.5.0.tgz#43364e3554d261a586dec707bc32be81112b545f" + integrity sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A== + dependencies: + execa "^5.0.0" + fromentries "^1.3.2" + java-properties "^1.0.0" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + 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" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -1118,6 +2326,11 @@ espree@^9.4.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" +esprima@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + esquery@^1.4.0: version "1.4.2" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.2.tgz#c6d3fee05dd665808e2ad870631f221f5617b1d1" @@ -1147,6 +2360,37 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + 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" + +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" + integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== + dependencies: + homedir-polyfill "^1.0.1" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + 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.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -1178,7 +2422,7 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fastest-levenshtein@^1.0.16: +fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== @@ -1190,6 +2434,20 @@ fastq@^1.6.0: 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" + 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" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + 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" @@ -1204,6 +2462,26 @@ fill-range@^7.0.1: 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" + 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.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + 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" + 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" @@ -1220,6 +2498,23 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" +find-versions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-4.0.0.tgz#3c57e573bf97769b8cb8df16934b627915da4965" + integrity sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ== + dependencies: + semver-regex "^3.1.2" + +findup-sync@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + 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.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -1233,6 +2528,76 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +from2@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fromentries@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + +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" + 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.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.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" @@ -1248,6 +2613,20 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + 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" + 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" @@ -1258,6 +2637,28 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 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" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +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" + 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.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1272,7 +2673,7 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob@^7.1.3: +glob@7.2.3, glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1284,6 +2685,33 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global-dirs@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + 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" + 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.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -1291,6 +2719,17 @@ global-modules@^2.0.0: 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" + 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.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" @@ -1312,7 +2751,7 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globby@^11.1.0: +globby@^11.0.0, globby@^11.0.1, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -1329,11 +2768,33 @@ globjoin@^0.1.4: resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" 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.10, graceful-fs@^4.2.4, graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + grapheme-splitter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== +handlebars@^4.7.7: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + 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.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" @@ -1349,6 +2810,11 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 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" + 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" @@ -1361,28 +2827,107 @@ hi-base32@^0.5.1: resolved "https://registry.yarnpkg.com/hi-base32/-/hi-base32-0.5.1.tgz#1279f2ddae2673219ea5870c2121d2a33132857e" 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" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hook-std@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" + integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== + 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" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^4.0.1: +hosted-git-info@^4.0.0, 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" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== dependencies: lru-cache "^6.0.0" +hosted-git-info@^5.0.0, hosted-git-info@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-5.2.1.tgz#0ba1c97178ef91f3ab30842ae63d6a272341156f" + integrity sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw== + 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" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + html-tags@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.2.0.tgz#dbb3518d20b726524e4dd43de397eb0a95726961" integrity sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg== -ieee754@^1.2.1: +http-cache-semantics@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + 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" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +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" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + 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" + 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" + 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" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore-walk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" + integrity sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw== + dependencies: + minimatch "^5.0.1" + ignore@^5.2.0, ignore@^5.2.1: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" @@ -1396,6 +2941,11 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" + 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" @@ -1411,6 +2961,11 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1419,22 +2974,86 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.5: +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" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +ini@^3.0.0, ini@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ini/-/ini-3.0.1.tgz#c76ec81007875bc44d544ff7a11a55d12294102d" + integrity sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ== + +init-package-json@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-3.0.2.tgz#f5bc9bac93f2bdc005778bc2271be642fecfcd69" + integrity sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A== + dependencies: + npm-package-arg "^9.0.1" + promzard "^0.3.0" + read "^1.0.7" + read-package-json "^5.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^4.0.0" + +inquirer@8.2.5: + version "8.2.5" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" + 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@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702" + integrity sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA== + dependencies: + from2 "^2.3.0" + p-is-promise "^3.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" + 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" + 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" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-core-module@^2.5.0, is-core-module@^2.9.0: +is-cidr@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" + integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== + dependencies: + cidr-regex "^3.1.1" + +is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== @@ -1451,6 +3070,11 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + 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" @@ -1458,12 +3082,32 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 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" + 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" + 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" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-inside@^3.0.3: +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + 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" + 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" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -1478,11 +3122,81 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" 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" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +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" + 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" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + 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" + 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" + 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" 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" + 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.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + 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" + 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.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +java-properties@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" + integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== + js-sdsl@^4.1.4: version "4.3.0" resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" @@ -1527,7 +3241,12 @@ json-bigint@^1.0.0: dependencies: bignumber.js "^9.0.0" -json-parse-even-better-errors@^2.3.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" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -1547,11 +3266,50 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 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" + 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" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + json5@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 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" + 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" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +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" + integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== + +just-diff@^5.0.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241" + integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw== + 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" @@ -1570,11 +3328,147 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +libnpmaccess@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-6.0.4.tgz#2dd158bd8a071817e2207d3b201d37cf1ad6ae6b" + integrity sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag== + dependencies: + aproba "^2.0.0" + minipass "^3.1.1" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + +libnpmdiff@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-4.0.5.tgz#ffaf93fa9440ea759444b8830fdb5c661b09a7c0" + integrity sha512-9fICQIzmH892UwHHPmb+Seup50UIBWcMIK2FdxvlXm9b4kc1nSH0b/BuY1mORJQtB6ydPMnn+BLzOTmd/SKJmw== + dependencies: + "@npmcli/disparity-colors" "^2.0.0" + "@npmcli/installed-package-contents" "^1.0.7" + binary-extensions "^2.2.0" + diff "^5.1.0" + minimatch "^5.0.1" + npm-package-arg "^9.0.1" + pacote "^13.6.1" + tar "^6.1.0" + +libnpmexec@^4.0.14: + version "4.0.14" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-4.0.14.tgz#9ad44232434b374e477eb2c2e4548baaf698f773" + integrity sha512-dwmzv2K29SdoAHBOa7QR6CfQbFG/PiZDRF6HZrlI6C4DLt2hNgOHTFaUGOpqE2C+YGu0ZwYTDywxRe0eOnf0ZA== + dependencies: + "@npmcli/arborist" "^5.6.3" + "@npmcli/ci-detect" "^2.0.0" + "@npmcli/fs" "^2.1.1" + "@npmcli/run-script" "^4.2.0" + chalk "^4.1.0" + mkdirp-infer-owner "^2.0.0" + npm-package-arg "^9.0.1" + npmlog "^6.0.2" + pacote "^13.6.1" + proc-log "^2.0.0" + read "^1.0.7" + read-package-json-fast "^2.0.2" + semver "^7.3.7" + walk-up-path "^1.0.0" + +libnpmfund@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-3.0.5.tgz#817f9e2120889beb483d9ba8eda142bb84293e4e" + integrity sha512-KdeRoG/dem8H3PcEU2/0SKi3ip7AWwczgS72y/3PE+PBrz/s/G52FNIA9jeLnBirkLC0sOyQHfeM3b7e24ZM+g== + dependencies: + "@npmcli/arborist" "^5.6.3" + +libnpmhook@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-8.0.4.tgz#6c58e5fe763ff5d600ae9c20457ea9a69d1f7d87" + integrity sha512-nuD6e+Nx0OprjEi0wOeqASMl6QIH235th/Du2/8upK3evByFhzIgdfOeP1OhstavW4xtsl0hk5Vw4fAWWuSUgA== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^13.0.0" + +libnpmorg@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-4.0.4.tgz#2a01d49372cf0df90d79a61e69bddaf2ed704311" + integrity sha512-1bTpD7iub1rDCsgiBguhJhiDufLQuc8DEti20euqsXz9O0ncXVpCYqf2SMmHR4GEdmAvAj2r7FMiyA9zGdaTpA== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^13.0.0" + +libnpmpack@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-4.1.3.tgz#025cfe39829acd8260662bf259e3a9331fc1e4b2" + integrity sha512-rYP4X++ME3ZiFO+2iN3YnXJ4LB4Gsd0z5cgszWJZxaEpDN4lRIXirSyynGNsN/hn4taqnlxD+3DPlFDShvRM8w== + dependencies: + "@npmcli/run-script" "^4.1.3" + npm-package-arg "^9.0.1" + pacote "^13.6.1" + +libnpmpublish@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-6.0.5.tgz#5a894f3de2e267d62f86be2a508e362599b5a4b1" + integrity sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg== + dependencies: + normalize-package-data "^4.0.0" + npm-package-arg "^9.0.1" + npm-registry-fetch "^13.0.0" + semver "^7.3.7" + ssri "^9.0.0" + +libnpmsearch@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-5.0.4.tgz#b32aa2b23051c00cdcc0912274d0d416e6655d81" + integrity sha512-XHDmsvpN5+pufvGnfLRqpy218gcGGbbbXR6wPrDJyd1em6agKdYByzU5ccskDHH9iVm2UeLydpDsW1ksYuU0cg== + dependencies: + npm-registry-fetch "^13.0.0" + +libnpmteam@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-4.0.4.tgz#ac26068808d93b1051d926457db14e4b3ff669ef" + integrity sha512-rzKSwi6MLzwwevbM/vl+BBQTErgn24tCfgPUdzBlszrw3j5necOu7WnTzgvZMDv6maGUwec6Ut1rxszOgH0l+Q== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^13.0.0" + +libnpmversion@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-3.0.7.tgz#e4c6c07ee28cf351ce1e2293a5ac9922b09ea94d" + integrity sha512-O0L4eNMUIMQ+effi1HsZPKp2N6wecwqGqB8PvkvmLPWN7EsdabdzAVG48nv0p/OjlbIai5KQg/L+qMMfCA4ZjA== + dependencies: + "@npmcli/git" "^3.0.0" + "@npmcli/run-script" "^4.1.3" + json-parse-even-better-errors "^2.3.1" + proc-log "^2.0.0" + semver "^7.3.7" + 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" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +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" + 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.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" + 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" + 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.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -1589,21 +3483,86 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.capitalize@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" + 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" + 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" + 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" + 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" + 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" + 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" 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" + 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" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.21: +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + 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" + integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== + +lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 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" + 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.yarnpkg.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" + 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" + 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" @@ -1618,6 +3577,11 @@ lru-cache@^6.0.0: 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" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + magic-string@^0.27.0: version "0.27.0" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" @@ -1625,11 +3589,40 @@ magic-string@^0.27.0: 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" + 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" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +make-fetch-happen@^10.0.3, make-fetch-happen@^10.0.6, make-fetch-happen@^10.2.0: + version "10.2.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz#f5e3835c5e9817b617f2770870d9492d28678164" + integrity sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w== + 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" + map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" @@ -1640,11 +3633,45 @@ map-obj@^4.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== +marked-terminal@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.1.1.tgz#d2edc2991841d893ee943b44b40b2ee9518b4d9f" + integrity sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g== + dependencies: + ansi-escapes "^5.0.0" + cardinal "^2.1.1" + chalk "^5.0.0" + cli-table3 "^0.6.1" + node-emoji "^1.11.0" + supports-hyperlinks "^2.2.0" + +marked@^4.0.10: + version "4.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + 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" integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== +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" + 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.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" @@ -1663,12 +3690,22 @@ meow@^9.0.0: type-fest "^0.18.0" yargs-parser "^20.2.3" +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + 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== -micromatch@^4.0.4, micromatch@^4.0.5: +merge@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" + integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== + +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" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== @@ -1676,18 +3713,47 @@ micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + 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" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1, minimatch@^5.1.0: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + 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" @@ -1697,11 +3763,127 @@ minimist-options@4.1.0: 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" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-2.1.2.tgz#95560b50c472d81a3bc76f20ede80eaed76d8add" + integrity sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA== + dependencies: + minipass "^3.1.6" + 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.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + 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" + 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.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + 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" + 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.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.0.0: + version "4.2.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.5.tgz#9e0e5256f1e3513f8c34691dd68549e85b2c8ceb" + integrity sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q== + +minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp-infer-owner@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz#55d3b368e7d89065c38f32fd38e638f0ab61d316" + integrity sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw== + dependencies: + chownr "^2.0.0" + infer-owner "^1.0.4" + 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" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mlly@^1.1.0, mlly@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.1.1.tgz#f1838b14795e2cc284aa4ebcc76a258a52e6f537" + integrity sha512-Jnlh4W/aI4GySPo6+DyTN17Q75KKbLTyFK8BrGhjNP4rxuUjbRWhE6gHg3bs33URWAF44FRm7gdQA348i3XxRw== + dependencies: + acorn "^8.8.2" + pathe "^1.1.0" + pkg-types "^1.0.1" + ufo "^1.1.0" + +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" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mute-stream@0.0.8, mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + nanoid@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" @@ -1717,6 +3899,28 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + 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" + 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" + 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" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + node-fetch@2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" @@ -1724,11 +3928,41 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.7: + version "2.6.9" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" + integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== + dependencies: + whatwg-url "^5.0.0" + +node-gyp@^9.0.0, node-gyp@^9.1.0: + version "9.3.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" + integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== + 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.8: version "2.0.10" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.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" @@ -1749,18 +3983,235 @@ normalize-package-data@^3.0.0: semver "^7.3.4" validate-npm-package-license "^3.0.1" +normalize-package-data@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-4.0.1.tgz#b46b24e0616d06cadf9d5718b29b6d445a82a62c" + integrity sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg== + dependencies: + hosted-git-info "^5.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.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -once@^1.3.0: +normalize-url@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-audit-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-3.0.0.tgz#1bf3e531208b5f77347c8d00c3d9badf5be30cd6" + integrity sha512-tWQzfbwz1sc4244Bx2BVELw0EmZlCsCF0X93RDcmmwhonCsPMoEviYsi+32R+mdRvOWXolPce9zo64n2xgPESw== + dependencies: + chalk "^4.0.0" + +npm-bundled@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-bundled@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-2.0.1.tgz#94113f7eb342cd7a67de1e789f896b04d2c600f4" + integrity sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw== + dependencies: + npm-normalize-package-bin "^2.0.0" + +npm-install-checks@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-5.0.0.tgz#5ff27d209a4e3542b8ac6b0c1db6063506248234" + integrity sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-normalize-package-bin@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz#9447a1adaaf89d8ad0abe24c6c84ad614a675fff" + integrity sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ== + +npm-package-arg@^9.0.0, npm-package-arg@^9.0.1, npm-package-arg@^9.1.0: + version "9.1.2" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-9.1.2.tgz#fc8acecb00235f42270dda446f36926ddd9ac2bc" + integrity sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg== + dependencies: + hosted-git-info "^5.0.0" + proc-log "^2.0.1" + semver "^7.3.5" + validate-npm-package-name "^4.0.0" + +npm-packlist@^5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-5.1.3.tgz#69d253e6fd664b9058b85005905012e00e69274b" + integrity sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg== + dependencies: + glob "^8.0.1" + ignore-walk "^5.0.1" + npm-bundled "^2.0.0" + npm-normalize-package-bin "^2.0.0" + +npm-pick-manifest@^7.0.0, npm-pick-manifest@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz#1d372b4e7ea7c6712316c0e99388a73ed3496e84" + integrity sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw== + dependencies: + npm-install-checks "^5.0.0" + npm-normalize-package-bin "^2.0.0" + npm-package-arg "^9.0.0" + semver "^7.3.5" + +npm-profile@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-6.2.1.tgz#975c31ec75a6ae029ab5b8820ffdcbae3a1e3d5e" + integrity sha512-Tlu13duByHyDd4Xy0PgroxzxnBYWbGGL5aZifNp8cx2DxUrHSoETXtPKg38aRPsBWMRfDtvcvVfJNasj7oImQQ== + dependencies: + npm-registry-fetch "^13.0.1" + proc-log "^2.0.0" + +npm-registry-fetch@^13.0.0, npm-registry-fetch@^13.0.1, npm-registry-fetch@^13.3.1: + version "13.3.1" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz#bb078b5fa6c52774116ae501ba1af2a33166af7e" + integrity sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw== + dependencies: + make-fetch-happen "^10.0.6" + minipass "^3.1.6" + minipass-fetch "^2.0.3" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^9.0.1" + proc-log "^2.0.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" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npm-user-validate@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" + integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== + +npm@^8.3.0: + version "8.19.4" + resolved "https://registry.yarnpkg.com/npm/-/npm-8.19.4.tgz#65ad6a2dfdd157a4ef4467fb86e8dcd35a43493f" + integrity sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/arborist" "^5.6.3" + "@npmcli/ci-detect" "^2.0.0" + "@npmcli/config" "^4.2.1" + "@npmcli/fs" "^2.1.0" + "@npmcli/map-workspaces" "^2.0.3" + "@npmcli/package-json" "^2.0.0" + "@npmcli/run-script" "^4.2.1" + abbrev "~1.1.1" + archy "~1.0.0" + cacache "^16.1.3" + chalk "^4.1.2" + chownr "^2.0.0" + cli-columns "^4.0.0" + cli-table3 "^0.6.2" + columnify "^1.6.0" + fastest-levenshtein "^1.0.12" + fs-minipass "^2.1.0" + glob "^8.0.1" + graceful-fs "^4.2.10" + hosted-git-info "^5.2.1" + ini "^3.0.1" + init-package-json "^3.0.2" + is-cidr "^4.0.2" + json-parse-even-better-errors "^2.3.1" + libnpmaccess "^6.0.4" + libnpmdiff "^4.0.5" + libnpmexec "^4.0.14" + libnpmfund "^3.0.5" + libnpmhook "^8.0.4" + libnpmorg "^4.0.4" + libnpmpack "^4.1.3" + libnpmpublish "^6.0.5" + libnpmsearch "^5.0.4" + libnpmteam "^4.0.4" + libnpmversion "^3.0.7" + make-fetch-happen "^10.2.0" + minimatch "^5.1.0" + minipass "^3.1.6" + minipass-pipeline "^1.2.4" + mkdirp "^1.0.4" + mkdirp-infer-owner "^2.0.0" + ms "^2.1.2" + node-gyp "^9.1.0" + nopt "^6.0.0" + npm-audit-report "^3.0.0" + npm-install-checks "^5.0.0" + npm-package-arg "^9.1.0" + npm-pick-manifest "^7.0.2" + npm-profile "^6.2.0" + npm-registry-fetch "^13.3.1" + npm-user-validate "^1.0.1" + npmlog "^6.0.2" + opener "^1.5.2" + p-map "^4.0.0" + pacote "^13.6.2" + parse-conflict-json "^2.0.2" + proc-log "^2.0.1" + qrcode-terminal "^0.12.0" + read "~1.0.7" + read-package-json "^5.0.2" + read-package-json-fast "^2.0.3" + readdir-scoped-modules "^1.1.0" + rimraf "^3.0.2" + semver "^7.3.7" + ssri "^9.0.1" + tar "^6.1.11" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + treeverse "^2.0.0" + validate-npm-package-name "^4.0.0" + which "^2.0.2" + write-file-atomic "^4.0.1" + +npmlog@^6.0.0, npmlog@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + 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" + +once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 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" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -1773,6 +4224,50 @@ optionator@^0.9.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" + 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.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-each-series@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== + +p-filter@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" + integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw== + dependencies: + p-map "^2.0.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" + 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" + 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" @@ -1787,6 +4282,20 @@ p-limit@^3.0.2: 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" + 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" + 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" @@ -1801,11 +4310,68 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.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" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-retry@^4.0.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + 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" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +pacote@^13.0.3, pacote@^13.6.1, pacote@^13.6.2: + version "13.6.2" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" + integrity sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg== + dependencies: + "@npmcli/git" "^3.0.0" + "@npmcli/installed-package-contents" "^1.0.7" + "@npmcli/promise-spawn" "^3.0.0" + "@npmcli/run-script" "^4.1.0" + cacache "^16.0.0" + chownr "^2.0.0" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + minipass "^3.1.6" + mkdirp "^1.0.4" + npm-package-arg "^9.0.0" + npm-packlist "^5.1.0" + npm-pick-manifest "^7.0.0" + npm-registry-fetch "^13.0.1" + proc-log "^2.0.0" + promise-retry "^2.0.1" + read-package-json "^5.0.0" + read-package-json-fast "^2.0.3" + rimraf "^3.0.2" + ssri "^9.0.0" + tar "^6.1.11" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -1813,6 +4379,23 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-conflict-json@^2.0.1, parse-conflict-json@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz#3d05bc8ffe07d39600dc6436c6aefe382033d323" + integrity sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA== + dependencies: + json-parse-even-better-errors "^2.3.1" + just-diff "^5.0.1" + just-diff-apply "^5.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse-json@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -1823,6 +4406,16 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + 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" + 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" @@ -1833,7 +4426,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^3.1.0: +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" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -1848,6 +4441,16 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.0.tgz#e2e13f6c62b31a3289af4ba19886c230f295ec03" + integrity sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -1858,6 +4461,28 @@ picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + 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" + integrity sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g== + dependencies: + find-up "^2.0.0" + load-json-file "^4.0.0" + +pkg-types@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.2.tgz#c233efc5210a781e160e0cafd60c0d0510a4b12e" + integrity sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.1.1" + pathe "^1.1.0" + 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" @@ -1878,7 +4503,7 @@ postcss-scss@^4.0.2: resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-4.0.6.tgz#5d62a574b950a6ae12f2aa89b60d63d9e4432bfd" integrity sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ== -postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.6: +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.6: version "6.0.11" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== @@ -1922,11 +4547,80 @@ prettier@^2.8.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== +pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +proc-log@^2.0.0, proc-log@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" + integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw== + +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" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +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" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.1.tgz#4bdee03aeb85674385ca934da7114e9bcd3c6e24" + integrity sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + 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" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== + dependencies: + read "1" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + punycode@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qrcode-terminal@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + 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" @@ -1937,12 +4631,50 @@ quick-lru@^4.0.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +rc@1.2.8, rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + 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.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + 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" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== -read-pkg-up@^7.0.1: +read-cmd-shim@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz#868c235ec59d1de2db69e11aec885bc095aea087" + integrity sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g== + +read-package-json-fast@^2.0.2, read-package-json-fast@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz#323ca529630da82cb34b36cc0b996693c98c2b83" + integrity sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ== + dependencies: + json-parse-even-better-errors "^2.3.0" + npm-normalize-package-bin "^1.0.1" + +read-package-json@^5.0.0, read-package-json@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-5.0.2.tgz#b8779ccfd169f523b67208a89cc912e3f663f3fa" + integrity sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q== + dependencies: + glob "^8.0.1" + json-parse-even-better-errors "^2.3.1" + normalize-package-data "^4.0.0" + npm-normalize-package-bin "^2.0.0" + +read-pkg-up@^7.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" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== @@ -1951,7 +4683,7 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^5.2.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" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== @@ -1961,6 +4693,45 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" +read@1, read@^1.0.7, read@~1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== + dependencies: + mute-stream "~0.0.4" + +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +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" + 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" + +readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -1969,11 +4740,32 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +redeyed@~2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== + dependencies: + esprima "~4.0.0" + regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +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" + 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" + 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" @@ -1984,6 +4776,14 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 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" + 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.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -1994,6 +4794,13 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 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" + integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== + dependencies: + global-dirs "^0.1.1" + resolve@^1.10.0, resolve@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" @@ -2003,12 +4810,30 @@ resolve@^1.10.0, resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + 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.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.2: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -2022,6 +4847,11 @@ rollup@^3.10.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" + 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" @@ -2029,23 +4859,96 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@^7.5.5: + version "7.8.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + 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" + 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" + 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" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semantic-release@19.0.3: + version "19.0.3" + resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-19.0.3.tgz#9291053ad9890052f28e7c5921d4741530d516fd" + integrity sha512-HaFbydST1cDKZHuFZxB8DTrBLJVK/AnDExpK0s3EqLIAAUAHUgnd+VSJCUtTYQKkAkauL8G9CucODrVCc7BuAA== + dependencies: + "@semantic-release/commit-analyzer" "^9.0.2" + "@semantic-release/error" "^3.0.0" + "@semantic-release/github" "^8.0.0" + "@semantic-release/npm" "^9.0.0" + "@semantic-release/release-notes-generator" "^10.0.0" + aggregate-error "^3.0.0" + cosmiconfig "^7.0.0" + debug "^4.0.0" + env-ci "^5.0.0" + execa "^5.0.0" + figures "^3.0.0" + find-versions "^4.0.0" + get-stream "^6.0.0" + git-log-parser "^1.2.0" + hook-std "^2.0.0" + hosted-git-info "^4.0.0" + lodash "^4.17.21" + marked "^4.0.10" + marked-terminal "^5.0.0" + micromatch "^4.0.2" + p-each-series "^2.1.0" + p-reduce "^2.0.0" + read-pkg-up "^7.0.0" + resolve-from "^5.0.0" + semver "^7.3.2" + semver-diff "^3.1.1" + signale "^1.2.1" + yargs "^16.2.0" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver-regex@^3.1.2: + version "3.1.4" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-3.1.4.tgz#13053c0d4aa11d070a2f2872b6b1e3ae1e1971b4" + integrity sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA== + "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.3.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.4, semver@^7.3.7: +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: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + 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" @@ -2058,11 +4961,25 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -signal-exit@^3.0.7: +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + 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" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signale@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" + integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + pkg-conf "^2.1.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -2077,11 +4994,51 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^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" + 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" + 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.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + 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.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 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" + 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" + integrity sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g== + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -2108,7 +5065,53 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +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" + integrity sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg== + dependencies: + through2 "~2.0.0" + +split@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + +ssri@^9.0.0, ssri@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-9.0.1.tgz#544d4c357a8d7b71a19700074b6883fcb4eae057" + integrity sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q== + 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" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== + +std-env@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.2.tgz#af27343b001616015534292178327b202b9ee955" + integrity sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA== + +stream-combiner2@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw== + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + +"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" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -2117,6 +5120,29 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + 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== + dependencies: + safe-buffer "~5.2.0" + +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== + dependencies: + safe-buffer "~5.1.0" + 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" @@ -2124,6 +5150,28 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + 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" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +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" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -2131,11 +5179,23 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, 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" 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" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strip-literal@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.0.1.tgz#0115a332710c849b4e46497891fb8d585e404bd2" + 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" @@ -2232,7 +5292,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.3.0: +supports-hyperlinks@^2.2.0, supports-hyperlinks@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== @@ -2261,11 +5321,100 @@ table@^6.8.1: string-width "^4.2.3" strip-ansi "^6.0.1" -text-table@^0.2.0: +tar@^6.1.0, tar@^6.1.11, tar@^6.1.2: + version "6.1.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" + integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^4.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.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + 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" + 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" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + 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.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +through2@~2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + 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== + +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" + integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== + +tinybench@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.3.1.tgz#14f64e6b77d7ef0b1f6ab850c7a808c6760b414d" + integrity sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA== + +tinypool@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.3.1.tgz#a99c2e446aba9be05d3e1cb756d6aed7af4723b6" + integrity sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ== + +tinyspy@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-1.1.1.tgz#0cb91d5157892af38cb2d217f5c7e8507a5bf092" + integrity sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + 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" @@ -2283,12 +5432,22 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +traverse@~0.6.6: + version "0.6.7" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" + integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== + +treeverse@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-2.0.0.tgz#036dcef04bc3fd79a9b79a68d4da03e882d8a9ca" + integrity sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A== + trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -ts-node@^10.9.1: +ts-node@^10.8.1, ts-node@^10.9.1: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== @@ -2312,7 +5471,7 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.4.1: +tslib@^2.1.0, tslib@^2.4.1: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== @@ -2336,6 +5495,16 @@ type-check@^0.4.0, type-check@~0.4.0: 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" + 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" + 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" @@ -2346,6 +5515,11 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 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" + 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" @@ -2356,11 +5530,62 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-fest@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + typescript@>=4.5.2, typescript@^4.7.4, typescript@^4.9.4: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +"typescript@^4.6.4 || ^5.0.0": + version "5.0.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.2.tgz#891e1a90c5189d8506af64b9ef929fca99ba1ee5" + integrity sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw== + +ufo@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.1.0.tgz#a5c4c814b0a98f7e0ca42c478688663fd3e3c037" + integrity sha512-LQc2s/ZDMaCN3QLpa+uzHUOQ7SdV0qgv3VBXOolQGXTaaZpIur6PwUclF5nN2hNkiTRcUugXd1zFOW3FLJ135Q== + +uglify-js@^3.1.4: + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +unique-filename@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" + integrity sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A== + dependencies: + unique-slug "^3.0.0" + +unique-slug@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-3.0.0.tgz#6d347cf57c8a7a7a6044aabd0e2d74e4d76dc7c9" + integrity sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w== + 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" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.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" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + update-browserslist-db@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" @@ -2376,7 +5601,12 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -util-deprecate@^1.0.2: +url-join@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== + +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" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -2391,7 +5621,16 @@ v8-compile-cache@^2.3.0: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -validate-npm-package-license@^3.0.1: +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" + 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.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -2399,6 +5638,37 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validate-npm-package-name@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" + integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== + dependencies: + builtins "^5.0.0" + +vite-node@0.29.2: + version "0.29.2" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.29.2.tgz#463626197e248971774075faf3d6896c29cf8062" + integrity sha512-5oe1z6wzI3gkvc4yOBbDBbgpiWiApvuN4P55E8OI131JGrSuo4X3SOZrNmZYo4R8Zkze/dhi572blX0zc+6SdA== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + mlly "^1.1.0" + pathe "^1.1.0" + picocolors "^1.0.0" + vite "^3.0.0 || ^4.0.0" + +"vite@^3.0.0 || ^4.0.0": + version "4.1.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.1.3.tgz#001a038c3a7757d532787c0de429b8368136ded5" + integrity sha512-0Zqo4/Fr/swSOBmbl+HAAhOjrqNwju+yTtoe4hQX9UsARdcuc9njyOdr6xU0DDnV7YP0RT6mgTTOiRtZgxfCxA== + dependencies: + esbuild "^0.16.14" + postcss "^8.4.21" + resolve "^1.22.1" + rollup "^3.10.0" + optionalDependencies: + fsevents "~2.3.2" + vite@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/vite/-/vite-4.1.2.tgz#6908882984e490c44c28e784a2c52de556f04b41" @@ -2411,11 +5681,53 @@ vite@^4.0.0: optionalDependencies: fsevents "~2.3.2" +vitest@^0.29.0: + version "0.29.2" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.29.2.tgz#0376b547169ddefbde3fbc040b48569ec61d6179" + integrity sha512-ydK9IGbAvoY8wkg29DQ4ivcVviCaUi3ivuPKfZEVddMTenFHUfB8EEDXQV8+RasEk1ACFLgMUqAaDuQ/Nk+mQA== + dependencies: + "@types/chai" "^4.3.4" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + "@vitest/expect" "0.29.2" + "@vitest/runner" "0.29.2" + "@vitest/spy" "0.29.2" + "@vitest/utils" "0.29.2" + acorn "^8.8.1" + acorn-walk "^8.2.0" + cac "^6.7.14" + chai "^4.3.7" + debug "^4.3.4" + local-pkg "^0.4.2" + pathe "^1.1.0" + picocolors "^1.0.0" + source-map "^0.6.1" + std-env "^3.3.1" + strip-literal "^1.0.0" + tinybench "^2.3.1" + tinypool "^0.3.1" + tinyspy "^1.0.2" + vite "^3.0.0 || ^4.0.0" + vite-node "0.29.2" + why-is-node-running "^2.2.2" + vlq@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/vlq/-/vlq-2.0.4.tgz#6057b85729245b9829e3cc7755f95b228d4fe041" integrity sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA== +walk-up-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-1.0.0.tgz#d4745e893dd5fd0dbb58dd0a4c6a33d9c9fec53e" + integrity sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg== + +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + 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" @@ -2429,25 +5741,45 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which@^1.3.1: +which@^1.2.14, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -which@^2.0.1: +which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -word-wrap@^1.2.3: +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" + 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.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + 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.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 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" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -2462,7 +5794,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^4.0.2: +write-file-atomic@^4.0.0, write-file-atomic@^4.0.1, 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" integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== @@ -2470,6 +5802,11 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + 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" @@ -2490,7 +5827,7 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@^20.2.3: +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" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== @@ -2500,6 +5837,19 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" 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" + 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.6.0: version "17.7.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.0.tgz#b21e9af1e0a619a2a9c67b1133219b2975a07985" @@ -2522,3 +5872,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 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" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==