diff --git a/.changeset/beige-ladybugs-confess.md b/.changeset/beige-ladybugs-confess.md new file mode 100644 index 0000000000..e392a26d1f --- /dev/null +++ b/.changeset/beige-ladybugs-confess.md @@ -0,0 +1,5 @@ +--- +"hardhat": patch +--- + +Added a notification when a new Hardhat version is available diff --git a/.changeset/bright-onions-switch.md b/.changeset/bright-onions-switch.md new file mode 100644 index 0000000000..03c26cffd1 --- /dev/null +++ b/.changeset/bright-onions-switch.md @@ -0,0 +1,5 @@ +--- +"@nomicfoundation/hardhat-chai-matchers": patch +--- + +Added support for Typed objects (thanks @RenanSouza2!) diff --git a/.changeset/curvy-cherries-beg.md b/.changeset/curvy-cherries-beg.md new file mode 100644 index 0000000000..7bfc3b19e3 --- /dev/null +++ b/.changeset/curvy-cherries-beg.md @@ -0,0 +1,7 @@ +--- +"@nomicfoundation/hardhat-chai-matchers": patch +"hardhat": patch +"@nomicfoundation/hardhat-viem": patch +--- + +Improved loading performance diff --git a/.changeset/dry-pianos-scream.md b/.changeset/dry-pianos-scream.md new file mode 100644 index 0000000000..d68408991c --- /dev/null +++ b/.changeset/dry-pianos-scream.md @@ -0,0 +1,5 @@ +--- +"hardhat": patch +--- + +Fixed a bug during project initialization when using yarn or pnpm diff --git a/.changeset/modern-fishes-look.md b/.changeset/modern-fishes-look.md new file mode 100644 index 0000000000..bf302a7ff1 --- /dev/null +++ b/.changeset/modern-fishes-look.md @@ -0,0 +1,5 @@ +--- +"hardhat": patch +--- + +Added a fix to prevent submitting transactions with 0 priority fee (thanks @itsdevbear!) diff --git a/.changeset/twelve-mails-heal.md b/.changeset/twelve-mails-heal.md new file mode 100644 index 0000000000..c06c6ab663 --- /dev/null +++ b/.changeset/twelve-mails-heal.md @@ -0,0 +1,5 @@ +--- +"@nomicfoundation/hardhat-verify": patch +--- + +Added support for programmatic verification in Sourcify diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000000..724e1f254f --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,15 @@ +{ + "name": "Hardhat + EDR", + "image": "mcr.microsoft.com/devcontainers/base:bullseye", + "features": { + "ghcr.io/devcontainers/features/node:1": { + "version": "16" /* Keep in sync with the oldest version of Node.js that Hardhat supports */ + }, + "ghcr.io/devcontainers/features/rust:1": { + "version": "1.70" /* Keep in sync with rust-toolchain */, + "profile": "default" + } + }, + /* libudev-dev is required by hardhat-ledger. pkg-config is required by EDR to use OpenSSL */ + "postCreateCommand": "sudo apt update && sudo apt install -y libudev-dev pkg-config" +} diff --git a/.github/workflows/LATEST_DEPENDENCY_VERSIONS.yml b/.github/workflows/LATEST_DEPENDENCY_VERSIONS.yml index 8247aaffcf..c5c8dfdfc7 100644 --- a/.github/workflows/LATEST_DEPENDENCY_VERSIONS.yml +++ b/.github/workflows/LATEST_DEPENDENCY_VERSIONS.yml @@ -6,28 +6,32 @@ on: workflow_dispatch: jobs: - test-without-yarn-lock: - name: Test without yarn.lock + test-without-pnpm-lock-yaml: + name: Test without pnpm-lock.yaml strategy: matrix: system: ["ubuntu-latest", "windows-latest"] runs-on: ${{ matrix.system }} steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - - uses: actions/checkout@v2 - - name: Delete yarn.lock - run: "rm yarn.lock" + node-version: 16 + cache: "pnpm" + - name: Delete pnpm-lock.yaml + run: "rm pnpm-lock.yaml" - name: Install - run: yarn + run: pnpm install --no-frozen-lockfile - name: List dependencies - run: yarn list + run: pnpm list -r --depth 2 - name: Run tests env: DO_NOT_SET_THIS_ENV_VAR____IS_HARDHAT_CI: true FORCE_COLOR: 3 - run: yarn test || (echo "===== Retry =====" && yarn test) + run: pnpm test || (echo "===== Retry =====" && pnpm test) - name: Notify failures if: failure() uses: slackapi/slack-github-action@v1.18.0 diff --git a/.github/workflows/add-issue-to-project.yml b/.github/workflows/add-issue-to-project.yml index 5ab3e0b2db..68ee430565 100644 --- a/.github/workflows/add-issue-to-project.yml +++ b/.github/workflows/add-issue-to-project.yml @@ -14,3 +14,5 @@ jobs: with: project-url: https://github.com/orgs/NomicFoundation/projects/4 github-token: ${{ secrets.ADD_TO_PROJECT_PAT }} + labeled: area:edr + label-operator: NOT diff --git a/.github/workflows/add-label-to-new-issue.yml b/.github/workflows/add-label-to-new-issue.yml index c2c3426f02..a6c6c5345d 100644 --- a/.github/workflows/add-label-to-new-issue.yml +++ b/.github/workflows/add-label-to-new-issue.yml @@ -27,11 +27,15 @@ jobs: ); if (statusLabel === undefined) { + console.log("Author association:", issue.data.author_association); + const isCollaborator = ["OWNER", "MEMBER", "COLLABORATOR"].includes(issue.data.author_association) + const label = isCollaborator ? "status:ready" : "status:triaging" + await github.rest.issues.addLabels({ owner: context.issue.owner, repo: context.issue.repo, issue_number: context.issue.number, - labels: ["status:triaging"] + labels: [label] }); } else { console.log(`Issue already has a status: ${statusLabel.name}`); diff --git a/.github/workflows/autoassign-issues.yml b/.github/workflows/autoassign-issues.yml new file mode 100644 index 0000000000..d01b641428 --- /dev/null +++ b/.github/workflows/autoassign-issues.yml @@ -0,0 +1,60 @@ +name: Issue autoassignment + +on: + issues: + types: [opened] + +jobs: + assign-new-issue: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - uses: actions/github-script@v6 + with: + script: | + // each user has a chance of (p - (previousP ?? 0)) to be assigned + const potentialAssignees = [ + ["fvictorio", 0.5], + ["schaable", 0.75], + ["ChristopherDedominici", 1.0], + ]; + + let assignee; + const r = Math.random(); + console.log("r:", r); + for (const [username, p] of potentialAssignees) { + if (r < p) { + assignee = username; + break; + } + } + + if (assignee === undefined) { + throw new Error("An assignee should've been set"); + } + + console.log("assignee:", assignee); + + console.log("Fetch issue", context.issue.number); + const issue = await github.rest.issues.get({ + owner: context.issue.owner, + repo: context.issue.repo, + issue_number: context.issue.number, + }); + + console.log("Author association:", issue.data.author_association); + const isCollaborator = ["OWNER", "MEMBER", "COLLABORATOR"].includes( + issue.data.author_association + ); + console.log("Is collaborator?", isCollaborator); + + // we only assign triage issues from external users + if (!isCollaborator) { + await github.rest.issues.addAssignees({ + owner: context.issue.owner, + repo: context.issue.repo, + issue_number: context.issue.number, + assignees: [assignee], + }); + } diff --git a/.github/workflows/check-changeset-added.yml b/.github/workflows/check-changeset-added.yml index fd489d6891..475fd48ec5 100644 --- a/.github/workflows/check-changeset-added.yml +++ b/.github/workflows/check-changeset-added.yml @@ -18,6 +18,8 @@ jobs: check-if-changeset: name: Check that PR has a changeset runs-on: ubuntu-latest + # don't run this check in the changesets PR + if: github.head_ref != 'changeset-release/main' steps: - uses: actions/github-script@v6 with: diff --git a/.github/workflows/check-docs-site.yml b/.github/workflows/check-docs-site.yml index c2145f9e7c..381d895fb0 100644 --- a/.github/workflows/check-docs-site.yml +++ b/.github/workflows/check-docs-site.yml @@ -3,7 +3,8 @@ name: Check Docs Site on: push: branches: - - "fr/**" + - "**" + workflow_dispatch: concurrency: group: ${{github.workflow}}-${{github.ref}} @@ -15,17 +16,18 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: 16 - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Install Docs - run: cd docs && yarn + run: cd docs && pnpm install --frozen-lockfile --prefer-offline - name: lint - run: cd docs && yarn lint + run: cd docs && pnpm lint - name: Build - run: cd docs && yarn build - - name: Storybook - run: cd docs && yarn build-storybook + run: cd docs && pnpm build diff --git a/.github/workflows/comment-on-linter-error.yml b/.github/workflows/comment-on-linter-error.yml index 5b281a58b9..2ff3646c54 100644 --- a/.github/workflows/comment-on-linter-error.yml +++ b/.github/workflows/comment-on-linter-error.yml @@ -20,24 +20,27 @@ jobs: uses: actions/checkout@v2 with: ref: "refs/pull/${{ github.event.number }}/merge" + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: lint - run: yarn lint + run: pnpm lint - name: Check dependency versions run: node scripts/check-dependencies.js - name: Install website working-directory: docs/ - run: yarn + run: pnpm install --frozen-lockfile --prefer-offline - name: Lint website working-directory: docs/ - run: yarn lint + run: pnpm lint - uses: actions/github-script@v6 name: Comment on failure if: ${{ failure() }} @@ -47,5 +50,5 @@ jobs: issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - body: "Thanks for submitting this PR!\n\nUnfortunately, it has some linter errors, so we can't merge it yet. Can you please fix them?\n\nRunning yarn `lint:fix` in the root of the repository may fix them automatically." + body: "Thanks for submitting this PR!\n\nUnfortunately, it has some linter errors, so we can't merge it yet. Can you please fix them?\n\nRunning pnpm lint:fix in the root of the repository may fix them automatically." }) diff --git a/.github/workflows/compile-with-typescript-v4.yml b/.github/workflows/compile-with-typescript-v4.yml new file mode 100644 index 0000000000..3afea6b273 --- /dev/null +++ b/.github/workflows/compile-with-typescript-v4.yml @@ -0,0 +1,32 @@ +name: Compile with typescript v4 + +on: + push: + branches: main + pull_request: + branches: + - "**" + workflow_dispatch: + +jobs: + compile_with_typescript_v4: + name: Compile with typescript v4 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v2 + with: + node-version: 16 + cache: "pnpm" + - name: Remove packages that can't be compiled with TypeScript v4 + run: rm -fr packages/hardhat-viem packages/hardhat-toolbox-viem packages/hardhat-web3-v4 + - name: Remove packages that can't be compiled with TypeScript v4 from the build script + run: sed -i 's/packages\/\(hardhat-viem\|hardhat-toolbox-viem\|hardhat-web3-v4\) *//g' package.json + - name: Install typescript v4 in all packages + run: | + sed -i 's/"typescript": "~5.0.0"/"typescript": "^4.0.0"/' package.json packages/*/package.json && pnpm install --no-frozen-lockfile + - name: Build + run: pnpm build diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml new file mode 100644 index 0000000000..af5213b0a7 --- /dev/null +++ b/.github/workflows/e2e-tests.yml @@ -0,0 +1,34 @@ +name: E2E tests + +on: + push: + branches: + - "**" + +jobs: + run-e2e: + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + name: Run E2E tests on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v2 + with: + node-version: 18 + - name: Run fixture-projects script + run: | + cd e2e + chmod +x run-fixture-projects.sh + ./run-fixture-projects.sh + shell: bash + - name: Run test-project-initialization script + run: | + cd e2e + chmod +x test-project-initialization.sh + ./test-project-initialization.sh + shell: bash diff --git a/.github/workflows/hardhat-chai-matchers-ci.yml b/.github/workflows/hardhat-chai-matchers-ci.yml index 35e720e80a..e665e8c1e3 100644 --- a/.github/workflows/hardhat-chai-matchers-ci.yml +++ b/.github/workflows/hardhat-chai-matchers-ci.yml @@ -14,6 +14,7 @@ on: - "packages/hardhat-chai-matchers/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -25,60 +26,69 @@ concurrency: jobs: test_on_windows: - name: Test hardhat-chai-matchers on Windows with Node 14 + name: Test hardhat-chai-matchers on Windows with Node 16 runs-on: windows-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests env: FORCE_COLOR: 3 - run: yarn test:ci + run: pnpm test:ci test_on_macos: - name: Test hardhat-chai-matchers on MacOS with Node 14 + name: Test hardhat-chai-matchers on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests env: FORCE_COLOR: 3 - run: yarn test:ci + run: pnpm test:ci test_on_linux: name: Test hardhat-chai-matchers on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests env: FORCE_COLOR: 3 - run: yarn test:ci + run: pnpm test:ci diff --git a/.github/workflows/hardhat-core-ci.yml b/.github/workflows/hardhat-core-ci.yml index 75a5c3ef26..5e158a2edf 100644 --- a/.github/workflows/hardhat-core-ci.yml +++ b/.github/workflows/hardhat-core-ci.yml @@ -14,6 +14,7 @@ on: - "packages/hardhat-core/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -25,63 +26,99 @@ concurrency: jobs: test_on_windows: - name: Test hardhat-core on Windows with Node 14 + name: Test hardhat-core on Windows with Node 16 runs-on: windows-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests env: DO_NOT_SET_THIS_ENV_VAR____IS_HARDHAT_CI: true FORCE_COLOR: 3 - run: yarn test:except-tracing + run: pnpm test:except-tracing test_on_macos: - name: Test hardhat-core on MacOS with Node 14 + name: Test hardhat-core on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests env: DO_NOT_SET_THIS_ENV_VAR____IS_HARDHAT_CI: true FORCE_COLOR: 3 - run: yarn test:except-tracing + run: pnpm test:except-tracing test_on_linux: name: Test hardhat-core on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node }} + cache: "pnpm" + - name: Install + run: pnpm install --frozen-lockfile --prefer-offline + - name: Build + run: pnpm build + - name: Run tests + env: + DO_NOT_SET_THIS_ENV_VAR____IS_HARDHAT_CI: true + FORCE_COLOR: 3 + run: pnpm test:except-tracing + + test_types_node: + name: Test different versions of @types/node + runs-on: ubuntu-latest + strategy: + matrix: + node: [16, 18, 20] + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline + - name: Install @types/node + run: pnpm add --save-dev @types/node@${{ matrix.node }} - name: Build - run: yarn build + run: pnpm build - name: Run tests env: DO_NOT_SET_THIS_ENV_VAR____IS_HARDHAT_CI: true FORCE_COLOR: 3 - run: yarn test:except-tracing + run: pnpm test:except-tracing diff --git a/.github/workflows/hardhat-ethers-ci.yml b/.github/workflows/hardhat-ethers-ci.yml index 457743ec24..54b65f5546 100644 --- a/.github/workflows/hardhat-ethers-ci.yml +++ b/.github/workflows/hardhat-ethers-ci.yml @@ -16,6 +16,7 @@ on: - "packages/hardhat-core/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -27,54 +28,63 @@ concurrency: jobs: test_on_windows: - name: Test hardhat-ethers on Windows with Node 14 + name: Test hardhat-ethers on Windows with Node 16 runs-on: windows-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_macos: - name: Test hardhat-ethers on MacOS with Node 14 + name: Test hardhat-ethers on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_linux: name: Test hardhat-ethers on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test diff --git a/.github/workflows/hardhat-foundry-ci.yml b/.github/workflows/hardhat-foundry-ci.yml index f52e14fc2b..6ad5f4cafe 100644 --- a/.github/workflows/hardhat-foundry-ci.yml +++ b/.github/workflows/hardhat-foundry-ci.yml @@ -14,6 +14,7 @@ on: - "packages/hardhat-foundry/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -25,60 +26,69 @@ concurrency: jobs: test_on_windows: - name: Test hardhat-foundry on Windows with Node 14 + name: Test hardhat-foundry on Windows with Node 16 runs-on: windows-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests env: FORCE_COLOR: 3 - run: yarn test + run: pnpm test test_on_macos: - name: Test hardhat-foundry on MacOS with Node 14 + name: Test hardhat-foundry on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests env: FORCE_COLOR: 3 - run: yarn test + run: pnpm test test_on_linux: name: Test hardhat-foundry on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests env: FORCE_COLOR: 3 - run: yarn test + run: pnpm test diff --git a/.github/workflows/hardhat-ledger-ci.yml b/.github/workflows/hardhat-ledger-ci.yml new file mode 100644 index 0000000000..61993a81e7 --- /dev/null +++ b/.github/workflows/hardhat-ledger-ci.yml @@ -0,0 +1,91 @@ +name: hardhat-ledger CI + +on: + push: + branches: + - main + paths: + - "packages/hardhat-ledger/**" + - "packages/hardhat-core/**" + - "packages/hardhat-common/**" + - "config/**" + pull_request: + branches: + - "**" + paths: + - "packages/hardhat-ledger/**" + - "packages/hardhat-core/**" + - "packages/hardhat-common/**" + - "config/**" + workflow_dispatch: + +defaults: + run: + working-directory: packages/hardhat-ledger + +concurrency: + group: ${{github.workflow}}-${{github.ref}} + cancel-in-progress: true + +jobs: + test_on_windows: + name: Test hardhat-ledger on Windows with Node 16 + runs-on: windows-latest + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v2 + with: + node-version: 16 + cache: "pnpm" + - name: Install + run: pnpm install --frozen-lockfile --prefer-offline + - name: Build + run: pnpm build + - name: Run tests + run: pnpm test + + test_on_macos: + name: Test hardhat-ledger on MacOS with Node 16 + runs-on: macos-latest + # disable until actions/virtual-environments#4896 is fixed + if: ${{ false }} + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v2 + with: + node-version: 16 + cache: "pnpm" + - name: Install + run: pnpm install --frozen-lockfile --prefer-offline + - name: Build + run: pnpm build + - name: Run tests + run: pnpm test + + test_on_linux: + name: Test hardhat-ledger on Ubuntu with Node ${{ matrix.node }} + runs-on: ubuntu-latest + strategy: + matrix: + node: [16, 18, 20] + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node }} + cache: "pnpm" + - name: Install + run: pnpm install --frozen-lockfile --prefer-offline + - name: Build + run: pnpm build + - name: Run tests + run: pnpm test diff --git a/.github/workflows/hardhat-network-forking-ci.yml b/.github/workflows/hardhat-network-forking-ci.yml index 6b6b96064b..f3db6c4824 100644 --- a/.github/workflows/hardhat-network-forking-ci.yml +++ b/.github/workflows/hardhat-network-forking-ci.yml @@ -14,6 +14,7 @@ on: - "packages/hardhat-core/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -37,18 +38,21 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Cache network requests uses: actions/cache@v2 with: path: | packages/hardhat-core/test/internal/hardhat-network/provider/.hardhat_node_test_cache - key: hardhat-network-forking-tests-${{ hashFiles('yarn.lock') }}-${{ hashFiles('packages/hardhat-core/test/internal/hardhat-network/provider/node.ts') }} + key: hardhat-network-forking-tests-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('packages/hardhat-core/test/internal/hardhat-network/provider/node.ts') }} - name: Run tests env: INFURA_URL: ${{ secrets.INFURA_URL }} @@ -56,5 +60,5 @@ jobs: DO_NOT_SET_THIS_ENV_VAR____IS_HARDHAT_CI: true FORCE_COLOR: 3 run: | - yarn build - yarn test:forking + pnpm build + pnpm test:forking diff --git a/.github/workflows/hardhat-network-helpers-ci.yml b/.github/workflows/hardhat-network-helpers-ci.yml index c2bc454b93..5858a8aff5 100644 --- a/.github/workflows/hardhat-network-helpers-ci.yml +++ b/.github/workflows/hardhat-network-helpers-ci.yml @@ -14,6 +14,7 @@ on: - "packages/hardhat-network-helpers/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -25,60 +26,69 @@ concurrency: jobs: test_on_windows: - name: Test hardhat-network-helpers on Windows with Node 14 + name: Test hardhat-network-helpers on Windows with Node 16 runs-on: windows-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests env: FORCE_COLOR: 3 - run: yarn test + run: pnpm test test_on_macos: - name: Test hardhat-network-helpers on MacOS with Node 14 + name: Test hardhat-network-helpers on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests env: FORCE_COLOR: 3 - run: yarn test + run: pnpm test test_on_linux: name: Test hardhat-network-helpers on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests env: FORCE_COLOR: 3 - run: yarn test + run: pnpm test diff --git a/.github/workflows/hardhat-network-tracing-all-solc-versions.yml b/.github/workflows/hardhat-network-tracing-all-solc-versions.yml index 0704096987..12e6c691fa 100644 --- a/.github/workflows/hardhat-network-tracing-all-solc-versions.yml +++ b/.github/workflows/hardhat-network-tracing-all-solc-versions.yml @@ -19,27 +19,30 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Cache artifacts uses: actions/cache@v2 with: path: | packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/artifacts - key: hardhat-network-stack-traces-tests-${{ hashFiles('yarn.lock') }}-${{ hashFiles('packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/**/*.sol') }}-${{ hashFiles('packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/**/test.json') }}-${{ hashFiles('packages/hardhat-core/test/internal/hardhat-network/stack-traces/**/*.ts') }} + key: hardhat-network-stack-traces-tests-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/**/*.sol') }}-${{ hashFiles('packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/**/test.json') }}-${{ hashFiles('packages/hardhat-core/test/internal/hardhat-network/stack-traces/**/*.ts') }} - name: Run tests env: DO_NOT_SET_THIS_ENV_VAR____IS_HARDHAT_CI: true FORCE_COLOR: 3 NODE_OPTIONS: "--max-old-space-size=4096" HARDHAT_TESTS_ALL_SOLC_VERSIONS: true - run: yarn test:tracing + run: pnpm test:tracing diff --git a/.github/workflows/hardhat-network-tracing-ci.yml b/.github/workflows/hardhat-network-tracing-ci.yml index c5c8f07963..b19d99f635 100644 --- a/.github/workflows/hardhat-network-tracing-ci.yml +++ b/.github/workflows/hardhat-network-tracing-ci.yml @@ -30,17 +30,20 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Cache artifacts uses: actions/cache@v2 with: @@ -52,4 +55,4 @@ jobs: DO_NOT_SET_THIS_ENV_VAR____IS_HARDHAT_CI: true FORCE_COLOR: 3 NODE_OPTIONS: "--max-old-space-size=4096" - run: yarn test:tracing + run: pnpm test:tracing diff --git a/.github/workflows/hardhat-shorthand-ci.yml b/.github/workflows/hardhat-shorthand-ci.yml index f07472ab0a..e51e4a06e6 100644 --- a/.github/workflows/hardhat-shorthand-ci.yml +++ b/.github/workflows/hardhat-shorthand-ci.yml @@ -16,6 +16,7 @@ on: - "packages/hardhat-core/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -27,54 +28,63 @@ concurrency: jobs: test_on_windows: - name: Test hardhat-shorthand on Windows with Node 14 + name: Test hardhat-shorthand on Windows with Node 16 runs-on: windows-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_macos: - name: Test hardhat-shorthand on MacOS with Node 14 + name: Test hardhat-shorthand on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_linux: name: Test hardhat-shorthand on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test diff --git a/.github/workflows/hardhat-solhint-ci.yml b/.github/workflows/hardhat-solhint-ci.yml index b548aae14e..12f378e516 100644 --- a/.github/workflows/hardhat-solhint-ci.yml +++ b/.github/workflows/hardhat-solhint-ci.yml @@ -16,6 +16,7 @@ on: - "packages/hardhat-core/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -27,54 +28,63 @@ concurrency: jobs: test_on_windows: - name: Test hardhat-solhint on Windows with Node 14 + name: Test hardhat-solhint on Windows with Node 16 runs-on: windows-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_macos: - name: Test hardhat-solhint on MacOS with Node 14 + name: Test hardhat-solhint on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_linux: name: Test hardhat-solhint on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test diff --git a/.github/workflows/hardhat-solpp-ci.yml b/.github/workflows/hardhat-solpp-ci.yml index ac5f545700..1ab78b1474 100644 --- a/.github/workflows/hardhat-solpp-ci.yml +++ b/.github/workflows/hardhat-solpp-ci.yml @@ -16,6 +16,7 @@ on: - "packages/hardhat-core/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -27,38 +28,44 @@ concurrency: jobs: test_on_macos: - name: Test hardhat-solpp on MacOS with Node 14 + name: Test hardhat-solpp on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_linux: name: Test hardhat-solpp on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test diff --git a/.github/workflows/hardhat-toolbox-ci.yml b/.github/workflows/hardhat-toolbox-ci.yml index d10cddefc0..bd872899a6 100644 --- a/.github/workflows/hardhat-toolbox-ci.yml +++ b/.github/workflows/hardhat-toolbox-ci.yml @@ -9,7 +9,7 @@ on: - "packages/hardhat-chai-matchers/**" - "packages/hardhat-network-helpers/**" - "packages/hardhat-ethers/**" - - "packages/hardhat-etherscan/**" + - "packages/hardhat-verify/**" - "packages/hardhat-common/**" - "config/**" pull_request: @@ -21,9 +21,10 @@ on: - "packages/hardhat-chai-matchers/**" - "packages/hardhat-network-helpers/**" - "packages/hardhat-ethers/**" - - "packages/hardhat-etherscan/**" + - "packages/hardhat-verify/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -35,54 +36,63 @@ concurrency: jobs: test_on_windows: - name: Test hardhat-toolbox on Windows with Node 14 + name: Test hardhat-toolbox on Windows with Node 16 runs-on: windows-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_macos: - name: Test hardhat-toolbox on MacOS with Node 14 + name: Test hardhat-toolbox on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_linux: name: Test hardhat-toolbox on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test diff --git a/.github/workflows/hardhat-truffle4-ci.yml b/.github/workflows/hardhat-truffle4-ci.yml index 46b7d5d003..6eec45120d 100644 --- a/.github/workflows/hardhat-truffle4-ci.yml +++ b/.github/workflows/hardhat-truffle4-ci.yml @@ -18,6 +18,7 @@ on: - "packages/hardhat-core/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -29,54 +30,63 @@ concurrency: jobs: test_on_windows: - name: Test hardhat-truffle4 on Windows with Node 14 + name: Test hardhat-truffle4 on Windows with Node 16 runs-on: windows-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_macos: - name: Test hardhat-truffle4 on MacOS with Node 14 + name: Test hardhat-truffle4 on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_linux: name: Test hardhat-truffle4 on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test diff --git a/.github/workflows/hardhat-truffle5-ci.yml b/.github/workflows/hardhat-truffle5-ci.yml index 70e873cc04..aba51e8afe 100644 --- a/.github/workflows/hardhat-truffle5-ci.yml +++ b/.github/workflows/hardhat-truffle5-ci.yml @@ -18,6 +18,7 @@ on: - "packages/hardhat-core/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -29,54 +30,63 @@ concurrency: jobs: test_on_windows: - name: Test hardhat-truffle5 on Windows with Node 14 + name: Test hardhat-truffle5 on Windows with Node 16 runs-on: windows-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_macos: - name: Test hardhat-truffle5 on MacOS with Node 14 + name: Test hardhat-truffle5 on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_linux: name: Test hardhat-truffle5 on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test diff --git a/.github/workflows/hardhat-verify-ci.yml b/.github/workflows/hardhat-verify-ci.yml index a16b39cdf1..5a5399fe32 100644 --- a/.github/workflows/hardhat-verify-ci.yml +++ b/.github/workflows/hardhat-verify-ci.yml @@ -16,6 +16,7 @@ on: - "packages/hardhat-core/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -27,54 +28,63 @@ concurrency: jobs: test_on_windows: - name: Test hardhat-verify on Windows with Node 14 + name: Test hardhat-verify on Windows with Node 16 runs-on: windows-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_macos: - name: Test hardhat-verify on MacOS with Node 14 + name: Test hardhat-verify on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_linux: name: Test hardhat-verify on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test diff --git a/.github/workflows/hardhat-viem-ci.yml b/.github/workflows/hardhat-viem-ci.yml new file mode 100644 index 0000000000..2999fe603e --- /dev/null +++ b/.github/workflows/hardhat-viem-ci.yml @@ -0,0 +1,90 @@ +name: hardhat-viem CI + +on: + push: + branches: main + paths: + - "packages/hardhat-viem/**" + - "packages/hardhat-core/**" + - "packages/hardhat-common/**" + - "config/**" + pull_request: + branches: + - "**" + paths: + - "packages/hardhat-viem/**" + - "packages/hardhat-core/**" + - "packages/hardhat-common/**" + - "config/**" + workflow_dispatch: + +defaults: + run: + working-directory: packages/hardhat-viem + +concurrency: + group: ${{github.workflow}}-${{github.ref}} + cancel-in-progress: true + +jobs: + test_on_windows: + name: Test hardhat-viem on Windows with Node 16 + runs-on: windows-latest + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v2 + with: + node-version: 16 + cache: "pnpm" + - name: Install + run: pnpm install --frozen-lockfile --prefer-offline + - name: Build + run: pnpm build + - name: Run tests + run: pnpm test + + test_on_macos: + name: Test hardhat-viem on MacOS with Node 16 + runs-on: macos-latest + # disable until actions/virtual-environments#4896 is fixed + if: ${{ false }} + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v2 + with: + node-version: 16 + cache: "pnpm" + - name: Install + run: pnpm install --frozen-lockfile --prefer-offline + - name: Build + run: pnpm build + - name: Run tests + run: pnpm test + + test_on_linux: + name: Test hardhat-viem on Ubuntu with Node ${{ matrix.node }} + runs-on: ubuntu-latest + strategy: + matrix: + node: [16, 18, 20] + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node }} + cache: "pnpm" + - name: Install + run: pnpm install --frozen-lockfile --prefer-offline + - name: Build + run: pnpm build + - name: Run tests + run: pnpm test diff --git a/.github/workflows/hardhat-vyper-ci.yml b/.github/workflows/hardhat-vyper-ci.yml index 528e027713..1d21a1c2fd 100644 --- a/.github/workflows/hardhat-vyper-ci.yml +++ b/.github/workflows/hardhat-vyper-ci.yml @@ -16,6 +16,7 @@ on: - "packages/hardhat-core/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -31,16 +32,19 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test diff --git a/.github/workflows/hardhat-web3-ci.yml b/.github/workflows/hardhat-web3-ci.yml index 33a8ead269..238672e47c 100644 --- a/.github/workflows/hardhat-web3-ci.yml +++ b/.github/workflows/hardhat-web3-ci.yml @@ -16,6 +16,7 @@ on: - "packages/hardhat-core/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -27,54 +28,63 @@ concurrency: jobs: test_on_windows: - name: Test hardhat-web3 on Windows with Node 14 + name: Test hardhat-web3 on Windows with Node 16 runs-on: windows-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_macos: - name: Test hardhat-web3 on MacOS with Node 14 + name: Test hardhat-web3 on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_linux: name: Test hardhat-web3 on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test diff --git a/.github/workflows/hardhat-web3-legacy-ci.yml b/.github/workflows/hardhat-web3-legacy-ci.yml index 221110aa34..fd5d4ce336 100644 --- a/.github/workflows/hardhat-web3-legacy-ci.yml +++ b/.github/workflows/hardhat-web3-legacy-ci.yml @@ -16,6 +16,7 @@ on: - "packages/hardhat-core/**" - "packages/hardhat-common/**" - "config/**" + workflow_dispatch: defaults: run: @@ -27,54 +28,63 @@ concurrency: jobs: test_on_windows: - name: Test hardhat-web3-legacy on Windows with Node 14 + name: Test hardhat-web3-legacy on Windows with Node 16 runs-on: windows-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_macos: - name: Test hardhat-web3-legacy on MacOS with Node 14 + name: Test hardhat-web3-legacy on MacOS with Node 16 runs-on: macos-latest # disable until actions/virtual-environments#4896 is fixed if: ${{ false }} steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test test_on_linux: name: Test hardhat-web3-legacy on Ubuntu with Node ${{ matrix.node }} runs-on: ubuntu-latest strategy: matrix: - node: [14, 16, 18] + node: [16, 18, 20] steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }} - cache: yarn + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run tests - run: yarn test + run: pnpm test diff --git a/.github/workflows/hardhat-web3-v4-ci.yml b/.github/workflows/hardhat-web3-v4-ci.yml new file mode 100644 index 0000000000..71985c8d0d --- /dev/null +++ b/.github/workflows/hardhat-web3-v4-ci.yml @@ -0,0 +1,90 @@ +name: hardhat-web3-v4 CI + +on: + push: + branches: [$default-branch] + paths: + - "packages/hardhat-web3-v4/**" + - "packages/hardhat-core/**" + - "packages/hardhat-common/**" + - "config/**" + pull_request: + branches: + - "**" + paths: + - "packages/hardhat-web3-v4/**" + - "packages/hardhat-core/**" + - "packages/hardhat-common/**" + - "config/**" + workflow_dispatch: + +defaults: + run: + working-directory: packages/hardhat-web3-v4 + +concurrency: + group: ${{github.workflow}}-${{github.ref}} + cancel-in-progress: true + +jobs: + test_on_windows: + name: Test hardhat-web3-v4 on Windows with Node 16 + runs-on: windows-latest + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v2 + with: + node-version: 16 + cache: pnpm + - name: Install + run: pnpm install --frozen-lockfile --prefer-offline + - name: Build + run: pnpm build + - name: Run tests + run: pnpm test + + test_on_macos: + name: Test hardhat-web3-v4 on MacOS with Node 16 + runs-on: macos-latest + # disable until actions/virtual-environments#4896 is fixed + if: ${{ false }} + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v2 + with: + node-version: 16 + cache: pnpm + - name: Install + run: pnpm install --frozen-lockfile --prefer-offline + - name: Build + run: pnpm build + - name: Run tests + run: pnpm test + + test_on_linux: + name: Test hardhat-web3-v4 on Ubuntu with Node ${{ matrix.node }} + runs-on: ubuntu-latest + strategy: + matrix: + node: [16, 18, 20] + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v2 + with: + node-version: ${{ matrix.node }} + cache: pnpm + - name: Install + run: pnpm install --frozen-lockfile --prefer-offline + - name: Build + run: pnpm build + - name: Run tests + run: pnpm test diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 2c37c9bb8a..6e1c7fd0b1 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -6,6 +6,7 @@ on: pull_request: branches: - "**" + workflow_dispatch: concurrency: group: ${{github.workflow}}-${{github.ref}} @@ -17,24 +18,27 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" cache-dependency-path: | - yarn.lock - docs/yarn.lock + pnpm-lock.yaml + docs/pnpm-lock.yaml - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: lint - run: yarn lint + run: pnpm lint - name: Check dependency versions run: node scripts/check-dependencies.js - name: Install website working-directory: docs/ - run: yarn + run: pnpm install --frozen-lockfile --prefer-offline - name: Lint website working-directory: docs/ - run: yarn lint + run: pnpm lint diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index eead734896..9fe0be39ba 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -2,7 +2,9 @@ name: Pre-release tests on: push: - branches: [pre-release-testing-branch] + branches: + - pre-release-testing-branch + - changeset-release/main workflow_dispatch: concurrency: @@ -15,16 +17,19 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: lint - run: yarn lint + run: pnpm lint - name: Cache artifacts uses: actions/cache@v2 with: @@ -36,7 +41,7 @@ jobs: DO_NOT_SET_THIS_ENV_VAR____IS_HARDHAT_CI: true FORCE_COLOR: 3 NODE_OPTIONS: "--max-old-space-size=4096" - run: yarn test + run: pnpm test - name: Check dependency versions run: node scripts/check-dependencies.js test_fork: @@ -47,18 +52,21 @@ jobs: working-directory: packages/hardhat-core steps: - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - cache: yarn + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Cache network requests uses: actions/cache@v2 with: path: | packages/hardhat-core/test/internal/hardhat-network/provider/.hardhat_node_test_cache - key: hardhat-network-forking-tests-${{ hashFiles('yarn.lock') }}-${{ hashFiles('packages/hardhat-core/test/internal/hardhat-network/provider/node.ts') }} + key: hardhat-network-forking-tests-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('packages/hardhat-core/test/internal/hardhat-network/provider/node.ts') }} - name: Run tests env: INFURA_URL: ${{ secrets.INFURA_URL }} @@ -67,5 +75,5 @@ jobs: FORCE_COLOR: 3 NODE_OPTIONS: "--max-old-space-size=4096" run: | - yarn build - yarn test:forking + pnpm build + pnpm test:forking diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6d196e0990..ceb94c3144 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,14 +16,19 @@ jobs: # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits fetch-depth: 0 - - name: Setup Node.js 14.x + - name: Setup pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + + - name: Setup Node.js 16.x uses: actions/setup-node@v2 with: - node-version: 14.x - cache: "yarn" + node-version: 16.x + cache: "pnpm" - name: Install Dependencies - run: yarn + run: pnpm install --frozen-lockfile --prefer-offline - name: Create Release Pull Request uses: changesets/action@v1 diff --git a/.github/workflows/test-recent-mainnet-block.yml b/.github/workflows/test-recent-mainnet-block.yml index 2d22215aea..d5aa432a81 100644 --- a/.github/workflows/test-recent-mainnet-block.yml +++ b/.github/workflows/test-recent-mainnet-block.yml @@ -14,18 +14,22 @@ jobs: name: Test recent mainnet block runs-on: ubuntu-latest steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 - uses: actions/setup-node@v2 with: - node-version: 14 - - uses: actions/checkout@v2 + node-version: 16 + cache: "pnpm" - name: Install - run: yarn --frozen-lockfile + run: pnpm install --frozen-lockfile --prefer-offline - name: Build - run: yarn build + run: pnpm build - name: Run test env: - INFURA_URL: ${{ secrets.INFURA_URL }} - run: yarn ts-node scripts/test-recent-mainnet-block.ts + ALCHEMY_URL: ${{ secrets.ALCHEMY_URL }} + run: pnpm ts-node scripts/test-recent-mainnet-block.ts - name: Notify failures if: failure() uses: slackapi/slack-github-action@v1.18.0 diff --git a/.github/workflows/test-slow-imports-rule.yml b/.github/workflows/test-slow-imports-rule.yml new file mode 100644 index 0000000000..3e0564b400 --- /dev/null +++ b/.github/workflows/test-slow-imports-rule.yml @@ -0,0 +1,43 @@ +# This workflow checks that our slow-imports rule works correctly. +# This is done by intentionally breaking the rule, running the linter, and checking +# that we got a non-zero exit code. It's not a completely fault-proof strategy, +# but it's an useful smoke test. +name: Slow imports rule check + +on: + schedule: + - cron: "0 0 * * *" + workflow_dispatch: + push: + paths: + - ".github/workflows/test-slow-imports-rule.yml" + +defaults: + run: + working-directory: packages/hardhat-core + +jobs: + test-slow-imports-rule: + name: Check that the slow-imports rule works correctly + runs-on: "ubuntu-latest" + steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2 + with: + version: 8 + - uses: actions/setup-node@v2 + with: + node-version: 16 + cache: "pnpm" + - name: Install + run: pnpm install --frozen-lockfile --prefer-offline + - name: Add slow import + run: echo 'import "lodash";' >> src/internal/constants.ts + - name: Build + run: pnpm build + - name: Run eslint + id: run-linter + run: pnpm eslint + continue-on-error: true + - name: Check linter status code + run: test ${{ steps.run-linter.outcome }} != success diff --git a/.gitignore b/.gitignore index 8cd8dd3872..40d4c5f2bb 100644 --- a/.gitignore +++ b/.gitignore @@ -16,10 +16,6 @@ workspace.code-workspace # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -58,21 +54,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache @@ -99,8 +89,7 @@ docs/.env.example # Generated by Cargo # will have compiled files and executables -debug/ -target/ +/target/ # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html @@ -114,3 +103,4 @@ Cargo.lock # VSCode settings .vscode/ +*.code-workspace diff --git a/.hintrc b/.hintrc new file mode 100644 index 0000000000..aa8de6b4ec --- /dev/null +++ b/.hintrc @@ -0,0 +1,5 @@ +{ + "extends": [ + "development" + ] +} \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000000..6c59086d86 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +enable-pre-post-scripts=true diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000000..b6a7d89c68 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +16 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 85b90bca8c..e27b7da2fa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,17 +12,17 @@ We use a [GitHub project](https://github.com/orgs/NomicFoundation/projects/4/vie ## Project structure -This repository is a monorepo handled with [Yarn v1](https://classic.yarnpkg.com/lang/en/) and [Yarn workspaces](https://classic.yarnpkg.com/en/docs/workspaces/). +This repository is a monorepo handled with [pnpm](https://pnpm.io/) and [pnpm workspaces](https://pnpm.io/workspaces). There's a folder for each subproject in `packages/`. All of them are plugins, except for `/packages/hardhat-core` which is the main project (i.e. the one that's published as [hardhat](https://npmjs.com/package/hardhat) in npm). ## Installing -To install the project's dependencies, run `yarn` in the root directory of the repository. +To install the project's dependencies, run `pnpm i` in the root directory of the repository. ## Building the projects -Plugins require hardhat to be built or tested. Our recommendation is to run `yarn watch` from the root folder. This will keep everything compiled, and these problems will be avoided. +Plugins require hardhat to be built or tested. Our recommendation is to run `pnpm watch` from the root folder. This will keep everything compiled, and these problems will be avoided. ## Testing @@ -30,11 +30,11 @@ All tests are written using [mocha](https://mochajs.org) and [chai](https://www. ### Per-package -You can run a package's tests by executing `yarn test` inside its folder. +You can run a package's tests by executing `pnpm test` inside its folder. ### Entire project -You can run all the tests at once by running `yarn test` from the root folder. +You can run all the tests at once by running `pnpm test` from the root folder. ## Code formatting @@ -42,7 +42,7 @@ We use [Prettier](https://prettier.io/) to format all the code without any speci We also have [eslint](https://eslint.org/) installed in all the projects. It checks that you have run Prettier and forbids some dangerous patterns. -The linter is always run in the CI, so make sure it passes before pushing code. You can use `yarn lint` and `yarn lint:fix` inside the packages' folders. +The linter is always run in the CI, so make sure it passes before pushing code. You can use `pnpm lint` and `pnpm lint:fix` inside the packages' folders. ## Branching @@ -95,23 +95,17 @@ This is a list of the modules that always get loaded during startup: ## Developing locally -All these tips assume you are running `yarn watch` from the root directory. +All these tips assume you are running `pnpm watch` from the root directory. ### Linking -You can [link](https://classic.yarnpkg.com/en/docs/cli/link/) any package to test it locally. While the rest of the commands we run use `yarn`, we recommend you use `npm` for linking, since `yarn link` won't create the `hardhat` executable. For example, if you are working on `hardhat`, you can follow these steps: +You can [link](https://docs.npmjs.com/cli/v9/commands/npm-link/) any package to test it locally. While the rest of the commands we run use `pnpm`, we recommend you use `npm` for linking. For example, if you are working on `hardhat`, you can follow these steps: 1. Go to `packages/hardhat-core` and run `npm link` 2. Go to some hardhat project and run `npm link hardhat` Now any change you make in the code will be reflected in that project. -If you prefer to use `yarn link`, you need to work around the lack of an executable in `node_modules/.bin/hardhat`. We recommend having an alias like this: - -```bash -alias lhh='node --preserve-symlinks $(node -e "console.log(require.resolve(\"hardhat/internal/cli/cli.js\"))")' -``` - ### Yalc If for any reason linking doesn't work for you, you can use [`yalc`](https://github.com/whitecolor/yalc): @@ -121,12 +115,12 @@ If for any reason linking doesn't work for you, you can use [`yalc`](https://git Unlike linking, if you make a change in the code, you'll need to repeat the process. -### yarn pack +### pnpm pack -An even more realistic way of using your local changes in a project is to use [`yarn pack`](https://classic.yarnpkg.com/en/docs/cli/pack/): +An even more realistic way of using your local changes in a project is to use [`pnpm pack`](https://pnpm.io/cli/pack): -1. Go to `packages/hardhat-core` and run `yarn pack`. This will create a `nomiclabs-hardhat-x.y.z.tgz` file in that directory. -2. Go to some hardhat project and run `yarn add /path/to/hardhat/packages/hardhat/nomiclabs-hardhat-x.y.z.tgz`. +1. Go to `packages/hardhat-core` and run `pnpm pack`. This will create a `nomiclabs-hardhat-x.y.z.tgz` file in that directory. +2. Go to some hardhat project and run `npm install /path/to/hardhat/packages/hardhat/nomiclabs-hardhat-x.y.z.tgz`. Unlike linking, if you make a change in the code, you'll need to repeat the process. diff --git a/config/eslint/constants.js b/config/eslint/constants.js new file mode 100644 index 0000000000..eb690df02e --- /dev/null +++ b/config/eslint/constants.js @@ -0,0 +1,22 @@ +module.exports.slowImportsCommonIgnoredModules = [ + "chalk", + "debug", + "find-up", + "fs-extra", + "semver", + "source-map-support/register", + "@nomicfoundation/hardhat-ethers", + "hardhat/common", + "hardhat/config", + "hardhat/plugins", + "hardhat/types", + "hardhat/types/artifacts", + "hardhat/types/config", + "hardhat/types/runtime", + "hardhat/builtin-tasks/task-names", + "hardhat/internal/core/errors", + "hardhat/internal/core/providers/util", + "hardhat/internal/util/fs-utils", + "hardhat/utils/contract-names", + "hardhat/utils/source-names", +]; diff --git a/config/eslint/eslintrc.js b/config/eslint/eslintrc.js index 0d563e5981..645c678498 100644 --- a/config/eslint/eslintrc.js +++ b/config/eslint/eslintrc.js @@ -4,13 +4,17 @@ module.exports = { es6: true, node: true, }, - extends: ["plugin:prettier/recommended"], + extends: [ + "plugin:prettier/recommended", + "plugin:@nomicfoundation/slow-imports/recommended", + ], parser: "@typescript-eslint/parser", plugins: [ - "@nomiclabs/eslint-plugin-hardhat-internal-rules", - "eslint-plugin-import", + "@nomicfoundation/hardhat-internal-rules", + "import", "no-only-tests", "@typescript-eslint", + "@nomicfoundation/slow-imports", ], rules: { "@typescript-eslint/adjacent-overload-signatures": "error", @@ -79,6 +83,12 @@ module.exports = { format: ["camelCase", "UPPER_CASE"], leadingUnderscore: "allow", }, + { + selector: ["classProperty"], + modifiers: ["private"], + format: ["camelCase", "UPPER_CASE"], + leadingUnderscore: "require", + }, { selector: "enumMember", format: ["UPPER_CASE"], @@ -191,7 +201,7 @@ module.exports = { "no-cond-assign": "error", "no-debugger": "error", "no-duplicate-case": "error", - "no-duplicate-imports": "error", + "@typescript-eslint/no-duplicate-imports": "error", "no-eval": "error", "no-extra-bind": "error", "no-new-func": "error", diff --git a/config/typescript/tsconfig.json b/config/typescript/tsconfig.json index fbbc0efe2c..52c240b20e 100644 --- a/config/typescript/tsconfig.json +++ b/config/typescript/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "ES2020", + "target": "ES2021", "module": "commonjs", "declaration": true, "declarationMap": true, diff --git a/crates/rethnet_evm_napi/.gitignore b/crates/rethnet_evm_napi/.gitignore index 2e30f56130..d72d565ead 100644 --- a/crates/rethnet_evm_napi/.gitignore +++ b/crates/rethnet_evm_napi/.gitignore @@ -11,7 +11,7 @@ /coverage /.nyc_output -# TSC prod output. This has to be in sync with the to directories in ./src, and with npm script clean +# TSC prod output. This has to be in sync with the to directories in ./src, and with pnpm script clean /*.js /*.js.map @@ -33,10 +33,6 @@ test/internal/hardhat-network/provider/.hardhat_node_test_cache/ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -75,21 +71,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/docs/.eslintrc.js b/docs/.eslintrc.js index f3cbe10dca..e628645ec8 100644 --- a/docs/.eslintrc.js +++ b/docs/.eslintrc.js @@ -4,7 +4,6 @@ module.exports = { project: "./tsconfig.json", }, extends: [ - `${__dirname}/../config/eslint/eslintrc.js`, "airbnb", "airbnb-typescript", "next/core-web-vitals", diff --git a/docs/.gitignore b/docs/.gitignore index 6dac9b8c3c..3750a66d8f 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -29,9 +29,6 @@ src/content/hardhat-runner/docs/errors/index.md *.pem # debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* .pnpm-debug.log* # local env files diff --git a/docs/.npmrc b/docs/.npmrc new file mode 100644 index 0000000000..ae90f70514 --- /dev/null +++ b/docs/.npmrc @@ -0,0 +1 @@ +ignore-workspace-root-check=true diff --git a/docs/README.md b/docs/README.md index b5c9b1f93b..36e2835f74 100644 --- a/docs/README.md +++ b/docs/README.md @@ -30,7 +30,7 @@ Website content is located in `*.md` files within `src/content` folder. It's wri To tune pages, behavior and appearance also use optional `*.yaml` files with additional configurations. -To preview content locally, launch the app with `yarn dev` and open http://127.0.0.1:3000 in your browser. See details in [Development](#development) section. +To preview content locally, launch the app with `pnpm dev` and open http://127.0.0.1:3000 in your browser. See details in [Development](#development) section. ### Layouts @@ -134,13 +134,13 @@ First, install dependencies: ```sh cd docs -yarn +pnpm install ``` Then, run the development server: ```bash -yarn dev +pnpm dev ``` Open [http://127.0.0.1:3000](http://127.0.0.1:3000) with your browser to see the result. @@ -167,7 +167,7 @@ When developing the application you might need these main folders ## Storybook -You can use Storybook to develop components in isolation. Launch it via `yarn storybook` and open http://127.0.0.1:6006/ You will see a list of components in the left-side sidebar. When you edit component's code and save it, the Storybook is auto-updating it. +You can use Storybook to develop components in isolation. Launch it via `pnpm storybook` and open http://127.0.0.1:6006/ You will see a list of components in the left-side sidebar. When you edit component's code and save it, the Storybook is auto-updating it. Each component can be exposed with different states (stories) independently by passing props you need. You can find component stories settings in `Component.stories.ts` files. diff --git a/docs/next.config.js b/docs/next.config.js index a99e253e55..1db8f38aa3 100644 --- a/docs/next.config.js +++ b/docs/next.config.js @@ -11,6 +11,13 @@ const withBundleAnalyzer = require("@next/bundle-analyzer")({ const linariaConfig = withLinaria({ async redirects() { return [ + // We moved the privacy policy to /static to make the next rule + // simpler, so we need to redirect it before it, instead of in a customRedirect + { + source: "/privacy-policy", + destination: "/static/privacy-policy.html", + permanent: false, + }, { /** * NOTE: this removes '.html' extensions from URLs @@ -19,10 +26,9 @@ const linariaConfig = withLinaria({ * * We need this to keep the links of the previous version workable. * - * The only exception is the privacy-policy.html file, which we host in - * public/ + * We host some static html files in /static/ though. */ - source: "/:slug((?!privacy-policy).*).html", + source: "/:slug((?!static\\/).*).html", destination: "/:slug*", permanent: true, }, diff --git a/docs/package.json b/docs/package.json index b051b4e0a6..b6437b1ce5 100644 --- a/docs/package.json +++ b/docs/package.json @@ -10,9 +10,7 @@ "postbuild": "next-sitemap", "build:test": "ANALYZE=true next build", "start": "next start", - "lint": "eslint src -f unix", - "storybook": "start-storybook -p 6006 --ci", - "build-storybook": "build-storybook" + "lint": "eslint src -f unix" }, "dependencies": { "@callstack/react-theme-provider": "^3.0.7", @@ -21,7 +19,7 @@ "gray-matter": "^4.0.3", "hastscript": "^7.0.2", "linaria": "^2.3.1", - "next": "12.1.0", + "next": "12.3.4", "next-linaria": "^0.11.0", "next-mdx-remote": "^4.0.2", "react": "17.0.2", @@ -33,7 +31,7 @@ "remark-prism": "^1.3.6", "remark-unwrap-images": "^3.0.1", "ts-node": "^10.8.0", - "undici": "^5.19.1", + "undici": "^5.26.2", "unist-util-visit": "^4.1.0" }, "devDependencies": { @@ -47,12 +45,14 @@ "@storybook/addon-links": "^6.4.19", "@storybook/react": "^6.4.19", "@storybook/testing-library": "^0.0.9", + "@types/glob": "^8.1.0", + "@types/js-yaml": "^4.0.9", "@types/mdx-js__react": "^1.5.5", "@types/node": "17.0.21", "@types/react": "17.0.39", "@types/remark-prism": "^1.3.3", - "@typescript-eslint/eslint-plugin": "^5.16.0", - "@typescript-eslint/parser": "^5.16.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "babel-eslint": "^10.1.0", "babel-loader": "^8.2.3", "eslint": "8.10.0", diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml new file mode 100644 index 0000000000..fb655bfe7d --- /dev/null +++ b/docs/pnpm-lock.yaml @@ -0,0 +1,14021 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@callstack/react-theme-provider': + specifier: ^3.0.7 + version: 3.0.7(react@17.0.2) + '@docsearch/react': + specifier: '3' + version: 3.0.0(@algolia/client-search@4.13.0)(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + glob: + specifier: ^8.0.1 + version: 8.0.1 + gray-matter: + specifier: ^4.0.3 + version: 4.0.3 + hastscript: + specifier: ^7.0.2 + version: 7.0.2 + linaria: + specifier: ^2.3.1 + version: 2.3.1(@babel/core@7.17.5) + next: + specifier: 12.3.4 + version: 12.3.4(@babel/core@7.17.5)(react-dom@17.0.2)(react@17.0.2) + next-linaria: + specifier: ^0.11.0 + version: 0.11.0(linaria@2.3.1) + next-mdx-remote: + specifier: ^4.0.2 + version: 4.0.2(react-dom@17.0.2)(react@17.0.2) + react: + specifier: 17.0.2 + version: 17.0.2 + react-dom: + specifier: 17.0.2 + version: 17.0.2(react@17.0.2) + react-responsive-carousel: + specifier: ^3.2.23 + version: 3.2.23 + rehype-prism: + specifier: ^2.1.2 + version: 2.1.2(unified@10.1.2) + remark-directive: + specifier: ^2.0.1 + version: 2.0.1 + remark-gfm: + specifier: ^3.0.1 + version: 3.0.1 + remark-prism: + specifier: ^1.3.6 + version: 1.3.6 + remark-unwrap-images: + specifier: ^3.0.1 + version: 3.0.1 + ts-node: + specifier: ^10.8.0 + version: 10.8.0(@types/node@17.0.21)(typescript@4.5.5) + undici: + specifier: ^5.26.2 + version: 5.26.2 + unist-util-visit: + specifier: ^4.1.0 + version: 4.1.0 + devDependencies: + '@babel/core': + specifier: ^7.17.5 + version: 7.17.5 + '@babel/preset-env': + specifier: ^7.16.11 + version: 7.16.11(@babel/core@7.17.5) + '@next/bundle-analyzer': + specifier: ^12.1.5 + version: 12.1.5 + '@react-theming/storybook-addon': + specifier: ^1.1.5 + version: 1.1.5(@storybook/addons@6.4.19)(@storybook/react@6.4.19)(@storybook/theming@6.4.19)(react-dom@17.0.2)(react@17.0.2) + '@storybook/addon-actions': + specifier: ^6.4.19 + version: 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/addon-essentials': + specifier: ^6.4.19 + version: 6.4.19(@babel/core@7.17.5)(@storybook/react@6.4.19)(@types/react@17.0.39)(babel-loader@8.2.3)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + '@storybook/addon-interactions': + specifier: ^6.4.19 + version: 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/addon-links': + specifier: ^6.4.19 + version: 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/react': + specifier: ^6.4.19 + version: 6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/testing-library': + specifier: ^0.0.9 + version: 0.0.9(react-dom@17.0.2)(react@17.0.2) + '@types/glob': + specifier: ^8.1.0 + version: 8.1.0 + '@types/js-yaml': + specifier: ^4.0.9 + version: 4.0.9 + '@types/mdx-js__react': + specifier: ^1.5.5 + version: 1.5.5 + '@types/node': + specifier: 17.0.21 + version: 17.0.21 + '@types/react': + specifier: 17.0.39 + version: 17.0.39 + '@types/remark-prism': + specifier: ^1.3.3 + version: 1.3.3 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.10.0)(typescript@4.5.5) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.10.0)(typescript@4.5.5) + babel-eslint: + specifier: ^10.1.0 + version: 10.1.0(eslint@8.10.0) + babel-loader: + specifier: ^8.2.3 + version: 8.2.3(@babel/core@7.17.5)(webpack@4.46.0) + eslint: + specifier: 8.10.0 + version: 8.10.0 + eslint-config-airbnb: + specifier: ^19.0.4 + version: 19.0.4(eslint-plugin-import@2.25.4)(eslint-plugin-jsx-a11y@6.5.1)(eslint-plugin-react-hooks@4.3.0)(eslint-plugin-react@7.29.2)(eslint@8.10.0) + eslint-config-airbnb-typescript: + specifier: ^16.1.4 + version: 16.1.4(@typescript-eslint/eslint-plugin@5.61.0)(@typescript-eslint/parser@5.61.0)(eslint-plugin-import@2.25.4)(eslint@8.10.0) + eslint-config-next: + specifier: 12.1.0 + version: 12.1.0(eslint@8.10.0)(next@12.3.4)(typescript@4.5.5) + eslint-config-prettier: + specifier: ^8.5.0 + version: 8.5.0(eslint@8.10.0) + eslint-plugin-prettier: + specifier: ^4.0.0 + version: 4.0.0(eslint-config-prettier@8.5.0)(eslint@8.10.0)(prettier@2.4.1) + eslint-plugin-react-hooks: + specifier: ^4.3.0 + version: 4.3.0(eslint@8.10.0) + eslint-plugin-storybook: + specifier: ^0.5.7 + version: 0.5.7(eslint@8.10.0)(typescript@4.5.5) + js-yaml: + specifier: ^4.1.0 + version: 4.1.0 + next-compose-plugins: + specifier: ^2.2.1 + version: 2.2.1 + next-remote-watch: + specifier: ^1.0.0 + version: 1.0.0 + next-sitemap: + specifier: ^2.5.20 + version: 2.5.20(next@12.3.4) + prettier: + specifier: 2.4.1 + version: 2.4.1 + typescript: + specifier: 4.5.5 + version: 4.5.5 + +packages: + + /@algolia/autocomplete-core@1.5.2: + resolution: {integrity: sha512-DY0bhyczFSS1b/CqJlTE/nQRtnTAHl6IemIkBy0nEWnhDzRDdtdx4p5Uuk3vwAFxwEEgi1WqKwgSSMx6DpNL4A==} + dependencies: + '@algolia/autocomplete-shared': 1.5.2 + dev: false + + /@algolia/autocomplete-preset-algolia@1.5.2(@algolia/client-search@4.13.0)(algoliasearch@4.13.0): + resolution: {integrity: sha512-3MRYnYQFJyovANzSX2CToS6/5cfVjbLLqFsZTKcvF3abhQzxbqwwaMBlJtt620uBUOeMzhdfasKhCc40+RHiZw==} + peerDependencies: + '@algolia/client-search': ^4.9.1 + algoliasearch: ^4.9.1 + dependencies: + '@algolia/autocomplete-shared': 1.5.2 + '@algolia/client-search': 4.13.0 + algoliasearch: 4.13.0 + dev: false + + /@algolia/autocomplete-shared@1.5.2: + resolution: {integrity: sha512-ylQAYv5H0YKMfHgVWX0j0NmL8XBcAeeeVQUmppnnMtzDbDnca6CzhKj3Q8eF9cHCgcdTDdb5K+3aKyGWA0obug==} + dev: false + + /@algolia/cache-browser-local-storage@4.13.0: + resolution: {integrity: sha512-nj1vHRZauTqP/bluwkRIgEADEimqojJgoTRCel5f6q8WCa9Y8QeI4bpDQP28FoeKnDRYa3J5CauDlN466jqRhg==} + dependencies: + '@algolia/cache-common': 4.13.0 + dev: false + + /@algolia/cache-common@4.13.0: + resolution: {integrity: sha512-f9mdZjskCui/dA/fA/5a+6hZ7xnHaaZI5tM/Rw9X8rRB39SUlF/+o3P47onZ33n/AwkpSbi5QOyhs16wHd55kA==} + dev: false + + /@algolia/cache-in-memory@4.13.0: + resolution: {integrity: sha512-hHdc+ahPiMM92CQMljmObE75laYzNFYLrNOu0Q3/eyvubZZRtY2SUsEEgyUEyzXruNdzrkcDxFYa7YpWBJYHAg==} + dependencies: + '@algolia/cache-common': 4.13.0 + dev: false + + /@algolia/client-account@4.13.0: + resolution: {integrity: sha512-FzFqFt9b0g/LKszBDoEsW+dVBuUe1K3scp2Yf7q6pgHWM1WqyqUlARwVpLxqyc+LoyJkTxQftOKjyFUqddnPKA==} + dependencies: + '@algolia/client-common': 4.13.0 + '@algolia/client-search': 4.13.0 + '@algolia/transporter': 4.13.0 + dev: false + + /@algolia/client-analytics@4.13.0: + resolution: {integrity: sha512-klmnoq2FIiiMHImkzOm+cGxqRLLu9CMHqFhbgSy9wtXZrqb8BBUIUE2VyBe7azzv1wKcxZV2RUyNOMpFqmnRZA==} + dependencies: + '@algolia/client-common': 4.13.0 + '@algolia/client-search': 4.13.0 + '@algolia/requester-common': 4.13.0 + '@algolia/transporter': 4.13.0 + dev: false + + /@algolia/client-common@4.13.0: + resolution: {integrity: sha512-GoXfTp0kVcbgfSXOjfrxx+slSipMqGO9WnNWgeMmru5Ra09MDjrcdunsiiuzF0wua6INbIpBQFTC2Mi5lUNqGA==} + dependencies: + '@algolia/requester-common': 4.13.0 + '@algolia/transporter': 4.13.0 + dev: false + + /@algolia/client-personalization@4.13.0: + resolution: {integrity: sha512-KneLz2WaehJmNfdr5yt2HQETpLaCYagRdWwIwkTqRVFCv4DxRQ2ChPVW9jeTj4YfAAhfzE6F8hn7wkQ/Jfj6ZA==} + dependencies: + '@algolia/client-common': 4.13.0 + '@algolia/requester-common': 4.13.0 + '@algolia/transporter': 4.13.0 + dev: false + + /@algolia/client-search@4.13.0: + resolution: {integrity: sha512-blgCKYbZh1NgJWzeGf+caKE32mo3j54NprOf0LZVCubQb3Kx37tk1Hc8SDs9bCAE8hUvf3cazMPIg7wscSxspA==} + dependencies: + '@algolia/client-common': 4.13.0 + '@algolia/requester-common': 4.13.0 + '@algolia/transporter': 4.13.0 + dev: false + + /@algolia/logger-common@4.13.0: + resolution: {integrity: sha512-8yqXk7rMtmQJ9wZiHOt/6d4/JDEg5VCk83gJ39I+X/pwUPzIsbKy9QiK4uJ3aJELKyoIiDT1hpYVt+5ia+94IA==} + dev: false + + /@algolia/logger-console@4.13.0: + resolution: {integrity: sha512-YepRg7w2/87L0vSXRfMND6VJ5d6699sFJBRWzZPOlek2p5fLxxK7O0VncYuc/IbVHEgeApvgXx0WgCEa38GVuQ==} + dependencies: + '@algolia/logger-common': 4.13.0 + dev: false + + /@algolia/requester-browser-xhr@4.13.0: + resolution: {integrity: sha512-Dj+bnoWR5MotrnjblzGKZ2kCdQi2cK/VzPURPnE616NU/il7Ypy6U6DLGZ/ZYz+tnwPa0yypNf21uqt84fOgrg==} + dependencies: + '@algolia/requester-common': 4.13.0 + dev: false + + /@algolia/requester-common@4.13.0: + resolution: {integrity: sha512-BRTDj53ecK+gn7ugukDWOOcBRul59C4NblCHqj4Zm5msd5UnHFjd/sGX+RLOEoFMhetILAnmg6wMrRrQVac9vw==} + dev: false + + /@algolia/requester-node-http@4.13.0: + resolution: {integrity: sha512-9b+3O4QFU4azLhGMrZAr/uZPydvzOR4aEZfSL8ZrpLZ7fbbqTO0S/5EVko+QIgglRAtVwxvf8UJ1wzTD2jvKxQ==} + dependencies: + '@algolia/requester-common': 4.13.0 + dev: false + + /@algolia/transporter@4.13.0: + resolution: {integrity: sha512-8tSQYE+ykQENAdeZdofvtkOr5uJ9VcQSWgRhQ9h01AehtBIPAczk/b2CLrMsw5yQZziLs5cZ3pJ3478yI+urhA==} + dependencies: + '@algolia/cache-common': 4.13.0 + '@algolia/logger-common': 4.13.0 + '@algolia/requester-common': 4.13.0 + dev: false + + /@ampproject/remapping@2.1.2: + resolution: {integrity: sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.19 + + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.20 + chalk: 2.4.2 + + /@babel/compat-data@7.17.0: + resolution: {integrity: sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==} + engines: {node: '>=6.9.0'} + + /@babel/core@7.12.9: + resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-module-transforms': 7.17.6 + '@babel/helpers': 7.17.2 + '@babel/parser': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + convert-source-map: 1.8.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.0 + lodash: 4.17.21 + resolve: 1.22.0 + semver: 5.7.2 + source-map: 0.5.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/core@7.17.5: + resolution: {integrity: sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.1.2 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-compilation-targets': 7.16.7(@babel/core@7.17.5) + '@babel/helper-module-transforms': 7.17.6 + '@babel/helpers': 7.17.2 + '@babel/parser': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + convert-source-map: 1.8.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/generator@7.23.0: + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + jsesc: 2.5.2 + + /@babel/helper-annotate-as-pure@7.16.7: + resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-builder-binary-assignment-operator-visitor@7.16.7: + resolution: {integrity: sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-explode-assignable-expression': 7.16.7 + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-compilation-targets@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.17.0 + '@babel/core': 7.17.5 + '@babel/helper-validator-option': 7.16.7 + browserslist: 4.19.3 + semver: 6.3.1 + + /@babel/helper-create-class-features-plugin@7.17.6(@babel/core@7.17.5): + resolution: {integrity: sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.16.7 + '@babel/helper-optimise-call-expression': 7.16.7 + '@babel/helper-replace-supers': 7.16.7 + '@babel/helper-split-export-declaration': 7.22.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-create-regexp-features-plugin@7.17.0(@babel/core@7.17.5): + resolution: {integrity: sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-annotate-as-pure': 7.16.7 + regexpu-core: 5.0.1 + dev: true + + /@babel/helper-define-polyfill-provider@0.1.5(@babel/core@7.17.5): + resolution: {integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-compilation-targets': 7.16.7(@babel/core@7.17.5) + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/traverse': 7.23.2 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-define-polyfill-provider@0.3.1(@babel/core@7.17.5): + resolution: {integrity: sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-compilation-targets': 7.16.7(@babel/core@7.17.5) + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/traverse': 7.23.2 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + + /@babel/helper-explode-assignable-expression@7.16.7: + resolution: {integrity: sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + + /@babel/helper-member-expression-to-functions@7.16.7: + resolution: {integrity: sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-module-imports@7.16.7: + resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + + /@babel/helper-module-transforms@7.17.6: + resolution: {integrity: sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-simple-access': 7.16.7 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + transitivePeerDependencies: + - supports-color + + /@babel/helper-optimise-call-expression@7.16.7: + resolution: {integrity: sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-plugin-utils@7.10.4: + resolution: {integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==} + dev: true + + /@babel/helper-plugin-utils@7.16.7: + resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} + engines: {node: '>=6.9.0'} + + /@babel/helper-remap-async-to-generator@7.16.8: + resolution: {integrity: sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-wrap-function': 7.16.8 + '@babel/types': 7.23.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-replace-supers@7.16.7: + resolution: {integrity: sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.16.7 + '@babel/helper-optimise-call-expression': 7.16.7 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-simple-access@7.16.7: + resolution: {integrity: sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + + /@babel/helper-skip-transparent-expression-wrappers@7.16.0: + resolution: {integrity: sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option@7.16.7: + resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} + engines: {node: '>=6.9.0'} + + /@babel/helper-wrap-function@7.16.8: + resolution: {integrity: sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helpers@7.17.2: + resolution: {integrity: sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + transitivePeerDependencies: + - supports-color + + /@babel/highlight@7.22.20: + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + + /@babel/parser@7.23.0: + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.0 + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 + '@babel/plugin-proposal-optional-chaining': 7.16.7(@babel/core@7.17.5) + dev: true + + /@babel/plugin-proposal-async-generator-functions@7.16.8(@babel/core@7.17.5): + resolution: {integrity: sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-remap-async-to-generator': 7.16.8 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.17.5) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-class-properties@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-create-class-features-plugin': 7.17.6(@babel/core@7.17.5) + '@babel/helper-plugin-utils': 7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-class-static-block@7.17.6(@babel/core@7.17.5): + resolution: {integrity: sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead. + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-create-class-features-plugin': 7.17.6(@babel/core@7.17.5) + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.17.5) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-decorators@7.17.2(@babel/core@7.17.5): + resolution: {integrity: sha512-WH8Z95CwTq/W8rFbMqb9p3hicpt4RX4f0K659ax2VHxgOyT6qQmUaEVEjIh4WR9Eh9NymkVn5vwsrE68fAQNUw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-create-class-features-plugin': 7.17.6(@babel/core@7.17.5) + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-replace-supers': 7.16.7 + '@babel/plugin-syntax-decorators': 7.17.0(@babel/core@7.17.5) + charcodes: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-dynamic-import@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.17.5) + dev: true + + /@babel/plugin-proposal-export-default-from@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-export-default-from': 7.16.7(@babel/core@7.17.5) + dev: true + + /@babel/plugin-proposal-export-namespace-from@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.17.5) + + /@babel/plugin-proposal-json-strings@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.17.5) + dev: true + + /@babel/plugin-proposal-logical-assignment-operators@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.17.5) + dev: true + + /@babel/plugin-proposal-nullish-coalescing-operator@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.17.5) + dev: true + + /@babel/plugin-proposal-numeric-separator@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.17.5) + dev: true + + /@babel/plugin-proposal-object-rest-spread@7.12.1(@babel/core@7.12.9): + resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) + '@babel/plugin-transform-parameters': 7.16.7(@babel/core@7.12.9) + dev: true + + /@babel/plugin-proposal-object-rest-spread@7.17.3(@babel/core@7.17.5): + resolution: {integrity: sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.17.0 + '@babel/core': 7.17.5 + '@babel/helper-compilation-targets': 7.16.7(@babel/core@7.17.5) + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.17.5) + '@babel/plugin-transform-parameters': 7.16.7(@babel/core@7.17.5) + dev: true + + /@babel/plugin-proposal-optional-catch-binding@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.17.5) + dev: true + + /@babel/plugin-proposal-optional-chaining@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.17.5) + dev: true + + /@babel/plugin-proposal-private-methods@7.16.11(@babel/core@7.17.5): + resolution: {integrity: sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-create-class-features-plugin': 7.17.6(@babel/core@7.17.5) + '@babel/helper-plugin-utils': 7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-private-property-in-object@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-create-class-features-plugin': 7.17.6(@babel/core@7.17.5) + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.17.5) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-unicode-property-regex@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==} + engines: {node: '>=4'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-create-regexp-features-plugin': 7.17.0(@babel/core@7.17.5) + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.17.5): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.17.5): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.17.5): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-decorators@7.17.0(@babel/core@7.17.5): + resolution: {integrity: sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.17.5): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + + /@babel/plugin-syntax-export-default-from@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.17.5): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + + /@babel/plugin-syntax-flow@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.17.5): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-jsx@7.12.1(@babel/core@7.12.9): + resolution: {integrity: sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-jsx@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.17.5): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.17.5): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.17.5): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.12.9): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.17.5): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.17.5): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.17.5): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.17.5): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.17.5): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-syntax-typescript@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-arrow-functions@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-async-to-generator@7.16.8(@babel/core@7.17.5): + resolution: {integrity: sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-remap-async-to-generator': 7.16.8 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-block-scoped-functions@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-block-scoping@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-classes@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.16.7 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-replace-supers': 7.16.7 + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-computed-properties@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-destructuring@7.17.3(@babel/core@7.17.5): + resolution: {integrity: sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-dotall-regex@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-create-regexp-features-plugin': 7.17.0(@babel/core@7.17.5) + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-duplicate-keys@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-exponentiation-operator@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.16.7 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-flow-strip-types@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-flow': 7.16.7(@babel/core@7.17.5) + dev: true + + /@babel/plugin-transform-for-of@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-function-name@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-compilation-targets': 7.16.7(@babel/core@7.17.5) + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-literals@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-member-expression-literals@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-modules-amd@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-module-transforms': 7.17.6 + '@babel/helper-plugin-utils': 7.16.7 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs@7.16.8(@babel/core@7.17.5): + resolution: {integrity: sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-module-transforms': 7.17.6 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-simple-access': 7.16.7 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + + /@babel/plugin-transform-modules-systemjs@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.17.6 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-validator-identifier': 7.22.20 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-umd@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-module-transforms': 7.17.6 + '@babel/helper-plugin-utils': 7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex@7.16.8(@babel/core@7.17.5): + resolution: {integrity: sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-create-regexp-features-plugin': 7.17.0(@babel/core@7.17.5) + dev: true + + /@babel/plugin-transform-new-target@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-object-super@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-replace-supers': 7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-parameters@7.16.7(@babel/core@7.12.9): + resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-parameters@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-property-literals@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-react-display-name@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-react-jsx-development@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/plugin-transform-react-jsx': 7.17.3(@babel/core@7.17.5) + dev: true + + /@babel/plugin-transform-react-jsx@7.17.3(@babel/core@7.17.5): + resolution: {integrity: sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-jsx': 7.16.7(@babel/core@7.17.5) + '@babel/types': 7.23.0 + dev: true + + /@babel/plugin-transform-react-pure-annotations@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-regenerator@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + regenerator-transform: 0.14.5 + dev: true + + /@babel/plugin-transform-reserved-words@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-runtime@7.17.0(@babel/core@7.17.5): + resolution: {integrity: sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-plugin-utils': 7.16.7 + babel-plugin-polyfill-corejs2: 0.3.1(@babel/core@7.17.5) + babel-plugin-polyfill-corejs3: 0.5.2(@babel/core@7.17.5) + babel-plugin-polyfill-regenerator: 0.3.1(@babel/core@7.17.5) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-shorthand-properties@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-spread@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 + dev: true + + /@babel/plugin-transform-sticky-regex@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-template-literals@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + + /@babel/plugin-transform-typeof-symbol@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-typescript@7.16.8(@babel/core@7.17.5): + resolution: {integrity: sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-create-class-features-plugin': 7.17.6(@babel/core@7.17.5) + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-typescript': 7.16.7(@babel/core@7.17.5) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-unicode-escapes@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-unicode-regex@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-create-regexp-features-plugin': 7.17.0(@babel/core@7.17.5) + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/preset-env@7.16.11(@babel/core@7.17.5): + resolution: {integrity: sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.17.0 + '@babel/core': 7.17.5 + '@babel/helper-compilation-targets': 7.16.7(@babel/core@7.17.5) + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-validator-option': 7.16.7 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-async-generator-functions': 7.16.8(@babel/core@7.17.5) + '@babel/plugin-proposal-class-properties': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-class-static-block': 7.17.6(@babel/core@7.17.5) + '@babel/plugin-proposal-dynamic-import': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-export-namespace-from': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-json-strings': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-logical-assignment-operators': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-numeric-separator': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-object-rest-spread': 7.17.3(@babel/core@7.17.5) + '@babel/plugin-proposal-optional-catch-binding': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-optional-chaining': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-private-methods': 7.16.11(@babel/core@7.17.5) + '@babel/plugin-proposal-private-property-in-object': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-unicode-property-regex': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.17.5) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.17.5) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.17.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.17.5) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.17.5) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.17.5) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.17.5) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.17.5) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.17.5) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.17.5) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.17.5) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.17.5) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.17.5) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.17.5) + '@babel/plugin-transform-arrow-functions': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-async-to-generator': 7.16.8(@babel/core@7.17.5) + '@babel/plugin-transform-block-scoped-functions': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-block-scoping': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-classes': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-computed-properties': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-destructuring': 7.17.3(@babel/core@7.17.5) + '@babel/plugin-transform-dotall-regex': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-duplicate-keys': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-exponentiation-operator': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-for-of': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-function-name': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-literals': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-member-expression-literals': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-modules-amd': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-modules-commonjs': 7.16.8(@babel/core@7.17.5) + '@babel/plugin-transform-modules-systemjs': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-modules-umd': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-named-capturing-groups-regex': 7.16.8(@babel/core@7.17.5) + '@babel/plugin-transform-new-target': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-object-super': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-parameters': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-property-literals': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-regenerator': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-reserved-words': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-shorthand-properties': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-spread': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-sticky-regex': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-template-literals': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-typeof-symbol': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-unicode-escapes': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-unicode-regex': 7.16.7(@babel/core@7.17.5) + '@babel/preset-modules': 0.1.5(@babel/core@7.17.5) + '@babel/types': 7.23.0 + babel-plugin-polyfill-corejs2: 0.3.1(@babel/core@7.17.5) + babel-plugin-polyfill-corejs3: 0.5.2(@babel/core@7.17.5) + babel-plugin-polyfill-regenerator: 0.3.1(@babel/core@7.17.5) + core-js-compat: 3.21.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-flow@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-6ceP7IyZdUYQ3wUVqyRSQXztd1YmFHWI4Xv11MIqAlE4WqxBSd/FZ61V9k+TS5Gd4mkHOtQtPp9ymRpxH4y1Ug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-validator-option': 7.16.7 + '@babel/plugin-transform-flow-strip-types': 7.16.7(@babel/core@7.17.5) + dev: true + + /@babel/preset-modules@0.1.5(@babel/core@7.17.5): + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-proposal-unicode-property-regex': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-dotall-regex': 7.16.7(@babel/core@7.17.5) + '@babel/types': 7.23.0 + esutils: 2.0.3 + dev: true + + /@babel/preset-react@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-validator-option': 7.16.7 + '@babel/plugin-transform-react-display-name': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-react-jsx': 7.17.3(@babel/core@7.17.5) + '@babel/plugin-transform-react-jsx-development': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-react-pure-annotations': 7.16.7(@babel/core@7.17.5) + dev: true + + /@babel/preset-typescript@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-validator-option': 7.16.7 + '@babel/plugin-transform-typescript': 7.16.8(@babel/core@7.17.5) + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/register@7.17.0(@babel/core@7.17.5): + resolution: {integrity: sha512-UNZsMAZ7uKoGHo1HlEXfteEOYssf64n/PNLHGqOKq/bgYcu/4LrQWAHJwSCb3BRZK8Hi5gkJdRcwrGTO2wtRCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + clone-deep: 4.0.1 + find-cache-dir: 2.1.0 + make-dir: 2.1.0 + pirates: 4.0.5 + source-map-support: 0.5.21 + dev: true + + /@babel/runtime-corejs3@7.17.2: + resolution: {integrity: sha512-NcKtr2epxfIrNM4VOmPKO46TvDMCBhgi2CrSHaEarrz+Plk2K5r9QemmOFTGpZaoKnWoGH5MO+CzeRsih/Fcgg==} + engines: {node: '>=6.9.0'} + dependencies: + core-js-pure: 3.21.1 + regenerator-runtime: 0.13.9 + dev: true + + /@babel/runtime@7.17.2: + resolution: {integrity: sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.9 + dev: true + + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + + /@babel/traverse@7.23.2: + resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + /@base2/pretty-print-object@1.0.1: + resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} + dev: true + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + + /@callstack/react-theme-provider@3.0.7(react@17.0.2): + resolution: {integrity: sha512-Ab6rbD2w4u9W3yf7LQQ8evx9m8fZNsoWxt+MFm3AyZnyKQNCJf4K7ip9tHHZgSs+HTdoj38lEqPehvFOVQKvAg==} + peerDependencies: + react: '>=16.3.0' + dependencies: + deepmerge: 3.3.0 + hoist-non-react-statics: 3.3.2 + react: 17.0.2 + dev: false + + /@cnakazawa/watch@1.0.4: + resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} + engines: {node: '>=0.1.95'} + hasBin: true + dependencies: + exec-sh: 0.3.6 + minimist: 1.2.7 + dev: true + + /@corex/deepmerge@2.6.148: + resolution: {integrity: sha512-6QMz0/2h5C3ua51iAnXMPWFbb1QOU1UvSM4bKBw5mzdT+WtLgjbETBBIQZ+Sh9WvEcGwlAt/DEdRpIC3XlDBMA==} + dev: true + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: false + + /@discoveryjs/json-ext@0.5.6: + resolution: {integrity: sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==} + engines: {node: '>=10.0.0'} + dev: true + + /@docsearch/css@3.0.0: + resolution: {integrity: sha512-1kkV7tkAsiuEd0shunYRByKJe3xQDG2q7wYg24SOw1nV9/2lwEd4WrUYRJC/ukGTl2/kHeFxsaUvtiOy0y6fFA==} + dev: false + + /@docsearch/react@3.0.0(@algolia/client-search@4.13.0)(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-yhMacqS6TVQYoBh/o603zszIb5Bl8MIXuOc6Vy617I74pirisDzzcNh0NEaYQt50fVVR3khUbeEhUEWEWipESg==} + peerDependencies: + '@types/react': '>= 16.8.0 < 18.0.0' + react: '>= 16.8.0 < 18.0.0' + react-dom: '>= 16.8.0 < 18.0.0' + dependencies: + '@algolia/autocomplete-core': 1.5.2 + '@algolia/autocomplete-preset-algolia': 1.5.2(@algolia/client-search@4.13.0)(algoliasearch@4.13.0) + '@docsearch/css': 3.0.0 + '@types/react': 17.0.39 + algoliasearch: 4.13.0 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + transitivePeerDependencies: + - '@algolia/client-search' + dev: false + + /@emotion/cache@10.0.29: + resolution: {integrity: sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==} + dependencies: + '@emotion/sheet': 0.9.4 + '@emotion/stylis': 0.8.5 + '@emotion/utils': 0.11.3 + '@emotion/weak-memoize': 0.2.5 + dev: true + + /@emotion/core@10.3.1(react@17.0.2): + resolution: {integrity: sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==} + peerDependencies: + react: '>=16.3.0' + dependencies: + '@babel/runtime': 7.17.2 + '@emotion/cache': 10.0.29 + '@emotion/css': 10.0.27 + '@emotion/serialize': 0.11.16 + '@emotion/sheet': 0.9.4 + '@emotion/utils': 0.11.3 + react: 17.0.2 + dev: true + + /@emotion/css@10.0.27: + resolution: {integrity: sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==} + dependencies: + '@emotion/serialize': 0.11.16 + '@emotion/utils': 0.11.3 + babel-plugin-emotion: 10.2.2 + dev: true + + /@emotion/hash@0.8.0: + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + dev: true + + /@emotion/is-prop-valid@0.8.8: + resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} + dependencies: + '@emotion/memoize': 0.7.4 + + /@emotion/memoize@0.7.4: + resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + + /@emotion/serialize@0.11.16: + resolution: {integrity: sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==} + dependencies: + '@emotion/hash': 0.8.0 + '@emotion/memoize': 0.7.4 + '@emotion/unitless': 0.7.5 + '@emotion/utils': 0.11.3 + csstype: 2.6.19 + dev: true + + /@emotion/sheet@0.9.4: + resolution: {integrity: sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==} + dev: true + + /@emotion/styled-base@10.3.0(@emotion/core@10.3.1)(react@17.0.2): + resolution: {integrity: sha512-PBRqsVKR7QRNkmfH78hTSSwHWcwDpecH9W6heujWAcyp2wdz/64PP73s7fWS1dIPm8/Exc8JAzYS8dEWXjv60w==} + peerDependencies: + '@emotion/core': ^10.0.28 + react: '>=16.3.0' + dependencies: + '@babel/runtime': 7.17.2 + '@emotion/core': 10.3.1(react@17.0.2) + '@emotion/is-prop-valid': 0.8.8 + '@emotion/serialize': 0.11.16 + '@emotion/utils': 0.11.3 + react: 17.0.2 + dev: true + + /@emotion/styled@10.3.0(@emotion/core@10.3.1)(react@17.0.2): + resolution: {integrity: sha512-GgcUpXBBEU5ido+/p/mCT2/Xx+Oqmp9JzQRuC+a4lYM4i4LBBn/dWvc0rQ19N9ObA8/T4NWMrPNe79kMBDJqoQ==} + peerDependencies: + '@emotion/core': ^10.0.27 + react: '>=16.3.0' + dependencies: + '@emotion/core': 10.3.1(react@17.0.2) + '@emotion/styled-base': 10.3.0(@emotion/core@10.3.1)(react@17.0.2) + babel-plugin-emotion: 10.2.2 + react: 17.0.2 + dev: true + + /@emotion/stylis@0.8.5: + resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==} + dev: true + + /@emotion/unitless@0.7.5: + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + dev: true + + /@emotion/utils@0.11.3: + resolution: {integrity: sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==} + dev: true + + /@emotion/weak-memoize@0.2.5: + resolution: {integrity: sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==} + dev: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.10.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.10.0 + eslint-visitor-keys: 3.3.0 + dev: true + + /@eslint-community/regexpp@4.5.1: + resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@1.2.0: + resolution: {integrity: sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.3.1 + globals: 13.12.1 + ignore: 4.0.6 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@fastify/busboy@2.0.0: + resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==} + engines: {node: '>=14'} + dev: false + + /@gar/promisify@1.1.3: + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + dev: true + + /@humanwhocodes/config-array@0.9.5: + resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/object-schema@1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@icons/material@0.2.4(react@17.0.2): + resolution: {integrity: sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==} + peerDependencies: + react: '*' + dependencies: + react: 17.0.2 + dev: true + + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jest/transform@26.6.2: + resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} + engines: {node: '>= 10.14.2'} + dependencies: + '@babel/core': 7.17.5 + '@jest/types': 26.6.2 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 1.8.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.9 + jest-haste-map: 26.6.2 + jest-regex-util: 26.0.0 + jest-util: 26.6.2 + micromatch: 4.0.4 + pirates: 4.0.5 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/types@26.6.2: + resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} + engines: {node: '>= 10.14.2'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 17.0.21 + '@types/yargs': 15.0.14 + chalk: 4.1.2 + dev: true + + /@jest/types@27.5.1: + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 17.0.21 + '@types/yargs': 16.0.4 + chalk: 4.1.2 + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.19 + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: false + + /@mdx-js/loader@1.6.22(react@17.0.2): + resolution: {integrity: sha512-9CjGwy595NaxAYp0hF9B/A0lH6C8Rms97e2JS9d3jVUtILn6pT5i5IV965ra3lIWc7Rs1GG1tBdVF7dCowYe6Q==} + dependencies: + '@mdx-js/mdx': 1.6.22 + '@mdx-js/react': 1.6.22(react@17.0.2) + loader-utils: 2.0.0 + transitivePeerDependencies: + - react + - supports-color + dev: true + + /@mdx-js/mdx@1.6.22: + resolution: {integrity: sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==} + dependencies: + '@babel/core': 7.12.9 + '@babel/plugin-syntax-jsx': 7.12.1(@babel/core@7.12.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) + '@mdx-js/util': 1.6.22 + babel-plugin-apply-mdx-type-prop: 1.6.22(@babel/core@7.12.9) + babel-plugin-extract-import-names: 1.6.22 + camelcase-css: 2.0.1 + detab: 2.0.4 + hast-util-raw: 6.0.1 + lodash.uniq: 4.5.0 + mdast-util-to-hast: 10.0.1 + remark-footnotes: 2.0.0 + remark-mdx: 1.6.22 + remark-parse: 8.0.3 + remark-squeeze-paragraphs: 4.0.0 + style-to-object: 0.3.0 + unified: 9.2.0 + unist-builder: 2.0.3 + unist-util-visit: 2.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@mdx-js/mdx@2.1.0: + resolution: {integrity: sha512-AuZGNLSGrytOd7a81E2SsWAOYg/eV5I51BlUPc11PPmPwhpovu7mwfyQ8PH1jxhdH0Is6aRtXHERuDxon0TluQ==} + dependencies: + '@types/estree-jsx': 0.0.1 + '@types/mdx': 2.0.1 + astring: 1.8.1 + estree-util-build-jsx: 2.0.0 + estree-util-is-identifier-name: 2.0.0 + estree-walker: 3.0.1 + hast-util-to-estree: 2.0.2 + markdown-extensions: 1.1.1 + periscopic: 3.0.4 + remark-mdx: 2.1.0 + remark-parse: 10.0.1 + remark-rehype: 10.1.0 + unified: 10.1.2 + unist-util-position-from-estree: 1.1.1 + unist-util-stringify-position: 3.0.2 + unist-util-visit: 4.1.0 + vfile: 5.3.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@mdx-js/react@1.6.22(react@17.0.2): + resolution: {integrity: sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==} + peerDependencies: + react: ^16.13.1 || ^17.0.0 + dependencies: + react: 17.0.2 + dev: true + + /@mdx-js/react@2.1.1(react@17.0.2): + resolution: {integrity: sha512-7zlZDf5xmWH8I0kFE4DG91COOkxjaW9DX5f1HWztZpFcVua2gJgMYfIkFaDpO/DH/tWi6Mz+OheW4194r15igg==} + peerDependencies: + react: '>=16' + dependencies: + '@types/mdx': 2.0.1 + '@types/react': 18.0.5 + react: 17.0.2 + dev: false + + /@mdx-js/util@1.6.22: + resolution: {integrity: sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==} + dev: true + + /@mrmlnc/readdir-enhanced@2.2.1: + resolution: {integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==} + engines: {node: '>=4'} + dependencies: + call-me-maybe: 1.0.1 + glob-to-regexp: 0.3.0 + dev: true + + /@next/bundle-analyzer@12.1.5: + resolution: {integrity: sha512-A9MkhWCPvSp1vl0Ox7IjJ/qpugDC5YAb40btGGIPPXHQtkal107Sf8dbay4fqw4Hekee5gdS0WUMfe1BaSur7w==} + dependencies: + webpack-bundle-analyzer: 4.3.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@next/env@12.3.4: + resolution: {integrity: sha512-H/69Lc5Q02dq3o+dxxy5O/oNxFsZpdL6WREtOOtOM1B/weonIwDXkekr1KV5DPVPr12IHFPrMrcJQ6bgPMfn7A==} + + /@next/eslint-plugin-next@12.1.0: + resolution: {integrity: sha512-WFiyvSM2G5cQmh32t/SiQuJ+I2O+FHVlK/RFw5b1565O2kEM/36EXncjt88Pa+X5oSc+1SS+tWxowWJd1lqI+g==} + dependencies: + glob: 7.1.7 + dev: true + + /@next/swc-android-arm-eabi@12.3.4: + resolution: {integrity: sha512-cM42Cw6V4Bz/2+j/xIzO8nK/Q3Ly+VSlZJTa1vHzsocJRYz8KT6MrreXaci2++SIZCF1rVRCDgAg5PpqRibdIA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + optional: true + + /@next/swc-android-arm64@12.3.4: + resolution: {integrity: sha512-5jf0dTBjL+rabWjGj3eghpLUxCukRhBcEJgwLedewEA/LJk2HyqCvGIwj5rH+iwmq1llCWbOky2dO3pVljrapg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + optional: true + + /@next/swc-darwin-arm64@12.3.4: + resolution: {integrity: sha512-DqsSTd3FRjQUR6ao0E1e2OlOcrF5br+uegcEGPVonKYJpcr0MJrtYmPxd4v5T6UCJZ+XzydF7eQo5wdGvSZAyA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optional: true + + /@next/swc-darwin-x64@12.3.4: + resolution: {integrity: sha512-PPF7tbWD4k0dJ2EcUSnOsaOJ5rhT3rlEt/3LhZUGiYNL8KvoqczFrETlUx0cUYaXe11dRA3F80Hpt727QIwByQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + optional: true + + /@next/swc-freebsd-x64@12.3.4: + resolution: {integrity: sha512-KM9JXRXi/U2PUM928z7l4tnfQ9u8bTco/jb939pdFUHqc28V43Ohd31MmZD1QzEK4aFlMRaIBQOWQZh4D/E5lQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + optional: true + + /@next/swc-linux-arm-gnueabihf@12.3.4: + resolution: {integrity: sha512-3zqD3pO+z5CZyxtKDTnOJ2XgFFRUBciOox6EWkoZvJfc9zcidNAQxuwonUeNts6Xbm8Wtm5YGIRC0x+12YH7kw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true + + /@next/swc-linux-arm64-gnu@12.3.4: + resolution: {integrity: sha512-kiX0vgJGMZVv+oo1QuObaYulXNvdH/IINmvdZnVzMO/jic/B8EEIGlZ8Bgvw8LCjH3zNVPO3mGrdMvnEEPEhKA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@next/swc-linux-arm64-musl@12.3.4: + resolution: {integrity: sha512-EETZPa1juczrKLWk5okoW2hv7D7WvonU+Cf2CgsSoxgsYbUCZ1voOpL4JZTOb6IbKMDo6ja+SbY0vzXZBUMvkQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + optional: true + + /@next/swc-linux-x64-gnu@12.3.4: + resolution: {integrity: sha512-4csPbRbfZbuWOk3ATyWcvVFdD9/Rsdq5YHKvRuEni68OCLkfy4f+4I9OBpyK1SKJ00Cih16NJbHE+k+ljPPpag==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@next/swc-linux-x64-musl@12.3.4: + resolution: {integrity: sha512-YeBmI+63Ro75SUiL/QXEVXQ19T++58aI/IINOyhpsRL1LKdyfK/35iilraZEFz9bLQrwy1LYAR5lK200A9Gjbg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + optional: true + + /@next/swc-win32-arm64-msvc@12.3.4: + resolution: {integrity: sha512-Sd0qFUJv8Tj0PukAYbCCDbmXcMkbIuhnTeHm9m4ZGjCf6kt7E/RMs55Pd3R5ePjOkN7dJEuxYBehawTR/aPDSQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + optional: true + + /@next/swc-win32-ia32-msvc@12.3.4: + resolution: {integrity: sha512-rt/vv/vg/ZGGkrkKcuJ0LyliRdbskQU+91bje+PgoYmxTZf/tYs6IfbmgudBJk6gH3QnjHWbkphDdRQrseRefQ==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + optional: true + + /@next/swc-win32-x64-msvc@12.3.4: + resolution: {integrity: sha512-DQ20JEfTBZAgF8QCjYfJhv2/279M6onxFjdG/+5B0Cyj00/EdBxiWb2eGGFgQhrBbNv/lsvzFbbi0Ptf8Vw/bg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + optional: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@1.1.3: + resolution: {integrity: sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==} + engines: {node: '>= 6'} + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 + dev: true + + /@npmcli/fs@1.1.1: + resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.5.4 + dev: true + + /@npmcli/move-file@1.1.2: + resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} + engines: {node: '>=10'} + deprecated: This functionality has been moved to @npmcli/fs + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + dev: true + + /@pmmmwh/react-refresh-webpack-plugin@0.5.4(react-refresh@0.11.0)(webpack@4.46.0): + resolution: {integrity: sha512-zZbZeHQDnoTlt2AF+diQT0wsSXpvWiaIOZwBRdltNFhG1+I3ozyaw7U/nBiUwyJ0D+zwdXp0E3bWOl38Ag2BMw==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <3.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + dependencies: + ansi-html-community: 0.0.8 + common-path-prefix: 3.0.0 + core-js-pure: 3.21.1 + error-stack-parser: 2.0.7 + find-up: 5.0.0 + html-entities: 2.3.2 + loader-utils: 2.0.2 + react-refresh: 0.11.0 + schema-utils: 3.1.1 + source-map: 0.7.3 + webpack: 4.46.0 + dev: true + + /@polka/url@1.0.0-next.21: + resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} + dev: true + + /@popperjs/core@2.11.2: + resolution: {integrity: sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==} + dev: true + + /@reach/component-component@0.1.3(prop-types@15.8.1)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-a1USH7L3bEfDdPN4iNZGvMEFuBfkdG+QNybeyDv8RloVFgZYRoM+KGXyy2KOfEnTUM8QWDRSROwaL3+ts5Angg==} + peerDependencies: + prop-types: ^15.6.2 + react: ^16.4.0 + react-dom: ^16.4.0 + dependencies: + prop-types: 15.8.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: true + + /@reach/observe-rect@1.2.0: + resolution: {integrity: sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==} + dev: true + + /@reach/rect@0.2.1(prop-types@15.8.1)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-aZ9RsNHDMQ3zETonikqu9/85iXxj+LPqZ9Gr9UAncj3AufYmGeWG3XG6b37B+7ORH+mkhVpLU2ZlIWxmOe9Cqg==} + peerDependencies: + prop-types: ^15.6.2 + react: ^16.8.0 + react-dom: ^16.8.0 + dependencies: + '@reach/component-component': 0.1.3(prop-types@15.8.1)(react-dom@17.0.2)(react@17.0.2) + '@reach/observe-rect': 1.2.0 + prop-types: 15.8.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: true + + /@react-theming/flatten@0.1.1: + resolution: {integrity: sha512-cieWCbO4xTgl8/LAUTEgiafEiFIcheARteyxXddnUHm/+7POCmRvSE/woHGXlVH7dFBlCbI4y/e5ikMzwBA3CA==} + dependencies: + color: 3.2.1 + color-convert: 2.0.1 + color-parse: 1.4.2 + color-rgba: 2.4.0 + color-string: 1.9.0 + color-stringify: 1.2.1 + flat: 5.0.2 + is-color-stop: 1.1.0 + rgb-hex: 3.0.0 + dev: true + + /@react-theming/storybook-addon@1.1.5(@storybook/addons@6.4.19)(@storybook/react@6.4.19)(@storybook/theming@6.4.19)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-m4LM4j/dDzwMdvdHvsdiM64Qb6pI7DdALHHMoCCe0u4OFlAxtHk67FlwMkEGfsoV3zZWHYhz8hP7rcSrPUMbVw==} + peerDependencies: + '@storybook/react': ^5.0.0 || ^6.0.0 + '@storybook/theming': ^5.0.0 || ^6.0.0 + react: ^16.8.6 || ^17.0.0 + dependencies: + '@react-theming/flatten': 0.1.1 + '@react-theming/theme-name': 1.0.3 + '@react-theming/theme-swatch': 1.0.0(react@17.0.2) + '@storybook/addon-devkit': 1.4.2(@storybook/addons@6.4.19)(@storybook/react@6.4.19)(react-dom@17.0.2)(react@17.0.2) + '@storybook/react': 6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@usulpro/react-json-view': 2.0.1(react-dom@17.0.2)(react@17.0.2) + react: 17.0.2 + react-color: 2.19.3(react@17.0.2) + transitivePeerDependencies: + - '@storybook/addons' + - encoding + - react-dom + dev: true + + /@react-theming/theme-name@1.0.3: + resolution: {integrity: sha512-5tYnKIG3wUJ3GTX50ldeU+nxLTEU8WXEGsHk8mWeG9XGC4VxKIp2gSqS6B/opCGmfuIFm459Dtru8PSuEXiJJg==} + dependencies: + color-name-list: 4.15.0 + nearest-color: 0.4.4 + dev: true + + /@react-theming/theme-swatch@1.0.0(react@17.0.2): + resolution: {integrity: sha512-tOzDTUbFB5uQLMVHJ4fXWYZ4i7JIKjyrS7SlHDoscRZqM69lmT+s9fSZoD1/InTdX0M7Jh8thXF0SzeoxnD1/Q==} + peerDependencies: + react: ^16.8.6 || ^17.0.0 + dependencies: + react: 17.0.2 + dev: true + + /@rushstack/eslint-patch@1.1.0: + resolution: {integrity: sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==} + dev: true + + /@storybook/addon-actions@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-GpSvP8xV8GfNkmtGJjfCgaOx6mbjtyTK0aT9FqX9pU0s+KVMmoCTrBh43b7dWrwxxas01yleBK9VpYggzhi/Fw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + core-js: 3.21.1 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.21 + polished: 4.1.4 + prop-types: 15.8.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-inspector: 5.1.1(react@17.0.2) + regenerator-runtime: 0.13.9 + telejson: 5.3.3 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + uuid-browser: 3.1.0 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/addon-backgrounds@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-yn8MTE7lctO48Rdw+DmmA1wKdf5eyAbA/vrug5ske/U2WPgGc65sApzwT8BItZfuyAMjuT5RnCWwd7o6hGRgGQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-logger': 6.4.19 + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + core-js: 3.21.1 + global: 4.4.0 + memoizerific: 1.11.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/addon-controls@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5): + resolution: {integrity: sha512-JHi5z9i6NsgQLfG5WOeQE1AyOrM+QJLrjT+uOYx40bq+OC1yWHH7qHiphPP8kjJJhCZlaQk1qqXYkkQXgaeHSw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-logger': 6.4.19 + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/node-logger': 6.4.19 + '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + core-js: 3.21.1 + lodash: 4.17.21 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + - eslint + - supports-color + - typescript + - vue-template-compiler + - webpack-cli + - webpack-command + dev: true + + /@storybook/addon-devkit@1.4.2(@storybook/addons@6.4.19)(@storybook/react@6.4.19)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-ggy34eCzmiKOwgV7xYNjlPClGpmtnYODPJv0vkCKiDyPeVLHocq2UZ7ZkOhQ5GO7TM7aLeeC1JBS00tZId9oLA==} + peerDependencies: + '@storybook/addons': '*' + '@storybook/react': '*' + react: '*' + react-dom: '*' + dependencies: + '@reach/rect': 0.2.1(prop-types@15.8.1)(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/core-events': 6.4.19 + '@storybook/react': 6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + deep-equal: 2.0.5 + prop-types: 15.8.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: true + + /@storybook/addon-docs@6.4.19(@storybook/react@6.4.19)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0): + resolution: {integrity: sha512-OEPyx/5ZXmZOPqIAWoPjlIP8Q/YfNjAmBosA8tmA8t5KCSiq/vpLcAvQhxqK6n0wk/B8Xp67Z8RpLfXjU8R3tw==} + peerDependencies: + '@storybook/angular': 6.4.19 + '@storybook/html': 6.4.19 + '@storybook/react': 6.4.19 + '@storybook/vue': 6.4.19 + '@storybook/vue3': 6.4.19 + '@storybook/web-components': 6.4.19 + lit: ^2.0.0 + lit-html: ^1.4.1 || ^2.0.0 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + svelte: ^3.31.2 + sveltedoc-parser: ^4.1.0 + vue: ^2.6.10 || ^3.0.0 + webpack: '*' + peerDependenciesMeta: + '@storybook/angular': + optional: true + '@storybook/html': + optional: true + '@storybook/react': + optional: true + '@storybook/vue': + optional: true + '@storybook/vue3': + optional: true + '@storybook/web-components': + optional: true + lit: + optional: true + lit-html: + optional: true + react: + optional: true + react-dom: + optional: true + svelte: + optional: true + sveltedoc-parser: + optional: true + vue: + optional: true + webpack: + optional: true + dependencies: + '@babel/core': 7.17.5 + '@babel/generator': 7.23.0 + '@babel/parser': 7.23.0 + '@babel/plugin-transform-react-jsx': 7.17.3(@babel/core@7.17.5) + '@babel/preset-env': 7.16.11(@babel/core@7.17.5) + '@jest/transform': 26.6.2 + '@mdx-js/loader': 1.6.22(react@17.0.2) + '@mdx-js/mdx': 1.6.22 + '@mdx-js/react': 1.6.22(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/builder-webpack4': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/client-logger': 6.4.19 + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/core': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/csf-tools': 6.4.19 + '@storybook/node-logger': 6.4.19 + '@storybook/postinstall': 6.4.19 + '@storybook/preview-web': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/react': 6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/source-loader': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + acorn-walk: 7.2.0 + core-js: 3.21.1 + doctrine: 3.0.0 + escodegen: 2.0.0 + fast-deep-equal: 3.1.3 + global: 4.4.0 + html-tags: 3.1.0 + js-string-escape: 1.0.1 + loader-utils: 2.0.2 + lodash: 4.17.21 + nanoid: 3.3.1 + p-limit: 3.1.0 + prettier: 2.3.0 + prop-types: 15.8.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-element-to-jsx-string: 14.3.4(react-dom@17.0.2)(react@17.0.2) + regenerator-runtime: 0.13.9 + remark-external-links: 8.0.0 + remark-slug: 6.1.0 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + webpack: 4.46.0 + transitivePeerDependencies: + - '@storybook/builder-webpack5' + - '@storybook/manager-webpack5' + - '@types/react' + - bluebird + - bufferutil + - encoding + - eslint + - supports-color + - typescript + - utf-8-validate + - vue-template-compiler + - webpack-cli + - webpack-command + dev: true + + /@storybook/addon-essentials@6.4.19(@babel/core@7.17.5)(@storybook/react@6.4.19)(@types/react@17.0.39)(babel-loader@8.2.3)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0): + resolution: {integrity: sha512-vbV8sjepMVEuwhTDBHjO3E6vXluG7RiEeozV1QVuS9lGhjQdvUPdZ9rDNUcP6WHhTdEkS/ffTMaGIy1v8oZd7g==} + peerDependencies: + '@babel/core': ^7.9.6 + '@storybook/vue': 6.4.19 + '@storybook/web-components': 6.4.19 + babel-loader: ^8.0.0 + lit-html: ^1.4.1 || ^2.0.0-rc.3 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + webpack: '*' + peerDependenciesMeta: + '@storybook/vue': + optional: true + '@storybook/web-components': + optional: true + lit-html: + optional: true + react: + optional: true + react-dom: + optional: true + webpack: + optional: true + dependencies: + '@babel/core': 7.17.5 + '@storybook/addon-actions': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/addon-backgrounds': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/addon-controls': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/addon-docs': 6.4.19(@storybook/react@6.4.19)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + '@storybook/addon-measure': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/addon-outline': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/addon-toolbars': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/addon-viewport': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/node-logger': 6.4.19 + babel-loader: 8.2.3(@babel/core@7.17.5)(webpack@4.46.0) + core-js: 3.21.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + webpack: 4.46.0 + transitivePeerDependencies: + - '@storybook/angular' + - '@storybook/builder-webpack5' + - '@storybook/html' + - '@storybook/manager-webpack5' + - '@storybook/react' + - '@storybook/vue3' + - '@types/react' + - bluebird + - bufferutil + - encoding + - eslint + - lit + - supports-color + - svelte + - sveltedoc-parser + - typescript + - utf-8-validate + - vue + - vue-template-compiler + - webpack-cli + - webpack-command + dev: true + + /@storybook/addon-interactions@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5): + resolution: {integrity: sha512-oKXxRkKL2deUI7nOLm9UvihtPaTQ2p8Y5gL2CQvJgHhTpKmUxW+e26GYNlcFUOjsx2ifXyzqNEscsZUP83BCUw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/instrumenter': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + global: 4.4.0 + jest-mock: 27.5.1 + polished: 4.1.4 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + - eslint + - supports-color + - typescript + - vue-template-compiler + - webpack-cli + - webpack-command + dev: true + + /@storybook/addon-links@6.4.19(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-ebFHYlGDQkHSmI5QEJb1NxGNToVOLgjKkxXUe+JXX7AfHvrWiXVrN/57aOtBPZzj4h2jRPRTZgwR5glhPIlfEQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-logger': 6.4.19 + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/router': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@types/qs': 6.9.7 + core-js: 3.21.1 + global: 4.4.0 + prop-types: 15.8.1 + qs: 6.10.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + dev: true + + /@storybook/addon-measure@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-PXeU0AlpnGEvnzBQ6snkzmlIpwE0ci8LdFtL1Vz1V1Xk5fbuETWYuEkPuk1oZ7L9igB9cfT32SyJlE5MC1iaGg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-logger': 6.4.19 + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + core-js: 3.21.1 + global: 4.4.0 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/addon-outline@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-7ZDXo8qrms6dx0KRP9PInXIie82h5g9XCNrGOUdfZkQPvgofJVj0kNv6p+WOiGiaVfKPC5KMgIofqzBTFV+k6Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-logger': 6.4.19 + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + core-js: 3.21.1 + global: 4.4.0 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/addon-toolbars@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-2UtuX9yB1rD/CAZv1etnOnunfPTvsEKEg/J2HYMKE1lhenWC5muIUXvDXCXvwDC65WviPJ56nFNKaKK1Zz7JDg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + core-js: 3.21.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/addon-viewport@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-T1hdImxbLj8suQSTbp6HSA1LLHOlqaNK5jjnqzEOoAxY0O8LNPXMJ2jKIeT2fPQ0v+tWGU3tbwf+3xFq0parVQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-logger': 6.4.19 + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/core-events': 6.4.19 + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + core-js: 3.21.1 + global: 4.4.0 + memoizerific: 1.11.3 + prop-types: 15.8.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/addons@6.4.19(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-QNyRYhpqmHV8oJxxTBdkRlLSbDFhpBvfvMfIrIT1UXb/eemdBZTaCGVvXZ9UixoEEI7f8VwAQ44IvkU5B1509w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/channels': 6.4.19 + '@storybook/client-logger': 6.4.19 + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/router': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@types/webpack-env': 1.16.3 + core-js: 3.21.1 + global: 4.4.0 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + dev: true + + /@storybook/api@6.4.19(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-aDvea+NpQCBjpNp9YidO1Pr7fzzCp15FSdkG+2ihGQfv5raxrN+IIJnGUXecpe71nvlYiB+29UXBVK7AL0j51Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@storybook/channels': 6.4.19 + '@storybook/client-logger': 6.4.19 + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/router': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/semver': 7.3.2 + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + core-js: 3.21.1 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.21 + memoizerific: 1.11.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + store2: 2.13.1 + telejson: 5.3.3 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + dev: true + + /@storybook/builder-webpack4@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5): + resolution: {integrity: sha512-wxA6SMH11duc9D53aeVVBwrVRemFIoxHp/dOugkkg6ZZFAb4ZmWzf/ENc3vQIZdZpfNRi7IZIZEOfoHc994cmw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.17.5 + '@babel/plugin-proposal-class-properties': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-decorators': 7.17.2(@babel/core@7.17.5) + '@babel/plugin-proposal-export-default-from': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-object-rest-spread': 7.17.3(@babel/core@7.17.5) + '@babel/plugin-proposal-optional-chaining': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-private-methods': 7.16.11(@babel/core@7.17.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.17.5) + '@babel/plugin-transform-arrow-functions': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-block-scoping': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-classes': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-destructuring': 7.17.3(@babel/core@7.17.5) + '@babel/plugin-transform-for-of': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-parameters': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-shorthand-properties': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-spread': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-template-literals': 7.16.7(@babel/core@7.17.5) + '@babel/preset-env': 7.16.11(@babel/core@7.17.5) + '@babel/preset-react': 7.16.7(@babel/core@7.17.5) + '@babel/preset-typescript': 7.16.7(@babel/core@7.17.5) + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/channel-postmessage': 6.4.19 + '@storybook/channels': 6.4.19 + '@storybook/client-api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-logger': 6.4.19 + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/core-events': 6.4.19 + '@storybook/node-logger': 6.4.19 + '@storybook/preview-web': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/router': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/semver': 7.3.2 + '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/ui': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@types/node': 14.18.12 + '@types/webpack': 4.41.32 + autoprefixer: 9.8.8 + babel-loader: 8.2.3(@babel/core@7.17.5)(webpack@4.46.0) + babel-plugin-macros: 2.8.0 + babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.17.5) + case-sensitive-paths-webpack-plugin: 2.4.0 + core-js: 3.21.1 + css-loader: 3.6.0(webpack@4.46.0) + file-loader: 6.2.0(webpack@4.46.0) + find-up: 5.0.0 + fork-ts-checker-webpack-plugin: 4.1.6(eslint@8.10.0)(typescript@4.5.5)(webpack@4.46.0) + glob: 7.2.0 + glob-promise: 3.4.0(glob@7.2.0) + global: 4.4.0 + html-webpack-plugin: 4.5.2(webpack@4.46.0) + pnp-webpack-plugin: 1.6.4(typescript@4.5.5) + postcss: 7.0.39 + postcss-flexbugs-fixes: 4.2.1 + postcss-loader: 4.3.0(postcss@7.0.39)(webpack@4.46.0) + raw-loader: 4.0.2(webpack@4.46.0) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + stable: 0.1.8 + style-loader: 1.3.0(webpack@4.46.0) + terser-webpack-plugin: 4.2.3(webpack@4.46.0) + ts-dedent: 2.2.0 + typescript: 4.5.5 + url-loader: 4.1.1(file-loader@6.2.0)(webpack@4.46.0) + util-deprecate: 1.0.2 + webpack: 4.46.0 + webpack-dev-middleware: 3.7.3(webpack@4.46.0) + webpack-filter-warnings-plugin: 1.2.1(webpack@4.46.0) + webpack-hot-middleware: 2.25.1 + webpack-virtual-modules: 0.2.2 + transitivePeerDependencies: + - '@types/react' + - bluebird + - eslint + - supports-color + - vue-template-compiler + - webpack-cli + - webpack-command + dev: true + + /@storybook/channel-postmessage@6.4.19: + resolution: {integrity: sha512-E5h/itFzQ/6M08LR4kqlgqqmeO3tmavI+nUAlZrkCrotpJFNMHE2i0PQHg0TkFJrRDpYcrwD+AjUW4IwdqrisQ==} + dependencies: + '@storybook/channels': 6.4.19 + '@storybook/client-logger': 6.4.19 + '@storybook/core-events': 6.4.19 + core-js: 3.21.1 + global: 4.4.0 + qs: 6.10.3 + telejson: 5.3.3 + dev: true + + /@storybook/channel-websocket@6.4.19: + resolution: {integrity: sha512-cXKwQjIXttfdUyZlcHORelUmJ5nUKswsnCA/qy7IRWpZjD8yQJcNk1dYC+tTHDVqFgdRT89pL0hRRB1rlaaR8Q==} + dependencies: + '@storybook/channels': 6.4.19 + '@storybook/client-logger': 6.4.19 + core-js: 3.21.1 + global: 4.4.0 + telejson: 5.3.3 + dev: true + + /@storybook/channels@6.4.19: + resolution: {integrity: sha512-EwyoncFvTfmIlfsy8jTfayCxo2XchPkZk/9txipugWSmc057HdklMKPLOHWP0z5hLH0IbVIKXzdNISABm36jwQ==} + dependencies: + core-js: 3.21.1 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + dev: true + + /@storybook/client-api@6.4.19(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-OCrT5Um3FDvZnimQKwWtwsaI+5agPwq2i8YiqlofrI/NPMKp0I7DEkCGwE5IRD1Q8BIKqHcMo5tTmfYi0AxyOg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/channel-postmessage': 6.4.19 + '@storybook/channels': 6.4.19 + '@storybook/client-logger': 6.4.19 + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@types/qs': 6.9.7 + '@types/webpack-env': 1.16.3 + core-js: 3.21.1 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.21 + memoizerific: 1.11.3 + qs: 6.10.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + store2: 2.13.1 + synchronous-promise: 2.0.15 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + dev: true + + /@storybook/client-logger@6.4.19: + resolution: {integrity: sha512-zmg/2wyc9W3uZrvxaW4BfHcr40J0v7AGslqYXk9H+ERLVwIvrR4NhxQFaS6uITjBENyRDxwzfU3Va634WcmdDQ==} + dependencies: + core-js: 3.21.1 + global: 4.4.0 + dev: true + + /@storybook/components@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-q/0V37YAJA7CNc+wSiiefeM9+3XVk8ixBNylY36QCGJgIeGQ5/79vPyUe6K4lLmsQwpmZsIq1s1Ad5+VbboeOA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@popperjs/core': 2.11.2 + '@storybook/client-logger': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@types/color-convert': 2.0.0 + '@types/overlayscrollbars': 1.12.1 + '@types/react-syntax-highlighter': 11.0.5 + color-convert: 2.0.1 + core-js: 3.21.1 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.21 + markdown-to-jsx: 7.1.6(react@17.0.2) + memoizerific: 1.11.3 + overlayscrollbars: 1.13.1 + polished: 4.1.4 + prop-types: 15.8.1 + react: 17.0.2 + react-colorful: 5.5.1(react-dom@17.0.2)(react@17.0.2) + react-dom: 17.0.2(react@17.0.2) + react-popper-tooltip: 3.1.1(react-dom@17.0.2)(react@17.0.2) + react-syntax-highlighter: 13.5.3(react@17.0.2) + react-textarea-autosize: 8.3.3(@types/react@17.0.39)(react@17.0.2) + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/core-client@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0): + resolution: {integrity: sha512-rQHRZjhArPleE7/S8ZUolgzwY+hC0smSKX/3PQxO2GcebDjnJj6+iSV3h+aSMHMmTdoCQvjYw9aBpT8scuRe+A==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + webpack: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/channel-postmessage': 6.4.19 + '@storybook/channel-websocket': 6.4.19 + '@storybook/client-api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-logger': 6.4.19 + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/preview-web': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/ui': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + airbnb-js-shims: 2.2.1 + ansi-to-html: 0.6.15 + core-js: 3.21.1 + global: 4.4.0 + lodash: 4.17.21 + qs: 6.10.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + typescript: 4.5.5 + unfetch: 4.2.0 + util-deprecate: 1.0.2 + webpack: 4.46.0 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@storybook/core-common@6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5): + resolution: {integrity: sha512-X1pJJkO48DFxl6iyEemIKqRkJ7j9/cBh3BRBUr+xZHXBvnD0GKDXIocwh0PjSxSC6XSu3UCQnqtKi3PbjRl8Dg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.17.5 + '@babel/plugin-proposal-class-properties': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-decorators': 7.17.2(@babel/core@7.17.5) + '@babel/plugin-proposal-export-default-from': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-object-rest-spread': 7.17.3(@babel/core@7.17.5) + '@babel/plugin-proposal-optional-chaining': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-proposal-private-methods': 7.16.11(@babel/core@7.17.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.17.5) + '@babel/plugin-transform-arrow-functions': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-block-scoping': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-classes': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-destructuring': 7.17.3(@babel/core@7.17.5) + '@babel/plugin-transform-for-of': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-parameters': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-shorthand-properties': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-transform-spread': 7.16.7(@babel/core@7.17.5) + '@babel/preset-env': 7.16.11(@babel/core@7.17.5) + '@babel/preset-react': 7.16.7(@babel/core@7.17.5) + '@babel/preset-typescript': 7.16.7(@babel/core@7.17.5) + '@babel/register': 7.17.0(@babel/core@7.17.5) + '@storybook/node-logger': 6.4.19 + '@storybook/semver': 7.3.2 + '@types/node': 14.18.12 + '@types/pretty-hrtime': 1.0.1 + babel-loader: 8.2.3(@babel/core@7.17.5)(webpack@4.46.0) + babel-plugin-macros: 3.1.0 + babel-plugin-polyfill-corejs3: 0.1.7(@babel/core@7.17.5) + chalk: 4.1.2 + core-js: 3.21.1 + express: 4.17.3 + file-system-cache: 1.0.5 + find-up: 5.0.0 + fork-ts-checker-webpack-plugin: 6.5.0(eslint@8.10.0)(typescript@4.5.5)(webpack@4.46.0) + fs-extra: 9.1.0 + glob: 7.2.0 + handlebars: 4.7.7 + interpret: 2.2.0 + json5: 2.2.0 + lazy-universal-dotenv: 3.0.1 + picomatch: 2.3.1 + pkg-dir: 5.0.0 + pretty-hrtime: 1.0.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + resolve-from: 5.0.0 + slash: 3.0.0 + telejson: 5.3.3 + ts-dedent: 2.2.0 + typescript: 4.5.5 + util-deprecate: 1.0.2 + webpack: 4.46.0 + transitivePeerDependencies: + - eslint + - supports-color + - vue-template-compiler + - webpack-cli + - webpack-command + dev: true + + /@storybook/core-events@6.4.19: + resolution: {integrity: sha512-KICzUw6XVQUJzFSCXfvhfHAuyhn4Q5J4IZEfuZkcGJS4ODkrO6tmpdYE5Cfr+so95Nfp0ErWiLUuodBsW9/rtA==} + dependencies: + core-js: 3.21.1 + dev: true + + /@storybook/core-server@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5): + resolution: {integrity: sha512-bKsUB9f7hl5ya2JXxpIrErmbDQjoH39FVbzYZWjMo4t/b7+Xyi6vYadwyWcqlpUQmis09ZaSMv8L/Tw0TuwLAA==} + peerDependencies: + '@storybook/builder-webpack5': 6.4.19 + '@storybook/manager-webpack5': 6.4.19 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + peerDependenciesMeta: + '@storybook/builder-webpack5': + optional: true + '@storybook/manager-webpack5': + optional: true + typescript: + optional: true + dependencies: + '@discoveryjs/json-ext': 0.5.6 + '@storybook/builder-webpack4': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/core-client': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/csf-tools': 6.4.19 + '@storybook/manager-webpack4': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/node-logger': 6.4.19 + '@storybook/semver': 7.3.2 + '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@types/node': 14.18.12 + '@types/node-fetch': 2.6.1 + '@types/pretty-hrtime': 1.0.1 + '@types/webpack': 4.41.32 + better-opn: 2.1.1 + boxen: 5.1.2 + chalk: 4.1.2 + cli-table3: 0.6.1 + commander: 6.2.1 + compression: 1.7.4 + core-js: 3.21.1 + cpy: 8.1.2 + detect-port: 1.3.0 + express: 4.17.3 + file-system-cache: 1.0.5 + fs-extra: 9.1.0 + globby: 11.1.0 + ip: 1.1.5 + lodash: 4.17.21 + node-fetch: 2.6.7 + pretty-hrtime: 1.0.3 + prompts: 2.4.2 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + serve-favicon: 2.5.0 + slash: 3.0.0 + telejson: 5.3.3 + ts-dedent: 2.2.0 + typescript: 4.5.5 + util-deprecate: 1.0.2 + watchpack: 2.3.1 + webpack: 4.46.0 + ws: 8.5.0 + transitivePeerDependencies: + - '@types/react' + - bluebird + - bufferutil + - encoding + - eslint + - supports-color + - utf-8-validate + - vue-template-compiler + - webpack-cli + - webpack-command + dev: true + + /@storybook/core@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0): + resolution: {integrity: sha512-55LOQ/h/kf1jMhjN85t/pIEdIwWEG9yV7bdwv3niVvmoypCxyyjn9/QNK0RKYAeDSUtdm6FVoJ6k5CpxWz2d8w==} + peerDependencies: + '@storybook/builder-webpack5': 6.4.19 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + webpack: '*' + peerDependenciesMeta: + '@storybook/builder-webpack5': + optional: true + typescript: + optional: true + dependencies: + '@storybook/core-client': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + '@storybook/core-server': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + typescript: 4.5.5 + webpack: 4.46.0 + transitivePeerDependencies: + - '@storybook/manager-webpack5' + - '@types/react' + - bluebird + - bufferutil + - encoding + - eslint + - supports-color + - utf-8-validate + - vue-template-compiler + - webpack-cli + - webpack-command + dev: true + + /@storybook/csf-tools@6.4.19: + resolution: {integrity: sha512-gf/zRhGoAVsFwSyV2tc+jeJfZQkxF6QsaZgbUSe24/IUvGFCT/PS/jZq1qy7dECAwrTOfykgu8juyBtj6WhWyw==} + dependencies: + '@babel/core': 7.17.5 + '@babel/generator': 7.23.0 + '@babel/parser': 7.23.0 + '@babel/plugin-transform-react-jsx': 7.17.3(@babel/core@7.17.5) + '@babel/preset-env': 7.16.11(@babel/core@7.17.5) + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + '@mdx-js/mdx': 1.6.22 + '@storybook/csf': 0.0.2--canary.87bc651.0 + core-js: 3.21.1 + fs-extra: 9.1.0 + global: 4.4.0 + js-string-escape: 1.0.1 + lodash: 4.17.21 + prettier: 2.3.0 + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@storybook/csf@0.0.1: + resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} + dependencies: + lodash: 4.17.21 + dev: true + + /@storybook/csf@0.0.2--canary.87bc651.0: + resolution: {integrity: sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==} + dependencies: + lodash: 4.17.21 + dev: true + + /@storybook/instrumenter@6.4.19(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-KwOJUW7tItZw1CLffUbaSfEzH1p1HdGmJs1Q42uWGJSbXbVHZ7i7bJWYb3Lf90+yHTlqQjTr1PKAymwDwHseTA==} + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-logger': 6.4.19 + '@storybook/core-events': 6.4.19 + global: 4.4.0 + transitivePeerDependencies: + - react + - react-dom + dev: true + + /@storybook/manager-webpack4@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5): + resolution: {integrity: sha512-R8ugZjTYqXvlc6gDOcw909L65sIleOmIJLZR+N6/H85MivGXHu39jOwONqB7tVACufRty4FNecn8tEiQL2SAKA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.17.5 + '@babel/plugin-transform-template-literals': 7.16.7(@babel/core@7.17.5) + '@babel/preset-react': 7.16.7(@babel/core@7.17.5) + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/core-client': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/node-logger': 6.4.19 + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/ui': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@types/node': 14.18.12 + '@types/webpack': 4.41.32 + babel-loader: 8.2.3(@babel/core@7.17.5)(webpack@4.46.0) + case-sensitive-paths-webpack-plugin: 2.4.0 + chalk: 4.1.2 + core-js: 3.21.1 + css-loader: 3.6.0(webpack@4.46.0) + express: 4.17.3 + file-loader: 6.2.0(webpack@4.46.0) + file-system-cache: 1.0.5 + find-up: 5.0.0 + fs-extra: 9.1.0 + html-webpack-plugin: 4.5.2(webpack@4.46.0) + node-fetch: 2.6.7 + pnp-webpack-plugin: 1.6.4(typescript@4.5.5) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + read-pkg-up: 7.0.1 + regenerator-runtime: 0.13.9 + resolve-from: 5.0.0 + style-loader: 1.3.0(webpack@4.46.0) + telejson: 5.3.3 + terser-webpack-plugin: 4.2.3(webpack@4.46.0) + ts-dedent: 2.2.0 + typescript: 4.5.5 + url-loader: 4.1.1(file-loader@6.2.0)(webpack@4.46.0) + util-deprecate: 1.0.2 + webpack: 4.46.0 + webpack-dev-middleware: 3.7.3(webpack@4.46.0) + webpack-virtual-modules: 0.2.2 + transitivePeerDependencies: + - '@types/react' + - bluebird + - encoding + - eslint + - supports-color + - vue-template-compiler + - webpack-cli + - webpack-command + dev: true + + /@storybook/node-logger@6.4.19: + resolution: {integrity: sha512-hO2Aar3PgPnPtNq2fVgiuGlqo3EEVR6TKVBXMq7foL3tN2k4BQFKLDHbm5qZQQntyYKurKsRUGKPJFPuI1ov/w==} + dependencies: + '@types/npmlog': 4.1.4 + chalk: 4.1.2 + core-js: 3.21.1 + npmlog: 5.0.1 + pretty-hrtime: 1.0.3 + dev: true + + /@storybook/postinstall@6.4.19: + resolution: {integrity: sha512-/0tHHxyIV82zt1rw4BW70GmrQbDVu9IJPAxOqFzGjC1fNojwJ53mK6FfUsOzbhG5mWk5p0Ip5+zr74moP119AA==} + dependencies: + core-js: 3.21.1 + dev: true + + /@storybook/preview-web@6.4.19(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-jqltoBv5j7lvnxEfV9w8dLX9ASWGuvgz97yg8Yo5FqkftEwrHJenyvMGcTgDJKJPorF+wiz/9aIqnmd3LCAcZQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/channel-postmessage': 6.4.19 + '@storybook/client-logger': 6.4.19 + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) + ansi-to-html: 0.6.15 + core-js: 3.21.1 + global: 4.4.0 + lodash: 4.17.21 + qs: 6.10.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + synchronous-promise: 2.0.15 + ts-dedent: 2.2.0 + unfetch: 4.2.0 + util-deprecate: 1.0.2 + dev: true + + /@storybook/react-docgen-typescript-plugin@1.0.2-canary.253f8c1.0(typescript@4.5.5)(webpack@4.46.0): + resolution: {integrity: sha512-mmoRG/rNzAiTbh+vGP8d57dfcR2aP+5/Ll03KKFyfy5FqWFm/Gh7u27ikx1I3LmVMI8n6jh5SdWMkMKon7/tDw==} + peerDependencies: + typescript: '>= 3.x' + webpack: '>= 4' + dependencies: + debug: 4.3.4 + endent: 2.1.0 + find-cache-dir: 3.3.2 + flat-cache: 3.0.4 + micromatch: 4.0.4 + react-docgen-typescript: 2.2.2(typescript@4.5.5) + tslib: 2.3.1 + typescript: 4.5.5 + webpack: 4.46.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@storybook/react@6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5): + resolution: {integrity: sha512-5b3i8jkVrjQGmcxxxXwCduHPIh+cluWkfeweKeQOe+lW4BR8fuUICo3AMLrYPAtB/UcaJyYkIYmTvF2mkfepFA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + '@babel/core': ^7.11.5 + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + typescript: '*' + peerDependenciesMeta: + '@babel/core': + optional: true + typescript: + optional: true + dependencies: + '@babel/core': 7.17.5 + '@babel/preset-flow': 7.16.7(@babel/core@7.17.5) + '@babel/preset-react': 7.16.7(@babel/core@7.17.5) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.4(react-refresh@0.11.0)(webpack@4.46.0) + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/core': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/node-logger': 6.4.19 + '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.253f8c1.0(typescript@4.5.5)(webpack@4.46.0) + '@storybook/semver': 7.3.2 + '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@types/webpack-env': 1.16.3 + babel-plugin-add-react-displayname: 0.0.5 + babel-plugin-named-asset-import: 0.3.8(@babel/core@7.17.5) + babel-plugin-react-docgen: 4.2.1 + core-js: 3.21.1 + global: 4.4.0 + lodash: 4.17.21 + prop-types: 15.8.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-refresh: 0.11.0 + read-pkg-up: 7.0.1 + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + typescript: 4.5.5 + webpack: 4.46.0 + transitivePeerDependencies: + - '@storybook/builder-webpack5' + - '@storybook/manager-webpack5' + - '@types/react' + - '@types/webpack' + - bluebird + - bufferutil + - encoding + - eslint + - sockjs-client + - supports-color + - type-fest + - utf-8-validate + - vue-template-compiler + - webpack-cli + - webpack-command + - webpack-dev-server + - webpack-hot-middleware + - webpack-plugin-serve + dev: true + + /@storybook/router@6.4.19(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-KWWwIzuyeEIWVezkCihwY2A76Il9tUNg0I410g9qT7NrEsKyqXGRYOijWub7c1GGyNjLqz0jtrrehtixMcJkuA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@storybook/client-logger': 6.4.19 + core-js: 3.21.1 + fast-deep-equal: 3.1.3 + global: 4.4.0 + history: 5.0.0 + lodash: 4.17.21 + memoizerific: 1.11.3 + qs: 6.10.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-router: 6.2.2(react@17.0.2) + react-router-dom: 6.2.2(react-dom@17.0.2)(react@17.0.2) + ts-dedent: 2.2.0 + dev: true + + /@storybook/semver@7.3.2: + resolution: {integrity: sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + core-js: 3.21.1 + find-up: 4.1.0 + dev: true + + /@storybook/source-loader@6.4.19(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-XqTsqddRglvfW7mhyjwoqd/B8L6samcBehhO0OEbsFp6FPWa9eXuObCxtRYIcjcSIe+ksbW3D/54ppEs1L/g1Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-logger': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + core-js: 3.21.1 + estraverse: 5.3.0 + global: 4.4.0 + loader-utils: 2.0.2 + lodash: 4.17.21 + prettier: 2.3.0 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + dev: true + + /@storybook/store@6.4.19(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-N9/ZjemRHGfT3InPIbqQqc6snkcfnf3Qh9oOr0smbfaVGJol//KOX65kzzobtzFcid0WxtTDZ3HmgFVH+GvuhQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-logger': 6.4.19 + '@storybook/core-events': 6.4.19 + '@storybook/csf': 0.0.2--canary.87bc651.0 + core-js: 3.21.1 + fast-deep-equal: 3.1.3 + global: 4.4.0 + lodash: 4.17.21 + memoizerific: 1.11.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + regenerator-runtime: 0.13.9 + slash: 3.0.0 + stable: 0.1.8 + synchronous-promise: 2.0.15 + ts-dedent: 2.2.0 + util-deprecate: 1.0.2 + dev: true + + /@storybook/testing-library@0.0.9(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-X4/Tk7RryB0tZ/9NLUHYTBXW01zRpf6+IhdhqsVl6WOWRyUaIv3zEhr43gQyZhBe4ZZyt5d90FJC9qWmY1oFKg==} + dependencies: + '@storybook/client-logger': 6.4.19 + '@storybook/instrumenter': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@testing-library/dom': 8.11.3 + '@testing-library/user-event': 13.5.0(@testing-library/dom@8.11.3) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - react + - react-dom + dev: true + + /@storybook/theming@6.4.19(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-V4pWmTvAxmbHR6B3jA4hPkaxZPyExHvCToy7b76DpUTpuHihijNDMAn85KhOQYIeL9q14zP/aiz899tOHsOidg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@emotion/core': 10.3.1(react@17.0.2) + '@emotion/is-prop-valid': 0.8.8 + '@emotion/styled': 10.3.0(@emotion/core@10.3.1)(react@17.0.2) + '@storybook/client-logger': 6.4.19 + core-js: 3.21.1 + deep-object-diff: 1.1.9 + emotion-theming: 10.3.0(@emotion/core@10.3.1)(react@17.0.2) + global: 4.4.0 + memoizerific: 1.11.3 + polished: 4.1.4 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + resolve-from: 5.0.0 + ts-dedent: 2.2.0 + dev: true + + /@storybook/ui@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-gFwdn5LA2U6oQ4bfUFLyHZnNasGQ01YVdwjbi+l6yjmnckBNtZfJoVTZ1rzGUbxSE9rK48InJRU+latTsr7xAg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + react-dom: ^16.8.0 || ^17.0.0 + dependencies: + '@emotion/core': 10.3.1(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/channels': 6.4.19 + '@storybook/client-logger': 6.4.19 + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/core-events': 6.4.19 + '@storybook/router': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/semver': 7.3.2 + '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + copy-to-clipboard: 3.3.1 + core-js: 3.21.1 + core-js-pure: 3.21.1 + downshift: 6.1.7(react@17.0.2) + emotion-theming: 10.3.0(@emotion/core@10.3.1)(react@17.0.2) + fuse.js: 3.6.1 + global: 4.4.0 + lodash: 4.17.21 + markdown-to-jsx: 7.1.6(react@17.0.2) + memoizerific: 1.11.3 + polished: 4.1.4 + qs: 6.10.3 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-draggable: 4.4.4(react-dom@17.0.2)(react@17.0.2) + react-helmet-async: 1.2.3(react-dom@17.0.2)(react@17.0.2) + react-sizeme: 3.0.2 + regenerator-runtime: 0.13.9 + resolve-from: 5.0.0 + store2: 2.13.1 + transitivePeerDependencies: + - '@types/react' + dev: true + + /@swc/helpers@0.4.11: + resolution: {integrity: sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==} + dependencies: + tslib: 2.6.2 + + /@testing-library/dom@8.11.3: + resolution: {integrity: sha512-9LId28I+lx70wUiZjLvi1DB/WT2zGOxUh46glrSNMaWVx849kKAluezVzZrXJfTKKoQTmEOutLes/bHg4Bj3aA==} + engines: {node: '>=12'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/runtime': 7.17.2 + '@types/aria-query': 4.2.2 + aria-query: 5.0.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.13 + lz-string: 1.4.4 + pretty-format: 27.5.1 + dev: true + + /@testing-library/user-event@13.5.0(@testing-library/dom@8.11.3): + resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} + engines: {node: '>=10', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + dependencies: + '@babel/runtime': 7.17.2 + '@testing-library/dom': 8.11.3 + dev: true + + /@tootallnate/once@1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: false + + /@tsconfig/node10@1.0.8: + resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==} + dev: false + + /@tsconfig/node12@1.0.9: + resolution: {integrity: sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==} + dev: false + + /@tsconfig/node14@1.0.1: + resolution: {integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==} + dev: false + + /@tsconfig/node16@1.0.2: + resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==} + dev: false + + /@types/acorn@4.0.6: + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + dependencies: + '@types/estree': 0.0.51 + dev: false + + /@types/aria-query@4.2.2: + resolution: {integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==} + dev: true + + /@types/color-convert@2.0.0: + resolution: {integrity: sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==} + dependencies: + '@types/color-name': 1.1.1 + dev: true + + /@types/color-name@1.1.1: + resolution: {integrity: sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==} + dev: true + + /@types/debug@4.1.7: + resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} + dependencies: + '@types/ms': 0.7.31 + dev: false + + /@types/estree-jsx@0.0.1: + resolution: {integrity: sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==} + dependencies: + '@types/estree': 0.0.51 + dev: false + + /@types/estree@0.0.46: + resolution: {integrity: sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==} + dev: false + + /@types/estree@0.0.50: + resolution: {integrity: sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==} + dev: false + + /@types/estree@0.0.51: + resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} + dev: false + + /@types/glob@7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 3.0.5 + '@types/node': 17.0.21 + dev: true + + /@types/glob@8.1.0: + resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 17.0.21 + dev: true + + /@types/graceful-fs@4.1.5: + resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} + dependencies: + '@types/node': 17.0.21 + dev: true + + /@types/hast@2.3.4: + resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} + dependencies: + '@types/unist': 2.0.6 + + /@types/html-minifier-terser@5.1.2: + resolution: {integrity: sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==} + dev: true + + /@types/is-function@1.0.1: + resolution: {integrity: sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==} + dev: true + + /@types/istanbul-lib-coverage@2.0.4: + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + dev: true + + /@types/istanbul-lib-report@3.0.0: + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + dev: true + + /@types/istanbul-reports@3.0.1: + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + dependencies: + '@types/istanbul-lib-report': 3.0.0 + dev: true + + /@types/js-yaml@4.0.9: + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + + /@types/json-schema@7.0.9: + resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/mdast@3.0.10: + resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} + dependencies: + '@types/unist': 2.0.6 + + /@types/mdurl@1.0.2: + resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} + dev: false + + /@types/mdx-js__react@1.5.5: + resolution: {integrity: sha512-k8pnaP6JXVlQh18HgL5X6sYFNC/qZnzO7R2+HsmwrwUd+JnnsU0d9lyyT0RQrHg1anxDU36S98TI/fsGtmYqqg==} + dependencies: + '@types/react': 18.0.5 + dev: true + + /@types/mdx@2.0.1: + resolution: {integrity: sha512-JPEv4iAl0I+o7g8yVWDwk30es8mfVrjkvh5UeVR2sYPpZCK44vrAPsbJpIS+rJAUxLgaSAMKTEH5Vn5qd9XsrQ==} + dev: false + + /@types/minimatch@3.0.5: + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + dev: true + + /@types/minimatch@5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: true + + /@types/ms@0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: false + + /@types/node-fetch@2.6.1: + resolution: {integrity: sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==} + dependencies: + '@types/node': 17.0.21 + form-data: 3.0.1 + dev: true + + /@types/node@14.18.12: + resolution: {integrity: sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==} + dev: true + + /@types/node@17.0.21: + resolution: {integrity: sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==} + + /@types/node@17.0.34: + resolution: {integrity: sha512-XImEz7XwTvDBtzlTnm8YvMqGW/ErMWBsKZ+hMTvnDIjGCKxwK5Xpc+c/oQjOauwq8M4OS11hEkpjX8rrI/eEgA==} + dev: false + + /@types/normalize-package-data@2.4.1: + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + dev: true + + /@types/npmlog@4.1.4: + resolution: {integrity: sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==} + dev: true + + /@types/overlayscrollbars@1.12.1: + resolution: {integrity: sha512-V25YHbSoKQN35UasHf0EKD9U2vcmexRSp78qa8UglxFH8H3D+adEa9zGZwrqpH4TdvqeMrgMqVqsLB4woAryrQ==} + dev: true + + /@types/parse-json@4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: true + + /@types/parse5@5.0.3: + resolution: {integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==} + + /@types/pretty-hrtime@1.0.1: + resolution: {integrity: sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==} + dev: true + + /@types/prismjs@1.26.0: + resolution: {integrity: sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ==} + dev: false + + /@types/prop-types@15.7.4: + resolution: {integrity: sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==} + + /@types/qs@6.9.7: + resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} + dev: true + + /@types/react-syntax-highlighter@11.0.5: + resolution: {integrity: sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg==} + dependencies: + '@types/react': 18.0.5 + dev: true + + /@types/react@17.0.39: + resolution: {integrity: sha512-UVavlfAxDd/AgAacMa60Azl7ygyQNRwC/DsHZmKgNvPmRR5p70AJ5Q9EAmL2NWOJmeV+vVUI4IAP7GZrN8h8Ug==} + dependencies: + '@types/prop-types': 15.7.4 + '@types/scheduler': 0.16.2 + csstype: 3.0.10 + + /@types/react@18.0.5: + resolution: {integrity: sha512-UPxNGInDCIKlfqBrm8LDXYWNfLHwIdisWcsH5GpMyGjhEDLFgTtlRBaoWuCua9HcyuE0rMkmAeZ3FXV1pYLIYQ==} + dependencies: + '@types/prop-types': 15.7.4 + '@types/scheduler': 0.16.2 + csstype: 3.0.10 + + /@types/remark-prism@1.3.3: + resolution: {integrity: sha512-SWe7SENZm0CQaxFhU21LZswtYwivUkNx2+sWgm8XWUSc0DK5c7DSEU7YHqiDg4ytuf1HYdEvMCck3B6M8Zu/Vw==} + dependencies: + remark: 12.0.1 + unified: 9.2.2 + dev: true + + /@types/scheduler@0.16.2: + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + + /@types/semver@7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + dev: true + + /@types/source-list-map@0.1.2: + resolution: {integrity: sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==} + dev: true + + /@types/tapable@1.0.8: + resolution: {integrity: sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==} + dev: true + + /@types/uglify-js@3.13.1: + resolution: {integrity: sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==} + dependencies: + source-map: 0.6.1 + dev: true + + /@types/unist@2.0.6: + resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} + + /@types/webpack-env@1.16.3: + resolution: {integrity: sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw==} + dev: true + + /@types/webpack-sources@3.2.0: + resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==} + dependencies: + '@types/node': 17.0.21 + '@types/source-list-map': 0.1.2 + source-map: 0.7.3 + dev: true + + /@types/webpack@4.41.32: + resolution: {integrity: sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==} + dependencies: + '@types/node': 17.0.21 + '@types/tapable': 1.0.8 + '@types/uglify-js': 3.13.1 + '@types/webpack-sources': 3.2.0 + anymatch: 3.1.2 + source-map: 0.6.1 + dev: true + + /@types/yargs-parser@21.0.0: + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + dev: true + + /@types/yargs@15.0.14: + resolution: {integrity: sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==} + dependencies: + '@types/yargs-parser': 21.0.0 + dev: true + + /@types/yargs@16.0.4: + resolution: {integrity: sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==} + dependencies: + '@types/yargs-parser': 21.0.0 + dev: true + + /@typescript-eslint/eslint-plugin@5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.10.0)(typescript@4.5.5): + resolution: {integrity: sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.5.1 + '@typescript-eslint/parser': 5.61.0(eslint@8.10.0)(typescript@4.5.5) + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/type-utils': 5.61.0(eslint@8.10.0)(typescript@4.5.5) + '@typescript-eslint/utils': 5.61.0(eslint@8.10.0)(typescript@4.5.5) + debug: 4.3.4 + eslint: 8.10.0 + graphemer: 1.4.0 + ignore: 5.2.0 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + tsutils: 3.21.0(typescript@4.5.5) + typescript: 4.5.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/experimental-utils@5.13.0(eslint@8.10.0)(typescript@4.5.5): + resolution: {integrity: sha512-A0btJxjB9gH6yJsARONe5xd0ykgj1+0fO1TRWoUBn2hT3haWiZeh4f1FILKW0z/9OBchT5zCOz3hiJfRK/vumA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.13.0(eslint@8.10.0)(typescript@4.5.5) + eslint: 8.10.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5): + resolution: {integrity: sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.5.5) + debug: 4.3.4 + eslint: 8.10.0 + typescript: 4.5.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@5.13.0: + resolution: {integrity: sha512-T4N8UvKYDSfVYdmJq7g2IPJYCRzwtp74KyDZytkR4OL3NRupvswvmJQJ4CX5tDSurW2cvCc1Ia1qM7d0jpa7IA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.13.0 + '@typescript-eslint/visitor-keys': 5.13.0 + dev: true + + /@typescript-eslint/scope-manager@5.61.0: + resolution: {integrity: sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/visitor-keys': 5.61.0 + dev: true + + /@typescript-eslint/type-utils@5.61.0(eslint@8.10.0)(typescript@4.5.5): + resolution: {integrity: sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.5.5) + '@typescript-eslint/utils': 5.61.0(eslint@8.10.0)(typescript@4.5.5) + debug: 4.3.4 + eslint: 8.10.0 + tsutils: 3.21.0(typescript@4.5.5) + typescript: 4.5.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@5.13.0: + resolution: {integrity: sha512-LmE/KO6DUy0nFY/OoQU0XelnmDt+V8lPQhh8MOVa7Y5k2gGRd6U9Kp3wAjhB4OHg57tUO0nOnwYQhRRyEAyOyg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/types@5.61.0: + resolution: {integrity: sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.13.0(typescript@4.5.5): + resolution: {integrity: sha512-Q9cQow0DeLjnp5DuEDjLZ6JIkwGx3oYZe+BfcNuw/POhtpcxMTy18Icl6BJqTSd+3ftsrfuVb7mNHRZf7xiaNA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.13.0 + '@typescript-eslint/visitor-keys': 5.13.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@4.5.5) + typescript: 4.5.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@5.61.0(typescript@4.5.5): + resolution: {integrity: sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/visitor-keys': 5.61.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@4.5.5) + typescript: 4.5.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@5.13.0(eslint@8.10.0)(typescript@4.5.5): + resolution: {integrity: sha512-+9oHlPWYNl6AwwoEt5TQryEHwiKRVjz7Vk6kaBeD3/kwHE5YqTGHtm/JZY8Bo9ITOeKutFaXnBlMgSATMJALUQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@types/json-schema': 7.0.9 + '@typescript-eslint/scope-manager': 5.13.0 + '@typescript-eslint/types': 5.13.0 + '@typescript-eslint/typescript-estree': 5.13.0(typescript@4.5.5) + eslint: 8.10.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0(eslint@8.10.0) + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@5.61.0(eslint@8.10.0)(typescript@4.5.5): + resolution: {integrity: sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.10.0) + '@types/json-schema': 7.0.9 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.5.5) + eslint: 8.10.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@5.13.0: + resolution: {integrity: sha512-HLKEAS/qA1V7d9EzcpLFykTePmOQqOFim8oCvhY3pZgQ8Hi38hYpHd9e5GN6nQBFQNecNhws5wkS9Y5XIO0s/g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.13.0 + eslint-visitor-keys: 3.3.0 + dev: true + + /@typescript-eslint/visitor-keys@5.61.0: + resolution: {integrity: sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.61.0 + eslint-visitor-keys: 3.3.0 + dev: true + + /@usulpro/react-json-view@2.0.1(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-X8Ik4JmZF2Cu7vZTJQwHIbDqNaJEUEGZmdAPxKe4Ed+Xa3dyVTAeA9ea/nTNCzKRTZBIxvJFXvibpglpJ136BA==} + peerDependencies: + react: ^16.0.0 || ^15.5.4 + react-dom: ^16.0.0 || ^15.5.4 + dependencies: + color-string: 1.9.0 + flux: 4.0.3(react@17.0.2) + react: 17.0.2 + react-base16-styling: 0.6.0 + react-dom: 17.0.2(react@17.0.2) + react-lifecycles-compat: 3.0.4 + react-textarea-autosize: 6.1.0(react@17.0.2) + transitivePeerDependencies: + - encoding + dev: true + + /@webassemblyjs/ast@1.9.0: + resolution: {integrity: sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==} + dependencies: + '@webassemblyjs/helper-module-context': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/wast-parser': 1.9.0 + dev: true + + /@webassemblyjs/floating-point-hex-parser@1.9.0: + resolution: {integrity: sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==} + dev: true + + /@webassemblyjs/helper-api-error@1.9.0: + resolution: {integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==} + dev: true + + /@webassemblyjs/helper-buffer@1.9.0: + resolution: {integrity: sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==} + dev: true + + /@webassemblyjs/helper-code-frame@1.9.0: + resolution: {integrity: sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==} + dependencies: + '@webassemblyjs/wast-printer': 1.9.0 + dev: true + + /@webassemblyjs/helper-fsm@1.9.0: + resolution: {integrity: sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==} + dev: true + + /@webassemblyjs/helper-module-context@1.9.0: + resolution: {integrity: sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + dev: true + + /@webassemblyjs/helper-wasm-bytecode@1.9.0: + resolution: {integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==} + dev: true + + /@webassemblyjs/helper-wasm-section@1.9.0: + resolution: {integrity: sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + dev: true + + /@webassemblyjs/ieee754@1.9.0: + resolution: {integrity: sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + + /@webassemblyjs/leb128@1.9.0: + resolution: {integrity: sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==} + dependencies: + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/utf8@1.9.0: + resolution: {integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==} + dev: true + + /@webassemblyjs/wasm-edit@1.9.0: + resolution: {integrity: sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/helper-wasm-section': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + '@webassemblyjs/wasm-opt': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + '@webassemblyjs/wast-printer': 1.9.0 + dev: true + + /@webassemblyjs/wasm-gen@1.9.0: + resolution: {integrity: sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/ieee754': 1.9.0 + '@webassemblyjs/leb128': 1.9.0 + '@webassemblyjs/utf8': 1.9.0 + dev: true + + /@webassemblyjs/wasm-opt@1.9.0: + resolution: {integrity: sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-buffer': 1.9.0 + '@webassemblyjs/wasm-gen': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + dev: true + + /@webassemblyjs/wasm-parser@1.9.0: + resolution: {integrity: sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-api-error': 1.9.0 + '@webassemblyjs/helper-wasm-bytecode': 1.9.0 + '@webassemblyjs/ieee754': 1.9.0 + '@webassemblyjs/leb128': 1.9.0 + '@webassemblyjs/utf8': 1.9.0 + dev: true + + /@webassemblyjs/wast-parser@1.9.0: + resolution: {integrity: sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/floating-point-hex-parser': 1.9.0 + '@webassemblyjs/helper-api-error': 1.9.0 + '@webassemblyjs/helper-code-frame': 1.9.0 + '@webassemblyjs/helper-fsm': 1.9.0 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/wast-printer@1.9.0: + resolution: {integrity: sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==} + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/wast-parser': 1.9.0 + '@xtuc/long': 4.2.2 + dev: true + + /@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: true + + /@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: true + + /abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + dev: false + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.34 + negotiator: 0.6.3 + dev: true + + /acorn-globals@6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + dev: false + + /acorn-jsx@5.3.2(acorn@7.4.1): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 7.4.1 + dev: true + + /acorn-jsx@5.3.2(acorn@8.7.1): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.7.1 + + /acorn-walk@7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + + /acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + + /acorn@6.4.2: + resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + + /acorn@8.7.1: + resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==} + engines: {node: '>=0.4.0'} + hasBin: true + + /address@1.1.2: + resolution: {integrity: sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==} + engines: {node: '>= 0.12.0'} + dev: true + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + + /airbnb-js-shims@2.2.1: + resolution: {integrity: sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==} + dependencies: + array-includes: 3.1.4 + array.prototype.flat: 1.2.5 + array.prototype.flatmap: 1.2.5 + es5-shim: 4.6.5 + es6-shim: 0.35.6 + function.prototype.name: 1.1.5 + globalthis: 1.0.2 + object.entries: 1.1.5 + object.fromentries: 2.0.5 + object.getownpropertydescriptors: 2.1.3 + object.values: 1.1.5 + promise.allsettled: 1.0.5 + promise.prototype.finally: 3.1.3 + string.prototype.matchall: 4.0.6 + string.prototype.padend: 3.1.3 + string.prototype.padstart: 3.1.3 + symbol.prototype.description: 1.0.5 + dev: true + + /ajv-errors@1.0.1(ajv@6.12.6): + resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} + peerDependencies: + ajv: '>=5.0.0' + dependencies: + ajv: 6.12.6 + dev: true + + /ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /algoliasearch@4.13.0: + resolution: {integrity: sha512-oHv4faI1Vl2s+YC0YquwkK/TsaJs79g2JFg5FDm2rKN12VItPTAeQ7hyJMHarOPPYuCnNC5kixbtcqvb21wchw==} + dependencies: + '@algolia/cache-browser-local-storage': 4.13.0 + '@algolia/cache-common': 4.13.0 + '@algolia/cache-in-memory': 4.13.0 + '@algolia/client-account': 4.13.0 + '@algolia/client-analytics': 4.13.0 + '@algolia/client-common': 4.13.0 + '@algolia/client-personalization': 4.13.0 + '@algolia/client-search': 4.13.0 + '@algolia/logger-common': 4.13.0 + '@algolia/logger-console': 4.13.0 + '@algolia/requester-browser-xhr': 4.13.0 + '@algolia/requester-common': 4.13.0 + '@algolia/requester-node-http': 4.13.0 + '@algolia/transporter': 4.13.0 + dev: false + + /ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + dependencies: + string-width: 4.2.3 + dev: true + + /ansi-colors@3.2.4: + resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} + engines: {node: '>=6'} + dev: true + + /ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + dev: true + + /ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + dev: true + + /ansi-regex@4.1.0: + resolution: {integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==} + engines: {node: '>=6'} + dev: false + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /ansi-to-html@0.6.15: + resolution: {integrity: sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + entities: 2.2.0 + dev: true + + /anymatch@2.0.0: + resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} + dependencies: + micromatch: 3.1.10 + normalize-path: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /anymatch@3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /app-root-dir@1.0.2: + resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} + dev: true + + /aproba@1.2.0: + resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} + dev: true + + /aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + dev: true + + /are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + dev: true + + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: false + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /aria-query@4.2.2: + resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} + engines: {node: '>=6.0'} + dependencies: + '@babel/runtime': 7.17.2 + '@babel/runtime-corejs3': 7.17.2 + dev: true + + /aria-query@5.0.0: + resolution: {integrity: sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==} + engines: {node: '>=6.0'} + dev: true + + /arr-diff@4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-flatten@1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-union@3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + dev: true + + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: true + + /array-includes@3.1.4: + resolution: {integrity: sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + get-intrinsic: 1.1.1 + is-string: 1.0.7 + dev: true + + /array-union@1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} + dependencies: + array-uniq: 1.0.3 + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + dev: true + + /array-unique@0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + dev: true + + /array.prototype.flat@1.2.5: + resolution: {integrity: sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + dev: true + + /array.prototype.flatmap@1.2.5: + resolution: {integrity: sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + dev: true + + /array.prototype.map@1.0.4: + resolution: {integrity: sha512-Qds9QnX7A0qISY7JT5WuJO0NJPE9CMlC6JzHQfhpqAAQQzufVRoeH7EzUY5GcPTx72voG8LV/5eo+b8Qi8hmhA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + es-array-method-boxes-properly: 1.0.0 + is-string: 1.0.7 + dev: true + + /arrify@2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + dev: true + + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true + + /asn1.js@5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + dev: true + + /assert@1.5.0: + resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} + dependencies: + object-assign: 4.1.1 + util: 0.10.3 + dev: true + + /assign-symbols@1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + dev: true + + /ast-types-flow@0.0.7: + resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} + dev: true + + /ast-types@0.14.2: + resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} + engines: {node: '>=4'} + dependencies: + tslib: 2.3.1 + dev: true + + /astring@1.8.1: + resolution: {integrity: sha512-Aj3mbwVzj7Vve4I/v2JYOPFkCGM2YS7OqQTNSxmUR+LECRpokuPgAYghePgr6SALDo5bD5DlfbSaYjOzGJZOLQ==} + hasBin: true + dev: false + + /async-each@1.0.3: + resolution: {integrity: sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==} + requiresBuild: true + dev: true + optional: true + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + /at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: true + + /atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + dev: true + + /autoprefixer@9.8.8: + resolution: {integrity: sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==} + hasBin: true + dependencies: + browserslist: 4.19.3 + caniuse-lite: 1.0.30001312 + normalize-range: 0.1.2 + num2fraction: 1.2.2 + picocolors: 0.2.1 + postcss: 7.0.39 + postcss-value-parser: 4.2.0 + dev: true + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /axe-core@4.4.1: + resolution: {integrity: sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==} + engines: {node: '>=4'} + dev: true + + /axobject-query@2.2.0: + resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} + dev: true + + /babel-eslint@10.1.0(eslint@8.10.0): + resolution: {integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==} + engines: {node: '>=6'} + deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. + peerDependencies: + eslint: '>= 4.12.1' + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.23.0 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + eslint: 8.10.0 + eslint-visitor-keys: 1.3.0 + resolve: 1.22.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-loader@8.2.3(@babel/core@7.17.5)(webpack@4.46.0): + resolution: {integrity: sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.17.5 + find-cache-dir: 3.3.2 + loader-utils: 1.4.2 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 4.46.0 + dev: true + + /babel-plugin-add-react-displayname@0.0.5: + resolution: {integrity: sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==} + dev: true + + /babel-plugin-apply-mdx-type-prop@1.6.22(@babel/core@7.12.9): + resolution: {integrity: sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==} + peerDependencies: + '@babel/core': ^7.11.6 + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.10.4 + '@mdx-js/util': 1.6.22 + dev: true + + /babel-plugin-dynamic-import-node@2.3.3: + resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} + dependencies: + object.assign: 4.1.2 + + /babel-plugin-emotion@10.2.2: + resolution: {integrity: sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==} + dependencies: + '@babel/helper-module-imports': 7.16.7 + '@emotion/hash': 0.8.0 + '@emotion/memoize': 0.7.4 + '@emotion/serialize': 0.11.16 + babel-plugin-macros: 2.8.0 + babel-plugin-syntax-jsx: 6.18.0 + convert-source-map: 1.8.0 + escape-string-regexp: 1.0.5 + find-root: 1.1.0 + source-map: 0.5.7 + dev: true + + /babel-plugin-extract-import-names@1.6.22: + resolution: {integrity: sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==} + dependencies: + '@babel/helper-plugin-utils': 7.10.4 + dev: true + + /babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.16.7 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.1.0 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-macros@2.8.0: + resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} + dependencies: + '@babel/runtime': 7.17.2 + cosmiconfig: 6.0.0 + resolve: 1.22.0 + dev: true + + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.17.2 + cosmiconfig: 7.0.1 + resolve: 1.22.0 + dev: true + + /babel-plugin-named-asset-import@0.3.8(@babel/core@7.17.5): + resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} + peerDependencies: + '@babel/core': ^7.1.0 + dependencies: + '@babel/core': 7.17.5 + dev: true + + /babel-plugin-polyfill-corejs2@0.3.1(@babel/core@7.17.5): + resolution: {integrity: sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.17.0 + '@babel/core': 7.17.5 + '@babel/helper-define-polyfill-provider': 0.3.1(@babel/core@7.17.5) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /babel-plugin-polyfill-corejs3@0.1.7(@babel/core@7.17.5): + resolution: {integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-define-polyfill-provider': 0.1.5(@babel/core@7.17.5) + core-js-compat: 3.21.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3@0.5.2(@babel/core@7.17.5): + resolution: {integrity: sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-define-polyfill-provider': 0.3.1(@babel/core@7.17.5) + core-js-compat: 3.21.1 + transitivePeerDependencies: + - supports-color + + /babel-plugin-polyfill-regenerator@0.3.1(@babel/core@7.17.5): + resolution: {integrity: sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-define-polyfill-provider': 0.3.1(@babel/core@7.17.5) + transitivePeerDependencies: + - supports-color + + /babel-plugin-react-docgen@4.2.1: + resolution: {integrity: sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==} + dependencies: + ast-types: 0.14.2 + lodash: 4.17.21 + react-docgen: 5.4.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-syntax-jsx@6.18.0: + resolution: {integrity: sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==} + dev: true + + /babel-plugin-transform-react-remove-prop-types@0.4.24: + resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} + dev: false + + /bail@1.0.5: + resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} + dev: true + + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: false + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base16@1.0.0: + resolution: {integrity: sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==} + dev: true + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /base@0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.0 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + dev: true + + /batch-processor@1.0.0: + resolution: {integrity: sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==} + dev: true + + /better-opn@2.1.1: + resolution: {integrity: sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==} + engines: {node: '>8.0.0'} + dependencies: + open: 7.4.2 + dev: true + + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + /binary-extensions@1.13.1: + resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==} + engines: {node: '>=0.10.0'} + requiresBuild: true + dev: true + optional: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + requiresBuild: true + dependencies: + file-uri-to-path: 1.0.0 + dev: true + optional: true + + /bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + + /bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + dev: true + + /bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: true + + /body-parser@1.19.2: + resolution: {integrity: sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + content-type: 1.0.4 + debug: 2.6.9 + depd: 1.1.2 + http-errors: 1.8.1 + iconv-lite: 0.4.24 + on-finished: 2.3.0 + qs: 6.9.7 + raw-body: 2.4.3 + type-is: 1.6.18 + transitivePeerDependencies: + - supports-color + dev: true + + /body-parser@1.20.0: + resolution: {integrity: sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.4 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.10.3 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + /boxen@5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + string-width: 4.2.3 + type-fest: 0.20.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: false + + /braces@2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.4 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: true + + /browser-process-hrtime@1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} + dev: false + + /browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-cipher@1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + dev: true + + /browserify-des@1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + dependencies: + cipher-base: 1.0.4 + des.js: 1.0.1 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-rsa@4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + dependencies: + bn.js: 5.2.1 + randombytes: 2.1.0 + dev: true + + /browserify-sign@4.2.2: + resolution: {integrity: sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==} + engines: {node: '>= 4'} + dependencies: + bn.js: 5.2.1 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.4 + inherits: 2.0.4 + parse-asn1: 5.1.6 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: true + + /browserify-zlib@0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + dependencies: + pako: 1.0.11 + dev: true + + /browserslist@4.19.3: + resolution: {integrity: sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001312 + electron-to-chromium: 1.4.74 + escalade: 3.1.1 + node-releases: 2.0.2 + picocolors: 1.0.0 + + /bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: true + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: true + + /buffer@4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + isarray: 1.0.0 + dev: true + + /builtin-status-codes@3.0.0: + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + dev: true + + /bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + dev: true + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: true + + /c8@7.11.0: + resolution: {integrity: sha512-XqPyj1uvlHMr+Y1IeRndC2X5P7iJzJlEJwBpCdBbq2JocXOgJfr+JVfJkyNMGROke5LfKrhSFXGFXnwnRJAUJw==} + engines: {node: '>=10.12.0'} + hasBin: true + 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: 8.1.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + dev: true + + /cacache@12.0.4: + resolution: {integrity: sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==} + dependencies: + bluebird: 3.7.2 + chownr: 1.1.4 + figgy-pudding: 3.5.2 + glob: 7.2.0 + graceful-fs: 4.2.9 + infer-owner: 1.0.4 + lru-cache: 5.1.1 + mississippi: 3.0.0 + mkdirp: 0.5.5 + move-concurrently: 1.0.1 + promise-inflight: 1.0.1(bluebird@3.7.2) + rimraf: 2.7.1 + ssri: 6.0.2 + unique-filename: 1.1.1 + y18n: 4.0.3 + dev: true + + /cacache@15.3.0: + resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} + engines: {node: '>= 10'} + dependencies: + '@npmcli/fs': 1.1.1 + '@npmcli/move-file': 1.1.2 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 7.2.0 + infer-owner: 1.0.4 + lru-cache: 6.0.0 + 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(bluebird@3.7.2) + rimraf: 3.0.2 + ssri: 8.0.1 + tar: 6.1.11 + unique-filename: 1.1.1 + transitivePeerDependencies: + - bluebird + dev: true + + /cache-base@1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.0 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + dev: true + + /call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + + /call-me-maybe@1.0.1: + resolution: {integrity: sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==} + dev: true + + /caller-callsite@2.0.0: + resolution: {integrity: sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==} + engines: {node: '>=4'} + dependencies: + callsites: 2.0.0 + dev: false + + /caller-path@2.0.0: + resolution: {integrity: sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==} + engines: {node: '>=4'} + dependencies: + caller-callsite: 2.0.0 + dev: false + + /callsites@2.0.0: + resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==} + engines: {node: '>=4'} + dev: false + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.3.1 + dev: true + + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + + /caniuse-lite@1.0.30001312: + resolution: {integrity: sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==} + + /caniuse-lite@1.0.30001561: + resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==} + + /capture-exit@2.0.0: + resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} + engines: {node: 6.* || 8.* || >= 10.*} + dependencies: + rsvp: 4.8.5 + dev: true + + /case-sensitive-paths-webpack-plugin@2.4.0: + resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} + engines: {node: '>=4'} + dev: true + + /ccount@1.1.0: + resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} + dev: true + + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + dev: false + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /character-entities-html4@1.1.4: + resolution: {integrity: sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==} + dev: true + + /character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + dev: false + + /character-entities-legacy@1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + dev: true + + /character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + dev: false + + /character-entities@1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} + dev: true + + /character-entities@2.0.1: + resolution: {integrity: sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ==} + dev: false + + /character-reference-invalid@1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + dev: true + + /character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + dev: false + + /charcodes@0.2.0: + resolution: {integrity: sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==} + engines: {node: '>=6'} + dev: true + + /chokidar@2.1.8: + resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} + deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies + requiresBuild: true + dependencies: + anymatch: 2.0.0 + async-each: 1.0.3 + braces: 2.3.2 + glob-parent: 3.1.0 + inherits: 2.0.4 + is-binary-path: 1.0.1 + is-glob: 4.0.3 + normalize-path: 3.0.0 + path-is-absolute: 1.0.1 + readdirp: 2.2.1 + upath: 1.2.0 + optionalDependencies: + fsevents: 1.2.13 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true + + /chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + dev: true + + /chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + dev: true + + /ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + dev: true + + /cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /class-utils@0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + dev: true + + /classnames@2.3.1: + resolution: {integrity: sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==} + dev: false + + /clean-css@4.2.4: + resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} + engines: {node: '>= 4.0'} + dependencies: + source-map: 0.6.1 + dev: true + + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true + + /cli-boxes@2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + dev: true + + /cli-table3@0.6.1: + resolution: {integrity: sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==} + engines: {node: 10.* || >= 12.*} + dependencies: + string-width: 4.2.3 + optionalDependencies: + colors: 1.4.0 + dev: true + + /cliui@5.0.0: + resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} + dependencies: + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi: 5.1.0 + dev: false + + /cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + dev: true + + /clsx@1.1.1: + resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==} + engines: {node: '>=6'} + dev: true + + /collapse-white-space@1.0.6: + resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} + dev: true + + /collection-visit@1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name-list@4.15.0: + resolution: {integrity: sha512-4P3pFob8w6LNnku94oIacj8suCfhOLmY+25bmfoOwqFtuhLTD4Oux+/aUBdZLcvLK3fHrBe6XrzAU2IbwoWnQA==} + engines: {node: '>=8', npm: '>=5'} + dev: true + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /color-parse@1.4.2: + resolution: {integrity: sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==} + dependencies: + color-name: 1.1.4 + dev: true + + /color-rgba@2.4.0: + resolution: {integrity: sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q==} + dependencies: + color-parse: 1.4.2 + color-space: 2.0.0 + dev: true + + /color-space@2.0.0: + resolution: {integrity: sha512-Bu8P/usGNuVWushjxcuaGSkhT+L2KX0cvgMGMTF0KJ7lFeqonhsntT68d6Yu3uwZzCmbF7KTB9EV67AGcUXhJw==} + dev: true + + /color-string@1.9.0: + resolution: {integrity: sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: true + + /color-stringify@1.2.1: + resolution: {integrity: sha512-DMEEe6iVahjHKTYCywfkLRArls2WopRc3e6ucR/HEL5eeF2v708bc5MumOn2VWblTyJrCIBpjRSzTbmNtlMcxA==} + dependencies: + color-name: 1.1.4 + dev: true + + /color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + dev: true + + /color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + dependencies: + color-convert: 1.9.3 + color-string: 1.9.0 + dev: true + + /colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + requiresBuild: true + dev: true + optional: true + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + + /comma-separated-tokens@1.0.8: + resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} + + /comma-separated-tokens@2.0.2: + resolution: {integrity: sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==} + dev: false + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + dev: true + + /commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + dev: true + + /common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + dev: true + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: true + + /component-emitter@1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} + dev: true + + /compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: true + + /compression@1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /compute-scroll-into-view@1.0.17: + resolution: {integrity: sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + /concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.7 + typedarray: 0.0.6 + dev: true + + /confusing-browser-globals@1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + dev: true + + /console-browserify@1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + dev: true + + /console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + dev: true + + /constants-browserify@1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + dev: true + + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /content-type@1.0.4: + resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} + engines: {node: '>= 0.6'} + dev: true + + /convert-source-map@1.8.0: + resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} + dependencies: + safe-buffer: 5.1.2 + + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: true + + /cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: true + + /copy-concurrently@1.0.5: + resolution: {integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==} + dependencies: + aproba: 1.2.0 + fs-write-stream-atomic: 1.0.10 + iferr: 0.1.5 + mkdirp: 0.5.5 + rimraf: 2.7.1 + run-queue: 1.0.3 + dev: true + + /copy-descriptor@0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + dev: true + + /copy-to-clipboard@3.3.1: + resolution: {integrity: sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==} + dependencies: + toggle-selection: 1.0.6 + dev: true + + /core-js-compat@3.21.1: + resolution: {integrity: sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==} + dependencies: + browserslist: 4.19.3 + semver: 7.0.0 + + /core-js-pure@3.21.1: + resolution: {integrity: sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==} + deprecated: core-js-pure@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js-pure. + requiresBuild: true + dev: true + + /core-js@3.21.1: + resolution: {integrity: sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + requiresBuild: true + dev: true + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + /cosmiconfig@5.2.1: + resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} + engines: {node: '>=4'} + dependencies: + import-fresh: 2.0.0 + is-directory: 0.3.1 + js-yaml: 3.14.1 + parse-json: 4.0.0 + dev: false + + /cosmiconfig@6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /cosmiconfig@7.0.1: + resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /cp-file@7.0.0: + resolution: {integrity: sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==} + engines: {node: '>=8'} + dependencies: + graceful-fs: 4.2.9 + make-dir: 3.1.0 + nested-error-stacks: 2.1.0 + p-event: 4.2.0 + dev: true + + /cpy@8.1.2: + resolution: {integrity: sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==} + engines: {node: '>=8'} + dependencies: + arrify: 2.0.1 + cp-file: 7.0.0 + globby: 9.2.0 + has-glob: 1.0.0 + junk: 3.1.0 + nested-error-stacks: 2.1.0 + p-all: 2.1.0 + p-filter: 2.1.0 + p-map: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /create-ecdh@4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + dev: true + + /create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: true + + /create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: false + + /cross-fetch@3.1.5: + resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} + dependencies: + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + dev: true + + /cross-spawn@6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /crypto-browserify@3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.2 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.2 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + dev: true + + /css-color-names@0.0.4: + resolution: {integrity: sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==} + dev: true + + /css-loader@3.6.0(webpack@4.46.0): + resolution: {integrity: sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==} + engines: {node: '>= 8.9.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + camelcase: 5.3.1 + cssesc: 3.0.0 + icss-utils: 4.1.1 + loader-utils: 1.4.2 + normalize-path: 3.0.0 + postcss: 7.0.39 + postcss-modules-extract-imports: 2.0.0 + postcss-modules-local-by-default: 3.0.3 + postcss-modules-scope: 2.2.0 + postcss-modules-values: 3.0.0 + postcss-value-parser: 4.2.0 + schema-utils: 2.7.1 + semver: 6.3.1 + webpack: 4.46.0 + dev: true + + /css-select@4.2.1: + resolution: {integrity: sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==} + dependencies: + boolbase: 1.0.0 + css-what: 5.1.0 + domhandler: 4.3.0 + domutils: 2.8.0 + nth-check: 2.0.1 + dev: true + + /css-selector-parser@1.4.1: + resolution: {integrity: sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==} + dev: false + + /css-what@5.1.0: + resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==} + engines: {node: '>= 6'} + dev: true + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + dev: false + + /cssom@0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + dev: false + + /cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + dependencies: + cssom: 0.3.8 + dev: false + + /csstype@2.6.19: + resolution: {integrity: sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==} + dev: true + + /csstype@3.0.10: + resolution: {integrity: sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==} + + /cyclist@1.0.1: + resolution: {integrity: sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==} + dev: true + + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true + + /data-urls@2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} + dependencies: + abab: 2.0.6 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + dev: false + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: false + + /decimal.js@10.3.1: + resolution: {integrity: sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==} + dev: false + + /decode-named-character-reference@1.0.1: + resolution: {integrity: sha512-YV/0HQHreRwKb7uBopyIkLG17jG6Sv2qUchk9qSoVJ2f+flwRsPNBO0hAnjt6mTNYUT+vw9Gy2ihXg4sUWPi2w==} + dependencies: + character-entities: 2.0.1 + dev: false + + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: true + + /dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dev: true + + /deep-equal@2.0.5: + resolution: {integrity: sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==} + dependencies: + call-bind: 1.0.2 + es-get-iterator: 1.1.2 + get-intrinsic: 1.1.1 + is-arguments: 1.1.1 + is-date-object: 1.0.5 + is-regex: 1.1.4 + isarray: 2.0.5 + object-is: 1.1.5 + object-keys: 1.1.1 + object.assign: 4.1.2 + regexp.prototype.flags: 1.4.1 + side-channel: 1.0.4 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.7 + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + /deep-object-diff@1.1.9: + resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} + dev: true + + /deepmerge@3.3.0: + resolution: {integrity: sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==} + engines: {node: '>=0.10.0'} + dev: false + + /deepmerge@4.2.2: + resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + engines: {node: '>=0.10.0'} + dev: true + + /define-properties@1.1.3: + resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} + engines: {node: '>= 0.4'} + dependencies: + object-keys: 1.1.1 + + /define-property@0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 0.1.6 + dev: true + + /define-property@1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + dev: true + + /define-property@2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + isobject: 3.0.1 + dev: true + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + /delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + dev: true + + /depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + dev: true + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: true + + /dequal@2.0.2: + resolution: {integrity: sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==} + engines: {node: '>=6'} + dev: false + + /des.js@1.0.1: + resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + + /destroy@1.0.4: + resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==} + dev: true + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: true + + /detab@2.0.4: + resolution: {integrity: sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==} + dependencies: + repeat-string: 1.6.1 + dev: true + + /detect-port@1.3.0: + resolution: {integrity: sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==} + engines: {node: '>= 4.2.1'} + hasBin: true + dependencies: + address: 1.1.2 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + dev: true + + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: false + + /diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + dev: false + + /diffie-hellman@5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dependencies: + bn.js: 4.12.0 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dev: true + + /dir-glob@2.2.2: + resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==} + engines: {node: '>=4'} + dependencies: + path-type: 3.0.0 + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dom-accessibility-api@0.5.13: + resolution: {integrity: sha512-R305kwb5CcMDIpSHUnLyIAp7SrSPBx6F0VfQFB3M75xVMHhXJJIdePYgbPPh1o57vCHNu5QztokWUPsLjWzFqw==} + dev: true + + /dom-converter@0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} + dependencies: + utila: 0.4.0 + dev: true + + /dom-serializer@1.3.2: + resolution: {integrity: sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==} + dependencies: + domelementtype: 2.2.0 + domhandler: 4.3.0 + entities: 2.2.0 + dev: true + + /dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + dev: true + + /domain-browser@1.2.0: + resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} + engines: {node: '>=0.4', npm: '>=1.2'} + dev: true + + /domelementtype@2.2.0: + resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==} + dev: true + + /domexception@2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + dependencies: + webidl-conversions: 5.0.0 + dev: false + + /domhandler@4.3.0: + resolution: {integrity: sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.2.0 + dev: true + + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.3.2 + domelementtype: 2.2.0 + domhandler: 4.3.0 + dev: true + + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.3.1 + dev: true + + /dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + dev: true + + /dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + dev: true + + /downshift@6.1.7(react@17.0.2): + resolution: {integrity: sha512-cVprZg/9Lvj/uhYRxELzlu1aezRcgPWBjTvspiGTVEU64gF5pRdSRKFVLcxqsZC637cLAGMbL40JavEfWnqgNg==} + peerDependencies: + react: '>=16.12.0' + dependencies: + '@babel/runtime': 7.17.2 + compute-scroll-into-view: 1.0.17 + prop-types: 15.8.1 + react: 17.0.2 + react-is: 17.0.2 + tslib: 2.3.1 + dev: true + + /duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: true + + /duplexify@3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 2.3.7 + stream-shift: 1.0.1 + dev: true + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: true + + /electron-to-chromium@1.4.74: + resolution: {integrity: sha512-DvQ20M0I4dIH8KcAo7n7E4OEeNafZ1N8z6g6ck+ALCM0ZoV6mpjaX6ekjs31zKlqPzacU3lmjG9PZEa1mQhEpQ==} + + /element-resize-detector@1.2.4: + resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} + dependencies: + batch-processor: 1.0.0 + dev: true + + /elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + + /emoji-regex@7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + dev: false + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + /emotion-theming@10.3.0(@emotion/core@10.3.1)(react@17.0.2): + resolution: {integrity: sha512-mXiD2Oj7N9b6+h/dC6oLf9hwxbtKHQjoIqtodEyL8CpkN4F3V4IK/BT4D0C7zSs4BBFOu4UlPJbvvBLa88SGEA==} + peerDependencies: + '@emotion/core': ^10.0.27 + react: '>=16.3.0' + dependencies: + '@babel/runtime': 7.17.2 + '@emotion/core': 10.3.1(react@17.0.2) + '@emotion/weak-memoize': 0.2.5 + hoist-non-react-statics: 3.3.2 + react: 17.0.2 + dev: true + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: true + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + + /endent@2.1.0: + resolution: {integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==} + dependencies: + dedent: 0.7.0 + fast-json-parse: 1.0.3 + objectorarray: 1.0.5 + dev: true + + /enhanced-resolve@4.5.0: + resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} + engines: {node: '>=6.9.0'} + dependencies: + graceful-fs: 4.2.9 + memory-fs: 0.5.0 + tapable: 1.1.3 + + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + + /errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + dependencies: + prr: 1.0.1 + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + + /error-stack-parser@2.0.7: + resolution: {integrity: sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==} + dependencies: + stackframe: 1.2.1 + dev: true + + /es-abstract@1.19.1: + resolution: {integrity: sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + get-symbol-description: 1.0.0 + has: 1.0.3 + has-symbols: 1.0.2 + internal-slot: 1.0.3 + is-callable: 1.2.4 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.1 + is-string: 1.0.7 + is-weakref: 1.0.2 + object-inspect: 1.12.0 + object-keys: 1.1.1 + object.assign: 4.1.2 + string.prototype.trimend: 1.0.4 + string.prototype.trimstart: 1.0.4 + unbox-primitive: 1.0.1 + dev: true + + /es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: true + + /es-get-iterator@1.1.2: + resolution: {integrity: sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.1 + has-symbols: 1.0.2 + is-arguments: 1.1.1 + is-map: 2.0.2 + is-set: 2.0.2 + is-string: 1.0.7 + isarray: 2.0.5 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.4 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /es5-shim@4.6.5: + resolution: {integrity: sha512-vfQ4UAai8szn0sAubCy97xnZ4sJVDD1gt/Grn736hg8D7540wemIb1YPrYZSTqlM2H69EQX1or4HU/tSwRTI3w==} + engines: {node: '>=0.4.0'} + dev: true + + /es6-shim@0.35.6: + resolution: {integrity: sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==} + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: false + + /escodegen@2.0.0: + resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + + /eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.25.4)(eslint@8.10.0): + resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + dependencies: + confusing-browser-globals: 1.0.11 + eslint: 8.10.0 + eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) + object.assign: 4.1.2 + object.entries: 1.1.5 + semver: 6.3.1 + dev: true + + /eslint-config-airbnb-typescript@16.1.4(@typescript-eslint/eslint-plugin@5.61.0)(@typescript-eslint/parser@5.61.0)(eslint-plugin-import@2.25.4)(eslint@8.10.0): + resolution: {integrity: sha512-dfm2cEaYXh4mCYd+RyJO8+PQfd5/zp8WwrCeRznly5qD9W5tal3KTjgdInYWuEAdwWnNJxWcmQ/HFiA4bfkM1g==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 + '@typescript-eslint/parser': ^5.0.0 + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.3 + dependencies: + '@typescript-eslint/eslint-plugin': 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.10.0)(typescript@4.5.5) + '@typescript-eslint/parser': 5.61.0(eslint@8.10.0)(typescript@4.5.5) + eslint: 8.10.0 + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.25.4)(eslint@8.10.0) + eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) + dev: true + + /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.25.4)(eslint-plugin-jsx-a11y@6.5.1)(eslint-plugin-react-hooks@4.3.0)(eslint-plugin-react@7.29.2)(eslint@8.10.0): + resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} + engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.3 + eslint-plugin-jsx-a11y: ^6.5.1 + eslint-plugin-react: ^7.28.0 + eslint-plugin-react-hooks: ^4.3.0 + dependencies: + eslint: 8.10.0 + eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.25.4)(eslint@8.10.0) + eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) + eslint-plugin-jsx-a11y: 6.5.1(eslint@8.10.0) + eslint-plugin-react: 7.29.2(eslint@8.10.0) + eslint-plugin-react-hooks: 4.3.0(eslint@8.10.0) + object.assign: 4.1.2 + object.entries: 1.1.5 + dev: true + + /eslint-config-next@12.1.0(eslint@8.10.0)(next@12.3.4)(typescript@4.5.5): + resolution: {integrity: sha512-tBhuUgoDITcdcM7xFvensi9I5WTI4dnvH4ETGRg1U8ZKpXrZsWQFdOKIDzR3RLP5HR3xXrLviaMM4c3zVoE/pA==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + next: '>=10.2.0' + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 12.1.0 + '@rushstack/eslint-patch': 1.1.0 + '@typescript-eslint/parser': 5.61.0(eslint@8.10.0)(typescript@4.5.5) + eslint: 8.10.0 + eslint-import-resolver-node: 0.3.6 + eslint-import-resolver-typescript: 2.5.0(eslint-plugin-import@2.25.4)(eslint@8.10.0) + eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) + eslint-plugin-jsx-a11y: 6.5.1(eslint@8.10.0) + eslint-plugin-react: 7.29.2(eslint@8.10.0) + eslint-plugin-react-hooks: 4.3.0(eslint@8.10.0) + next: 12.3.4(@babel/core@7.17.5)(react-dom@17.0.2)(react@17.0.2) + typescript: 4.5.5 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-config-prettier@8.5.0(eslint@8.10.0): + resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.10.0 + dev: true + + /eslint-import-resolver-node@0.3.6: + resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} + dependencies: + debug: 3.2.7 + resolve: 1.22.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@2.5.0(eslint-plugin-import@2.25.4)(eslint@8.10.0): + resolution: {integrity: sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==} + engines: {node: '>=4'} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + eslint: 8.10.0 + eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) + glob: 7.2.0 + is-glob: 4.0.3 + resolve: 1.22.0 + tsconfig-paths: 3.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.7.3(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@2.5.0): + resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.61.0(eslint@8.10.0)(typescript@4.5.5) + debug: 3.2.7 + eslint-import-resolver-node: 0.3.6 + eslint-import-resolver-typescript: 2.5.0(eslint-plugin-import@2.25.4)(eslint@8.10.0) + find-up: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-import@2.25.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0): + resolution: {integrity: sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.61.0(eslint@8.10.0)(typescript@4.5.5) + array-includes: 3.1.4 + array.prototype.flat: 1.2.5 + debug: 2.6.9 + doctrine: 2.1.0 + eslint: 8.10.0 + eslint-import-resolver-node: 0.3.6 + eslint-module-utils: 2.7.3(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@2.5.0) + has: 1.0.3 + is-core-module: 2.8.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.5 + resolve: 1.22.0 + tsconfig-paths: 3.12.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-jsx-a11y@6.5.1(eslint@8.10.0): + resolution: {integrity: sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.17.2 + aria-query: 4.2.2 + array-includes: 3.1.4 + ast-types-flow: 0.0.7 + axe-core: 4.4.1 + axobject-query: 2.2.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.10.0 + has: 1.0.3 + jsx-ast-utils: 3.2.1 + language-tags: 1.0.5 + minimatch: 3.1.2 + dev: true + + /eslint-plugin-prettier@4.0.0(eslint-config-prettier@8.5.0)(eslint@8.10.0)(prettier@2.4.1): + resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} + engines: {node: '>=6.0.0'} + peerDependencies: + eslint: '>=7.28.0' + eslint-config-prettier: '*' + prettier: '>=2.0.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + dependencies: + eslint: 8.10.0 + eslint-config-prettier: 8.5.0(eslint@8.10.0) + prettier: 2.4.1 + prettier-linter-helpers: 1.0.0 + dev: true + + /eslint-plugin-react-hooks@4.3.0(eslint@8.10.0): + resolution: {integrity: sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.10.0 + dev: true + + /eslint-plugin-react@7.29.2(eslint@8.10.0): + resolution: {integrity: sha512-ypEBTKOy5liFQXZWMchJ3LN0JX1uPI6n7MN7OPHKacqXAxq5gYC30TdO7wqGYQyxD1OrzpobdHC3hDmlRWDg9w==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.4 + array.prototype.flatmap: 1.2.5 + doctrine: 2.1.0 + eslint: 8.10.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.2.1 + minimatch: 3.1.2 + object.entries: 1.1.5 + object.fromentries: 2.0.5 + object.hasown: 1.1.0 + object.values: 1.1.5 + prop-types: 15.8.1 + resolve: 2.0.0-next.3 + semver: 6.3.1 + string.prototype.matchall: 4.0.6 + dev: true + + /eslint-plugin-storybook@0.5.7(eslint@8.10.0)(typescript@4.5.5): + resolution: {integrity: sha512-rko/QUHa3/hrC3W5RmPrukKawCyGeVqSuwzyLZO6aV/neyOPrgkL/LED8u6NQJSaT1qZFT+7iLQ1eE8Ce7G+aA==} + engines: {node: 12.x || 14.x || >= 16} + peerDependencies: + eslint: '>=6' + dependencies: + '@storybook/csf': 0.0.1 + '@typescript-eslint/experimental-utils': 5.13.0(eslint@8.10.0)(typescript@4.5.5) + eslint: 8.10.0 + requireindex: 1.2.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-scope@4.0.3: + resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==} + engines: {node: '>=4.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope@7.1.1: + resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-utils@3.0.0(eslint@8.10.0): + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.10.0 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + dev: true + + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys@3.3.0: + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.10.0: + resolution: {integrity: sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint/eslintrc': 1.2.0 + '@humanwhocodes/config-array': 0.9.5 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.1.1 + eslint-utils: 3.0.0(eslint@8.10.0) + eslint-visitor-keys: 3.3.0 + espree: 9.3.1 + esquery: 1.4.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 6.0.2 + globals: 13.12.1 + ignore: 5.2.0 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.1 + regexpp: 3.2.0 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + v8-compile-cache: 2.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.3.1: + resolution: {integrity: sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.7.1 + acorn-jsx: 5.3.2(acorn@8.7.1) + eslint-visitor-keys: 3.3.0 + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + /esquery@1.4.0: + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + /estree-to-babel@3.2.1: + resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==} + engines: {node: '>=8.3.0'} + dependencies: + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + c8: 7.11.0 + transitivePeerDependencies: + - supports-color + dev: true + + /estree-util-attach-comments@2.0.0: + resolution: {integrity: sha512-kT9YVRvlt2ewPp9BazfIIgXMGsXOEpOm57bK8aa4F3eOEndMml2JAETjWaG3SZYHmC6axSNIzHGY718dYwIuVg==} + dependencies: + '@types/estree': 0.0.46 + dev: false + + /estree-util-build-jsx@2.0.0: + resolution: {integrity: sha512-d49hPGqBCJF/bF06g1Ywg7zjH1mrrUdPPrixBlKBxcX4WvMYlUUJ8BkrwlzWc8/fm6XqGgk5jilhgeZBDEGwOQ==} + dependencies: + '@types/estree-jsx': 0.0.1 + estree-util-is-identifier-name: 2.0.0 + estree-walker: 3.0.1 + dev: false + + /estree-util-is-identifier-name@2.0.0: + resolution: {integrity: sha512-aXXZFVMnBBDRP81vS4YtAYJ0hUkgEsXea7lNKWCOeaAquGb1Jm2rcONPB5fpzwgbNxulTvrWuKnp9UElUGAKeQ==} + dev: false + + /estree-util-visit@1.1.0: + resolution: {integrity: sha512-3lXJ4Us9j8TUif9cWcQy81t9p5OLasnDuuhrFiqb+XstmKC1d1LmrQWYsY49/9URcfHE64mPypDBaNK9NwWDPQ==} + dependencies: + '@types/estree-jsx': 0.0.1 + '@types/unist': 2.0.6 + dev: false + + /estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + dev: false + + /estree-walker@3.0.1: + resolution: {integrity: sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==} + dev: false + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: true + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + dev: true + + /exec-sh@0.3.6: + resolution: {integrity: sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==} + dev: true + + /execa@1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} + dependencies: + cross-spawn: 6.0.5 + get-stream: 4.1.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + dev: true + + /expand-brackets@2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + dependencies: + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /express@4.17.3: + resolution: {integrity: sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.19.2 + content-disposition: 0.5.4 + content-type: 1.0.4 + cookie: 0.4.2 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 1.1.2 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.1.2 + fresh: 0.5.2 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.3.0 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.9.7 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.17.2 + serve-static: 1.14.2 + setprototypeof: 1.2.0 + statuses: 1.5.0 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + + /extend-shallow@3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: true + + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + /extglob@2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-diff@1.2.0: + resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} + dev: true + + /fast-glob@2.2.7: + resolution: {integrity: sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==} + engines: {node: '>=4.0.0'} + dependencies: + '@mrmlnc/readdir-enhanced': 2.2.1 + '@nodelib/fs.stat': 1.1.3 + glob-parent: 3.1.0 + is-glob: 4.0.3 + merge2: 1.4.1 + micromatch: 3.1.10 + transitivePeerDependencies: + - supports-color + dev: true + + /fast-glob@3.2.11: + resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.4 + dev: true + + /fast-json-parse@1.0.3: + resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==} + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + /fastq@1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + dependencies: + reusify: 1.0.4 + dev: true + + /fault@1.0.4: + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + dependencies: + format: 0.2.2 + dev: true + + /fb-watchman@2.0.1: + resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} + dependencies: + bser: 2.1.1 + dev: true + + /fbemitter@3.0.0: + resolution: {integrity: sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==} + dependencies: + fbjs: 3.0.4 + transitivePeerDependencies: + - encoding + dev: true + + /fbjs-css-vars@1.0.2: + resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + dev: true + + /fbjs@3.0.4: + resolution: {integrity: sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==} + dependencies: + cross-fetch: 3.1.5 + fbjs-css-vars: 1.0.2 + loose-envify: 1.4.0 + object-assign: 4.1.1 + promise: 7.3.1 + setimmediate: 1.0.5 + ua-parser-js: 0.7.33 + transitivePeerDependencies: + - encoding + dev: true + + /figgy-pudding@3.5.2: + resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + + /file-loader@6.2.0(webpack@4.46.0): + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.2 + schema-utils: 3.1.1 + webpack: 4.46.0 + dev: true + + /file-system-cache@1.0.5: + resolution: {integrity: sha512-w9jqeQdOeVaXBCgl4c90XJ6zI8MguJgSiC5LsLdhUu6eSCzcRHPPXUF3lkKMagpzHi+6GnDkjv9BtxMmXdvptA==} + dependencies: + bluebird: 3.7.2 + fs-extra: 0.30.0 + ramda: 0.21.0 + dev: true + + /file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + requiresBuild: true + dev: true + optional: true + + /fill-range@4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /find-cache-dir@2.1.0: + resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} + engines: {node: '>=6'} + dependencies: + commondir: 1.0.1 + make-dir: 2.1.0 + pkg-dir: 3.0.0 + dev: true + + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + + /find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: true + + /find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + dependencies: + locate-path: 2.0.0 + dev: true + + /find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.5 + rimraf: 3.0.2 + dev: true + + /flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: true + + /flatted@3.2.5: + resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} + dev: true + + /flush-write-stream@1.1.1: + resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + + /flux@4.0.3(react@17.0.2): + resolution: {integrity: sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==} + peerDependencies: + react: ^15.0.2 || ^16.0.0 || ^17.0.0 + dependencies: + fbemitter: 3.0.0 + fbjs: 3.0.4 + react: 17.0.2 + transitivePeerDependencies: + - encoding + dev: true + + /for-in@1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + dev: true + + /foreach@2.0.5: + resolution: {integrity: sha512-ZBbtRiapkZYLsqoPyZOR+uPfto0GRMNQN1GwzZtZt7iZvPPbDDQV0JF5Hx4o/QFQ5c0vyuoZ98T8RSBbopzWtA==} + dev: true + + /foreground-child@2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 3.0.7 + dev: true + + /fork-ts-checker-webpack-plugin@4.1.6(eslint@8.10.0)(typescript@4.5.5)(webpack@4.46.0): + resolution: {integrity: sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==} + engines: {node: '>=6.11.5', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@babel/code-frame': 7.22.13 + chalk: 2.4.2 + eslint: 8.10.0 + micromatch: 3.1.10 + minimatch: 3.1.2 + semver: 5.7.2 + tapable: 1.1.3 + typescript: 4.5.5 + webpack: 4.46.0 + worker-rpc: 0.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /fork-ts-checker-webpack-plugin@6.5.0(eslint@8.10.0)(typescript@4.5.5)(webpack@4.46.0): + resolution: {integrity: sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==} + engines: {node: '>=10', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@babel/code-frame': 7.22.13 + '@types/json-schema': 7.0.9 + chalk: 4.1.2 + chokidar: 3.5.3 + cosmiconfig: 6.0.0 + deepmerge: 4.2.2 + eslint: 8.10.0 + fs-extra: 9.1.0 + glob: 7.2.0 + memfs: 3.4.1 + minimatch: 3.1.2 + schema-utils: 2.7.0 + semver: 7.5.4 + tapable: 1.1.3 + typescript: 4.5.5 + webpack: 4.46.0 + dev: true + + /form-data@3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.34 + + /format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + dev: true + + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: true + + /fragment-cache@0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + dependencies: + map-cache: 0.2.2 + dev: true + + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: true + + /from2@2.3.0: + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + + /fs-extra@0.30.0: + resolution: {integrity: sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==} + dependencies: + graceful-fs: 4.2.9 + jsonfile: 2.4.0 + klaw: 1.3.1 + path-is-absolute: 1.0.1 + rimraf: 2.7.1 + dev: true + + /fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.9 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.1.6 + dev: true + + /fs-monkey@1.0.3: + resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} + dev: true + + /fs-write-stream-atomic@1.0.10: + resolution: {integrity: sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==} + dependencies: + graceful-fs: 4.2.9 + iferr: 0.1.5 + imurmurhash: 0.1.4 + readable-stream: 2.3.7 + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents@1.2.13: + resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} + engines: {node: '>= 4.0'} + os: [darwin] + deprecated: The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2 + requiresBuild: true + dependencies: + bindings: 1.5.0 + nan: 2.15.0 + dev: true + optional: true + + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + + /function.prototype.name@1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + functions-have-names: 1.2.2 + dev: true + + /functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + dev: true + + /functions-have-names@1.2.2: + resolution: {integrity: sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==} + dev: true + + /fuse.js@3.6.1: + resolution: {integrity: sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==} + engines: {node: '>=6'} + dev: true + + /gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + /get-intrinsic@1.1.1: + resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true + + /get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + dependencies: + pump: 3.0.0 + dev: true + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.1 + dev: true + + /get-value@2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + dev: true + + /github-slugger@1.4.0: + resolution: {integrity: sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==} + dev: true + + /glob-parent@3.1.0: + resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==} + dependencies: + is-glob: 3.1.0 + path-dirname: 1.0.2 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-promise@3.4.0(glob@7.2.0): + resolution: {integrity: sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==} + engines: {node: '>=4'} + peerDependencies: + glob: '*' + dependencies: + '@types/glob': 8.1.0 + glob: 7.2.0 + dev: true + + /glob-to-regexp@0.3.0: + resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==} + dev: true + + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: true + + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /glob@8.0.1: + resolution: {integrity: sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.0.1 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + + /global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + dependencies: + min-document: 2.19.0 + process: 0.11.10 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + /globals@13.12.1: + resolution: {integrity: sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis@1.0.2: + resolution: {integrity: sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.1.3 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.11 + ignore: 5.2.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby@9.2.0: + resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==} + engines: {node: '>=6'} + dependencies: + '@types/glob': 7.2.0 + array-union: 1.0.2 + dir-glob: 2.2.2 + fast-glob: 2.2.7 + glob: 7.2.0 + ignore: 4.0.6 + pify: 4.0.1 + slash: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /graceful-fs@4.2.9: + resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + dependencies: + js-yaml: 3.14.1 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + dev: false + + /gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + dependencies: + duplexer: 0.1.2 + dev: true + + /handlebars@4.7.7: + resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} + engines: {node: '>=0.4.7'} + hasBin: true + dependencies: + minimist: 1.2.7 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.15.2 + dev: true + + /has-bigints@1.0.1: + resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-glob@1.0.0: + resolution: {integrity: sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==} + engines: {node: '>=0.10.0'} + dependencies: + is-glob: 3.1.0 + dev: true + + /has-symbols@1.0.2: + resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} + engines: {node: '>= 0.4'} + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.2 + dev: true + + /has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + dev: true + + /has-value@0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + dev: true + + /has-value@1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + dev: true + + /has-values@0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + dev: true + + /has-values@1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + dev: true + + /has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + + /hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: true + + /hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + + /hast-to-hyperscript@9.0.1: + resolution: {integrity: sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==} + dependencies: + '@types/unist': 2.0.6 + comma-separated-tokens: 1.0.8 + property-information: 5.6.0 + space-separated-tokens: 1.1.5 + style-to-object: 0.3.0 + unist-util-is: 4.1.0 + web-namespaces: 1.1.4 + dev: true + + /hast-util-from-parse5@6.0.1: + resolution: {integrity: sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==} + dependencies: + '@types/parse5': 5.0.3 + hastscript: 6.0.0 + property-information: 5.6.0 + vfile: 4.2.1 + vfile-location: 3.2.0 + web-namespaces: 1.1.4 + + /hast-util-parse-selector@2.2.5: + resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} + + /hast-util-parse-selector@3.1.0: + resolution: {integrity: sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==} + dependencies: + '@types/hast': 2.3.4 + dev: false + + /hast-util-raw@6.0.1: + resolution: {integrity: sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==} + dependencies: + '@types/hast': 2.3.4 + hast-util-from-parse5: 6.0.1 + hast-util-to-parse5: 6.0.0 + html-void-elements: 1.0.5 + parse5: 6.0.1 + unist-util-position: 3.1.0 + vfile: 4.2.1 + web-namespaces: 1.1.4 + xtend: 4.0.2 + zwitch: 1.0.5 + dev: true + + /hast-util-to-estree@2.0.2: + resolution: {integrity: sha512-UQrZVeBj6A9od0lpFvqHKNSH9zvDrNoyWKbveu1a2oSCXEDUI+3bnd6BoiQLPnLrcXXn/jzJ6y9hmJTTlvf8lQ==} + dependencies: + '@types/estree-jsx': 0.0.1 + '@types/hast': 2.3.4 + '@types/unist': 2.0.6 + comma-separated-tokens: 2.0.2 + estree-util-attach-comments: 2.0.0 + estree-util-is-identifier-name: 2.0.0 + hast-util-whitespace: 2.0.0 + mdast-util-mdx-expression: 1.2.0 + mdast-util-mdxjs-esm: 1.2.0 + property-information: 6.1.1 + space-separated-tokens: 2.0.1 + style-to-object: 0.3.0 + unist-util-position: 4.0.2 + zwitch: 2.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /hast-util-to-parse5@6.0.0: + resolution: {integrity: sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==} + dependencies: + hast-to-hyperscript: 9.0.1 + property-information: 5.6.0 + web-namespaces: 1.1.4 + xtend: 4.0.2 + zwitch: 1.0.5 + dev: true + + /hast-util-whitespace@2.0.0: + resolution: {integrity: sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==} + dev: false + + /hastscript@6.0.0: + resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} + dependencies: + '@types/hast': 2.3.4 + comma-separated-tokens: 1.0.8 + hast-util-parse-selector: 2.2.5 + property-information: 5.6.0 + space-separated-tokens: 1.1.5 + + /hastscript@7.0.2: + resolution: {integrity: sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==} + dependencies: + '@types/hast': 2.3.4 + comma-separated-tokens: 2.0.2 + hast-util-parse-selector: 3.1.0 + property-information: 6.1.1 + space-separated-tokens: 2.0.1 + dev: false + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /hex-color-regex@1.1.0: + resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==} + dev: true + + /highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + dev: true + + /history@5.0.0: + resolution: {integrity: sha512-3NyRMKIiFSJmIPdq7FxkNMJkQ7ZEtVblOQ38VtKaA0zZMW1Eo6Q6W8oDKEflr1kNNTItSnk4JMCO1deeSgbLLg==} + dependencies: + '@babel/runtime': 7.17.2 + dev: true + + /history@5.3.0: + resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} + dependencies: + '@babel/runtime': 7.17.2 + dev: true + + /hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /hsl-regex@1.0.0: + resolution: {integrity: sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==} + dev: true + + /hsla-regex@1.0.0: + resolution: {integrity: sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==} + dev: true + + /html-encoding-sniffer@2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} + dependencies: + whatwg-encoding: 1.0.5 + dev: false + + /html-entities@2.3.2: + resolution: {integrity: sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==} + dev: true + + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + + /html-minifier-terser@5.1.1: + resolution: {integrity: sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==} + engines: {node: '>=6'} + hasBin: true + dependencies: + camel-case: 4.1.2 + clean-css: 4.2.4 + commander: 4.1.1 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 4.8.1 + dev: true + + /html-tags@3.1.0: + resolution: {integrity: sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==} + engines: {node: '>=8'} + dev: true + + /html-void-elements@1.0.5: + resolution: {integrity: sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==} + dev: true + + /html-webpack-plugin@4.5.2(webpack@4.46.0): + resolution: {integrity: sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==} + engines: {node: '>=6.9'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + '@types/html-minifier-terser': 5.1.2 + '@types/tapable': 1.0.8 + '@types/webpack': 4.41.32 + html-minifier-terser: 5.1.1 + loader-utils: 1.4.2 + lodash: 4.17.21 + pretty-error: 2.1.2 + tapable: 1.1.3 + util.promisify: 1.0.0 + webpack: 4.46.0 + dev: true + + /htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + dependencies: + domelementtype: 2.2.0 + domhandler: 4.3.0 + domutils: 2.8.0 + entities: 2.2.0 + dev: true + + /http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + dev: true + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: true + + /http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /https-browserify@1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + dev: true + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + + /icss-utils@4.1.1: + resolution: {integrity: sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==} + engines: {node: '>= 6'} + dependencies: + postcss: 7.0.39 + dev: true + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /iferr@0.1.5: + resolution: {integrity: sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==} + dev: true + + /ignore@4.0.6: + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} + dev: true + + /ignore@5.2.0: + resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + engines: {node: '>= 4'} + dev: true + + /import-fresh@2.0.0: + resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} + engines: {node: '>=4'} + dependencies: + caller-path: 2.0.0 + resolve-from: 3.0.0 + dev: false + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits@2.0.1: + resolution: {integrity: sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==} + dev: true + + /inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /inline-style-parser@0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + + /internal-slot@1.0.3: + resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.1.1 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + + /interpret@2.2.0: + resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} + engines: {node: '>= 0.10'} + dev: true + + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: true + + /ip@1.1.5: + resolution: {integrity: sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA==} + dev: true + + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: true + + /is-absolute-url@3.0.3: + resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} + engines: {node: '>=8'} + dev: true + + /is-accessor-descriptor@0.1.6: + resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-accessor-descriptor@1.0.0: + resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: true + + /is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + dev: true + + /is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + dev: false + + /is-alphanumeric@1.0.0: + resolution: {integrity: sha512-ZmRL7++ZkcMOfDuWZuMJyIVLr2keE1o/DeNWh1EmgqGhUcV+9BIVsx0BcSBOHTZqzjs4+dISzr2KAeBEWGgXeA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + dependencies: + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 + dev: true + + /is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + dev: false + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + /is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.1 + dev: true + + /is-binary-path@1.0.1: + resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==} + engines: {node: '>=0.10.0'} + requiresBuild: true + dependencies: + binary-extensions: 1.13.1 + dev: true + optional: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + dev: true + + /is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + + /is-callable@1.2.4: + resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} + engines: {node: '>= 0.4'} + dev: true + + /is-ci@2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true + dependencies: + ci-info: 2.0.0 + dev: true + + /is-color-stop@1.1.0: + resolution: {integrity: sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==} + dependencies: + css-color-names: 0.0.4 + hex-color-regex: 1.1.0 + hsl-regex: 1.0.0 + hsla-regex: 1.0.0 + rgb-regex: 1.0.1 + rgba-regex: 1.0.0 + dev: true + + /is-core-module@2.8.1: + resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} + dependencies: + has: 1.0.3 + + /is-data-descriptor@0.1.4: + resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-data-descriptor@1.0.0: + resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + dev: true + + /is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + dev: false + + /is-descriptor@0.1.6: + resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 0.1.6 + is-data-descriptor: 0.1.4 + kind-of: 5.1.0 + dev: true + + /is-descriptor@1.0.2: + resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 1.0.0 + is-data-descriptor: 1.0.0 + kind-of: 6.0.3 + dev: true + + /is-directory@0.3.1: + resolution: {integrity: sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==} + engines: {node: '>=0.10.0'} + dev: false + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-dom@1.1.0: + resolution: {integrity: sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==} + dependencies: + is-object: 1.0.2 + is-window: 1.0.2 + dev: true + + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + /is-extendable@1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: 2.0.4 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + dev: false + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + dev: true + + /is-glob@3.1.0: + resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-hexadecimal@1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + dev: true + + /is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + dev: false + + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: true + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.6: + resolution: {integrity: sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number@3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-object@1.0.2: + resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} + dev: true + + /is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj@4.0.0: + resolution: {integrity: sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==} + engines: {node: '>=12'} + dev: false + + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: true + + /is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: false + + /is-reference@3.0.0: + resolution: {integrity: sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q==} + dependencies: + '@types/estree': 0.0.51 + dev: false + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: true + + /is-shared-array-buffer@1.0.1: + resolution: {integrity: sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==} + dev: true + + /is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.2 + dev: true + + /is-typed-array@1.1.8: + resolution: {integrity: sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-abstract: 1.19.1 + foreach: 2.0.5 + has-tostringtag: 1.0.0 + dev: true + + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: true + + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.1 + dev: true + + /is-whitespace-character@1.0.4: + resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} + dev: true + + /is-window@1.0.2: + resolution: {integrity: sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg==} + dev: true + + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-word-character@1.0.4: + resolution: {integrity: sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==} + dev: true + + /is-wsl@1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isobject@2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + dependencies: + isarray: 1.0.0 + dev: true + + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: true + + /isobject@4.0.0: + resolution: {integrity: sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==} + engines: {node: '>=0.10.0'} + dev: true + + /istanbul-lib-coverage@3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-instrument@5.1.0: + resolution: {integrity: sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.17.5 + '@babel/parser': 7.23.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-report@3.0.0: + resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} + engines: {node: '>=8'} + dependencies: + istanbul-lib-coverage: 3.2.0 + make-dir: 3.1.0 + supports-color: 7.2.0 + dev: true + + /istanbul-reports@3.1.4: + resolution: {integrity: sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.0 + dev: true + + /iterate-iterator@1.0.2: + resolution: {integrity: sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==} + dev: true + + /iterate-value@1.0.2: + resolution: {integrity: sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==} + dependencies: + es-get-iterator: 1.1.2 + iterate-iterator: 1.0.2 + dev: true + + /jest-haste-map@26.6.2: + resolution: {integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==} + engines: {node: '>= 10.14.2'} + dependencies: + '@jest/types': 26.6.2 + '@types/graceful-fs': 4.1.5 + '@types/node': 17.0.21 + anymatch: 3.1.2 + fb-watchman: 2.0.1 + graceful-fs: 4.2.9 + jest-regex-util: 26.0.0 + jest-serializer: 26.6.2 + jest-util: 26.6.2 + jest-worker: 26.6.2 + micromatch: 4.0.4 + sane: 4.1.0 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-mock@27.5.1: + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 17.0.21 + dev: true + + /jest-regex-util@26.0.0: + resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==} + engines: {node: '>= 10.14.2'} + dev: true + + /jest-serializer@26.6.2: + resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} + engines: {node: '>= 10.14.2'} + dependencies: + '@types/node': 17.0.21 + graceful-fs: 4.2.9 + dev: true + + /jest-util@26.6.2: + resolution: {integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==} + engines: {node: '>= 10.14.2'} + dependencies: + '@jest/types': 26.6.2 + '@types/node': 17.0.21 + chalk: 4.1.2 + graceful-fs: 4.2.9 + is-ci: 2.0.0 + micromatch: 4.0.4 + dev: true + + /jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 17.0.21 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: true + + /js-string-escape@1.0.1: + resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} + engines: {node: '>= 0.8'} + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + + /jsdom@16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: 2.0.6 + acorn: 8.7.1 + acorn-globals: 6.0.0 + cssom: 0.4.4 + cssstyle: 2.3.0 + data-urls: 2.0.0 + decimal.js: 10.3.1 + domexception: 2.0.1 + escodegen: 2.0.0 + form-data: 3.0.1 + html-encoding-sniffer: 2.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.0 + parse5: 6.0.1 + saxes: 5.0.1 + symbol-tree: 3.2.4 + tough-cookie: 4.0.0 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 2.0.0 + webidl-conversions: 6.1.0 + whatwg-encoding: 1.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + ws: 7.5.7 + xml-name-validator: 3.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + /json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.7 + + /json5@2.2.0: + resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + minimist: 1.2.7 + + /jsonfile@2.4.0: + resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} + optionalDependencies: + graceful-fs: 4.2.9 + dev: true + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.9 + dev: true + + /jsx-ast-utils@3.2.1: + resolution: {integrity: sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.4 + object.assign: 4.1.2 + dev: true + + /junk@3.1.0: + resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} + engines: {node: '>=8'} + dev: true + + /kind-of@3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of@4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of@5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + /klaw@1.3.1: + resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} + optionalDependencies: + graceful-fs: 4.2.9 + dev: true + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true + + /kleur@4.1.4: + resolution: {integrity: sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==} + engines: {node: '>=6'} + dev: false + + /klona@2.0.5: + resolution: {integrity: sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==} + engines: {node: '>= 8'} + dev: true + + /language-subtag-registry@0.3.21: + resolution: {integrity: sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==} + dev: true + + /language-tags@1.0.5: + resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} + dependencies: + language-subtag-registry: 0.3.21 + dev: true + + /lazy-universal-dotenv@3.0.1: + resolution: {integrity: sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==} + engines: {node: '>=6.0.0', npm: '>=6.0.0', yarn: '>=1.0.0'} + dependencies: + '@babel/runtime': 7.17.2 + app-root-dir: 1.0.2 + core-js: 3.21.1 + dotenv: 8.6.0 + dotenv-expand: 5.1.0 + dev: true + + /levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /linaria@2.3.1(@babel/core@7.17.5): + resolution: {integrity: sha512-6MdNb2S31ueMK4vYWmC9SSSgKMpknbszdLqu/kC4Vm9ezpR0j3BumdJIWnRLfUfNNhqdnDJwjfR5QX0Uhi9hHw==} + hasBin: true + peerDependencies: + '@babel/core': '>=7' + dependencies: + '@babel/core': 7.17.5 + '@babel/generator': 7.23.0 + '@babel/plugin-proposal-export-namespace-from': 7.16.7(@babel/core@7.17.5) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.17.5) + '@babel/plugin-transform-modules-commonjs': 7.16.8(@babel/core@7.17.5) + '@babel/plugin-transform-runtime': 7.17.0(@babel/core@7.17.5) + '@babel/plugin-transform-template-literals': 7.16.7(@babel/core@7.17.5) + '@babel/template': 7.22.15 + '@emotion/is-prop-valid': 0.8.8 + babel-plugin-transform-react-remove-prop-types: 0.4.24 + cosmiconfig: 5.2.1 + debug: 4.3.4 + enhanced-resolve: 4.5.0 + glob: 7.2.0 + loader-utils: 1.4.2 + mkdirp: 0.5.5 + normalize-path: 3.0.0 + postcss: 7.0.39 + react-is: 16.13.1 + rollup-pluginutils: 2.8.2 + source-map: 0.6.1 + strip-ansi: 5.2.0 + stylis: 3.5.4 + yargs: 13.3.2 + transitivePeerDependencies: + - supports-color + dev: false + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /loader-runner@2.4.0: + resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + dev: true + + /loader-utils@1.4.2: + resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==} + engines: {node: '>=4.0.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.2 + + /loader-utils@2.0.0: + resolution: {integrity: sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.0 + dev: true + + /loader-utils@2.0.2: + resolution: {integrity: sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.0 + dev: true + + /locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + dev: true + + /locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: true + + /lodash.curry@4.1.1: + resolution: {integrity: sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==} + dev: true + + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + /lodash.flow@3.5.0: + resolution: {integrity: sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==} + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + /longest-streak@2.0.4: + resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==} + dev: true + + /longest-streak@3.0.1: + resolution: {integrity: sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==} + dev: false + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.3.1 + dev: true + + /lowlight@1.20.0: + resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} + dependencies: + fault: 1.0.4 + highlight.js: 10.7.3 + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /lz-string@1.4.4: + resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==} + hasBin: true + dev: true + + /make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + dependencies: + pify: 4.0.1 + semver: 5.7.2 + dev: true + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: true + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: false + + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + dev: true + + /map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-or-similar@1.5.0: + resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + dev: true + + /map-visit@1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + dependencies: + object-visit: 1.0.1 + dev: true + + /markdown-escapes@1.0.4: + resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==} + dev: true + + /markdown-extensions@1.1.1: + resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} + engines: {node: '>=0.10.0'} + dev: false + + /markdown-table@2.0.0: + resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} + dependencies: + repeat-string: 1.6.1 + dev: true + + /markdown-table@3.0.2: + resolution: {integrity: sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==} + dev: false + + /markdown-to-jsx@7.1.6(react@17.0.2): + resolution: {integrity: sha512-1wrIGZYwIG2gR3yfRmbr4FlQmhaAKoKTpRo4wur4fp9p0njU1Hi7vR8fj0AUKKIcPduiJmPprzmCB5B/GvlC7g==} + engines: {node: '>= 10'} + peerDependencies: + react: '>= 0.14.0' + dependencies: + react: 17.0.2 + dev: true + + /material-colors@1.2.6: + resolution: {integrity: sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==} + dev: true + + /md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /mdast-squeeze-paragraphs@4.0.0: + resolution: {integrity: sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==} + dependencies: + unist-util-remove: 2.1.0 + dev: true + + /mdast-util-compact@2.0.1: + resolution: {integrity: sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==} + dependencies: + unist-util-visit: 2.0.3 + dev: true + + /mdast-util-definitions@4.0.0: + resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} + dependencies: + unist-util-visit: 2.0.3 + dev: true + + /mdast-util-definitions@5.1.0: + resolution: {integrity: sha512-5hcR7FL2EuZ4q6lLMUK5w4lHT2H3vqL9quPvYZ/Ku5iifrirfMHiGdhxdXMUbUkDmz5I+TYMd7nbaxUhbQkfpQ==} + dependencies: + '@types/mdast': 3.0.10 + '@types/unist': 2.0.6 + unist-util-visit: 3.1.0 + dev: false + + /mdast-util-directive@2.2.1: + resolution: {integrity: sha512-yZRRuaulzc6bM4IOyZfkOrVs+9Sf1BC+rldRXJyl/Ej6S/6ewQQ9jt75HvEoqZZ4m9ealVTHiS4MP2GRUE7INA==} + dependencies: + '@types/mdast': 3.0.10 + '@types/unist': 2.0.6 + mdast-util-to-markdown: 1.3.0 + parse-entities: 4.0.0 + stringify-entities: 4.0.2 + unist-util-visit-parents: 5.1.0 + dev: false + + /mdast-util-find-and-replace@2.1.0: + resolution: {integrity: sha512-1w1jbqAd13oU78QPBf5223+xB+37ecNtQ1JElq2feWols5oEYAl+SgNDnOZipe7NfLemoEt362yUS15/wip4mw==} + dependencies: + escape-string-regexp: 5.0.0 + unist-util-is: 5.1.1 + unist-util-visit-parents: 4.1.1 + dev: false + + /mdast-util-from-markdown@1.2.0: + resolution: {integrity: sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==} + dependencies: + '@types/mdast': 3.0.10 + '@types/unist': 2.0.6 + decode-named-character-reference: 1.0.1 + mdast-util-to-string: 3.1.0 + micromark: 3.0.10 + micromark-util-decode-numeric-character-reference: 1.0.0 + micromark-util-decode-string: 1.0.2 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + unist-util-stringify-position: 3.0.2 + uvu: 0.5.3 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-autolink-literal@1.0.2: + resolution: {integrity: sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==} + dependencies: + '@types/mdast': 3.0.10 + ccount: 2.0.1 + mdast-util-find-and-replace: 2.1.0 + micromark-util-character: 1.1.0 + dev: false + + /mdast-util-gfm-footnote@1.0.1: + resolution: {integrity: sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-to-markdown: 1.3.0 + micromark-util-normalize-identifier: 1.0.0 + dev: false + + /mdast-util-gfm-strikethrough@1.0.1: + resolution: {integrity: sha512-zKJbEPe+JP6EUv0mZ0tQUyLQOC+FADt0bARldONot/nefuISkaZFlmVK4tU6JgfyZGrky02m/I6PmehgAgZgqg==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-to-markdown: 1.3.0 + dev: false + + /mdast-util-gfm-table@1.0.4: + resolution: {integrity: sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==} + dependencies: + markdown-table: 3.0.2 + mdast-util-from-markdown: 1.2.0 + mdast-util-to-markdown: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-task-list-item@1.0.1: + resolution: {integrity: sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-to-markdown: 1.3.0 + dev: false + + /mdast-util-gfm@2.0.1: + resolution: {integrity: sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==} + dependencies: + mdast-util-from-markdown: 1.2.0 + mdast-util-gfm-autolink-literal: 1.0.2 + mdast-util-gfm-footnote: 1.0.1 + mdast-util-gfm-strikethrough: 1.0.1 + mdast-util-gfm-table: 1.0.4 + mdast-util-gfm-task-list-item: 1.0.1 + mdast-util-to-markdown: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx-expression@1.2.0: + resolution: {integrity: sha512-wb36oi09XxqO9RVqgfD+xo8a7xaNgS+01+k3v0GKW0X0bYbeBmUZz22Z/IJ8SuphVlG+DNgNo9VoEaUJ3PKfJQ==} + dependencies: + '@types/estree-jsx': 0.0.1 + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + mdast-util-from-markdown: 1.2.0 + mdast-util-to-markdown: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdx-jsx@2.0.1: + resolution: {integrity: sha512-oPC7/smPBf7vxnvIYH5y3fPo2lw1rdrswFfSb4i0GTAXRUQv7JUU/t/hbp07dgGdUFTSDOHm5DNamhNg/s2Hrg==} + dependencies: + '@types/estree-jsx': 0.0.1 + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + ccount: 2.0.1 + mdast-util-to-markdown: 1.3.0 + parse-entities: 4.0.0 + stringify-entities: 4.0.2 + unist-util-remove-position: 4.0.1 + unist-util-stringify-position: 3.0.2 + vfile-message: 3.1.2 + dev: false + + /mdast-util-mdx@2.0.0: + resolution: {integrity: sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==} + dependencies: + mdast-util-mdx-expression: 1.2.0 + mdast-util-mdx-jsx: 2.0.1 + mdast-util-mdxjs-esm: 1.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-mdxjs-esm@1.2.0: + resolution: {integrity: sha512-IPpX9GBzAIbIRCjbyeLDpMhACFb0wxTIujuR3YElB8LWbducUdMgRJuqs/Vg8xQ1bIAMm7lw8L+YNtua0xKXRw==} + dependencies: + '@types/estree-jsx': 0.0.1 + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + mdast-util-from-markdown: 1.2.0 + mdast-util-to-markdown: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-to-hast@10.0.1: + resolution: {integrity: sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==} + dependencies: + '@types/mdast': 3.0.10 + '@types/unist': 2.0.6 + mdast-util-definitions: 4.0.0 + mdurl: 1.0.1 + unist-builder: 2.0.3 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + dev: true + + /mdast-util-to-hast@12.1.1: + resolution: {integrity: sha512-qE09zD6ylVP14jV4mjLIhDBOrpFdShHZcEsYvvKGABlr9mGbV7mTlRWdoFxL/EYSTNDiC9GZXy7y8Shgb9Dtzw==} + dependencies: + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + '@types/mdurl': 1.0.2 + mdast-util-definitions: 5.1.0 + mdurl: 1.0.1 + micromark-util-sanitize-uri: 1.0.0 + unist-builder: 3.0.0 + unist-util-generated: 2.0.0 + unist-util-position: 4.0.2 + unist-util-visit: 4.1.0 + dev: false + + /mdast-util-to-markdown@1.3.0: + resolution: {integrity: sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==} + dependencies: + '@types/mdast': 3.0.10 + '@types/unist': 2.0.6 + longest-streak: 3.0.1 + mdast-util-to-string: 3.1.0 + micromark-util-decode-string: 1.0.2 + unist-util-visit: 4.1.0 + zwitch: 2.0.2 + dev: false + + /mdast-util-to-string@1.1.0: + resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} + dev: true + + /mdast-util-to-string@3.1.0: + resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==} + dev: false + + /mdurl@1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: true + + /memfs@3.4.1: + resolution: {integrity: sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.3 + dev: true + + /memoizerific@1.11.3: + resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + dependencies: + map-or-similar: 1.5.0 + dev: true + + /memory-fs@0.4.1: + resolution: {integrity: sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==} + dependencies: + errno: 0.1.8 + readable-stream: 2.3.7 + dev: true + + /memory-fs@0.5.0: + resolution: {integrity: sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==} + engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} + dependencies: + errno: 0.1.8 + readable-stream: 2.3.7 + + /merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: true + + /microevent.ts@0.1.1: + resolution: {integrity: sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==} + dev: true + + /micromark-core-commonmark@1.0.6: + resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} + dependencies: + decode-named-character-reference: 1.0.1 + micromark-factory-destination: 1.0.0 + micromark-factory-label: 1.0.2 + micromark-factory-space: 1.0.0 + micromark-factory-title: 1.0.2 + micromark-factory-whitespace: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-chunked: 1.0.0 + micromark-util-classify-character: 1.0.0 + micromark-util-html-tag-name: 1.0.0 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-resolve-all: 1.0.0 + micromark-util-subtokenize: 1.0.2 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.3 + dev: false + + /micromark-extension-directive@2.1.1: + resolution: {integrity: sha512-+7MYZ3a10cpPrQRg3530srFMSBx0EL7gQaJ3ekguOQFSlJHLikW15AphBmNxvCNdRSWTX1R8RepzjKQra8INQw==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-factory-whitespace: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + parse-entities: 4.0.0 + uvu: 0.5.3 + dev: false + + /micromark-extension-gfm-autolink-literal@1.0.3: + resolution: {integrity: sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-sanitize-uri: 1.0.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.3 + dev: false + + /micromark-extension-gfm-footnote@1.0.4: + resolution: {integrity: sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==} + dependencies: + micromark-core-commonmark: 1.0.6 + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-sanitize-uri: 1.0.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.3 + dev: false + + /micromark-extension-gfm-strikethrough@1.0.4: + resolution: {integrity: sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==} + dependencies: + micromark-util-chunked: 1.0.0 + micromark-util-classify-character: 1.0.0 + micromark-util-resolve-all: 1.0.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.3 + dev: false + + /micromark-extension-gfm-table@1.0.5: + resolution: {integrity: sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.3 + dev: false + + /micromark-extension-gfm-tagfilter@1.0.1: + resolution: {integrity: sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==} + dependencies: + micromark-util-types: 1.0.2 + dev: false + + /micromark-extension-gfm-task-list-item@1.0.3: + resolution: {integrity: sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.3 + dev: false + + /micromark-extension-gfm@2.0.1: + resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==} + dependencies: + micromark-extension-gfm-autolink-literal: 1.0.3 + micromark-extension-gfm-footnote: 1.0.4 + micromark-extension-gfm-strikethrough: 1.0.4 + micromark-extension-gfm-table: 1.0.5 + micromark-extension-gfm-tagfilter: 1.0.1 + micromark-extension-gfm-task-list-item: 1.0.3 + micromark-util-combine-extensions: 1.0.0 + micromark-util-types: 1.0.2 + dev: false + + /micromark-extension-mdx-expression@1.0.3: + resolution: {integrity: sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==} + dependencies: + micromark-factory-mdx-expression: 1.0.6 + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-events-to-acorn: 1.0.4 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.3 + dev: false + + /micromark-extension-mdx-jsx@1.0.3: + resolution: {integrity: sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==} + dependencies: + '@types/acorn': 4.0.6 + estree-util-is-identifier-name: 2.0.0 + micromark-factory-mdx-expression: 1.0.6 + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.3 + vfile-message: 3.1.2 + dev: false + + /micromark-extension-mdx-md@1.0.0: + resolution: {integrity: sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==} + dependencies: + micromark-util-types: 1.0.2 + dev: false + + /micromark-extension-mdxjs-esm@1.0.2: + resolution: {integrity: sha512-bIaxblNIM+CCaJvp3L/V+168l79iuNmxEiTU6i3vB0YuDW+rumV64BFMxvhfRDxaJxQE1zD5vTPdyLBbW4efGA==} + dependencies: + micromark-core-commonmark: 1.0.6 + micromark-util-character: 1.1.0 + micromark-util-events-to-acorn: 1.0.4 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + unist-util-position-from-estree: 1.1.1 + uvu: 0.5.3 + vfile-message: 3.1.2 + dev: false + + /micromark-extension-mdxjs@1.0.0: + resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==} + dependencies: + acorn: 8.7.1 + acorn-jsx: 5.3.2(acorn@8.7.1) + micromark-extension-mdx-expression: 1.0.3 + micromark-extension-mdx-jsx: 1.0.3 + micromark-extension-mdx-md: 1.0.0 + micromark-extension-mdxjs-esm: 1.0.2 + micromark-util-combine-extensions: 1.0.0 + micromark-util-types: 1.0.2 + dev: false + + /micromark-factory-destination@1.0.0: + resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-factory-label@1.0.2: + resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.3 + dev: false + + /micromark-factory-mdx-expression@1.0.6: + resolution: {integrity: sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-events-to-acorn: 1.0.4 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + unist-util-position-from-estree: 1.1.1 + uvu: 0.5.3 + vfile-message: 3.1.2 + dev: false + + /micromark-factory-space@1.0.0: + resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-types: 1.0.2 + dev: false + + /micromark-factory-title@1.0.2: + resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.3 + dev: false + + /micromark-factory-whitespace@1.0.0: + resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==} + dependencies: + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-character@1.1.0: + resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==} + dependencies: + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-chunked@1.0.0: + resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==} + dependencies: + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-classify-character@1.0.0: + resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-combine-extensions@1.0.0: + resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==} + dependencies: + micromark-util-chunked: 1.0.0 + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-decode-numeric-character-reference@1.0.0: + resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==} + dependencies: + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-decode-string@1.0.2: + resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==} + dependencies: + decode-named-character-reference: 1.0.1 + micromark-util-character: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.0.0 + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-encode@1.0.1: + resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==} + dev: false + + /micromark-util-events-to-acorn@1.0.4: + resolution: {integrity: sha512-dpo8ecREK5s/KMph7jJ46RLM6g7N21CMc9LAJQbDLdbQnTpijigkSJPTIfLXZ+h5wdXlcsQ+b6ufAE9v76AdgA==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 0.0.50 + estree-util-visit: 1.1.0 + micromark-util-types: 1.0.2 + uvu: 0.5.3 + vfile-message: 3.1.2 + dev: false + + /micromark-util-html-tag-name@1.0.0: + resolution: {integrity: sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==} + dev: false + + /micromark-util-normalize-identifier@1.0.0: + resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==} + dependencies: + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-resolve-all@1.0.0: + resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==} + dependencies: + micromark-util-types: 1.0.2 + dev: false + + /micromark-util-sanitize-uri@1.0.0: + resolution: {integrity: sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==} + dependencies: + micromark-util-character: 1.1.0 + micromark-util-encode: 1.0.1 + micromark-util-symbol: 1.0.1 + dev: false + + /micromark-util-subtokenize@1.0.2: + resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==} + dependencies: + micromark-util-chunked: 1.0.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.3 + dev: false + + /micromark-util-symbol@1.0.1: + resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==} + dev: false + + /micromark-util-types@1.0.2: + resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==} + dev: false + + /micromark@3.0.10: + resolution: {integrity: sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==} + dependencies: + '@types/debug': 4.1.7 + debug: 4.3.4 + decode-named-character-reference: 1.0.1 + micromark-core-commonmark: 1.0.6 + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-chunked: 1.0.0 + micromark-util-combine-extensions: 1.0.0 + micromark-util-decode-numeric-character-reference: 1.0.0 + micromark-util-encode: 1.0.1 + micromark-util-normalize-identifier: 1.0.0 + micromark-util-resolve-all: 1.0.0 + micromark-util-sanitize-uri: 1.0.0 + micromark-util-subtokenize: 1.0.2 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.3 + transitivePeerDependencies: + - supports-color + dev: false + + /micromatch@3.1.10: + resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 6.0.3 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /micromatch@4.0.4: + resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /miller-rabin@4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + dev: true + + /mime-db@1.51.0: + resolution: {integrity: sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==} + engines: {node: '>= 0.6'} + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: true + + /mime-types@2.1.34: + resolution: {integrity: sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.51.0 + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + dev: true + + /min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + dependencies: + dom-walk: 0.1.2 + dev: true + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: true + + /minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch@5.0.1: + resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: false + + /minimist@1.2.7: + resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + + /minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.1.6 + dev: true + + /minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.1.6 + dev: true + + /minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + dependencies: + minipass: 3.1.6 + dev: true + + /minipass@3.1.6: + resolution: {integrity: sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + dev: true + + /minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.1.6 + yallist: 4.0.0 + dev: true + + /mississippi@3.0.0: + resolution: {integrity: sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==} + engines: {node: '>=4.0.0'} + dependencies: + concat-stream: 1.6.2 + duplexify: 3.7.1 + end-of-stream: 1.4.4 + flush-write-stream: 1.1.1 + from2: 2.3.0 + parallel-transform: 1.2.0 + pump: 3.0.0 + pumpify: 1.5.1 + stream-each: 1.2.3 + through2: 2.0.5 + dev: true + + /mixin-deep@1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + dev: true + + /mkdirp@0.5.5: + resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} + hasBin: true + dependencies: + minimist: 1.2.7 + + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /move-concurrently@1.0.1: + resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==} + dependencies: + aproba: 1.2.0 + copy-concurrently: 1.0.5 + fs-write-stream-atomic: 1.0.10 + mkdirp: 0.5.5 + rimraf: 2.7.1 + run-queue: 1.0.3 + dev: true + + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: false + + /mrmime@1.0.0: + resolution: {integrity: sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==} + engines: {node: '>=10'} + dev: true + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true + + /ms@2.1.1: + resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /nan@2.15.0: + resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==} + requiresBuild: true + dev: true + optional: true + + /nanoid@3.3.1: + resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /nanomatch@1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /nearest-color@0.4.4: + resolution: {integrity: sha512-orhcaIORC10tf41Ld2wwlcC+FaAavHG87JHWB3eHH5p7v2k9Tzym2XNEZzLAm5YJwGv6Q38WWc7SOb+Qfu/4NQ==} + dev: true + + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: true + + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /nested-error-stacks@2.1.0: + resolution: {integrity: sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==} + dev: true + + /next-compose-plugins@2.2.1: + resolution: {integrity: sha512-OjJ+fV15FXO2uQXQagLD4C0abYErBjyjE0I0FHpOEIB8upw0hg1ldFP6cqHTJBH1cZqy96OeR3u1dJ+Ez2D4Bg==} + dev: true + + /next-linaria@0.11.0(linaria@2.3.1): + resolution: {integrity: sha512-JoVY9gF8d8NXRWfGMCIqh1m0uLvFV7wQA2kz8mzU4diHe3/VuNuXXwnogJOK9JMvhK1RD36/0eKiCbbeGI2mTw==} + peerDependencies: + linaria: '*' + dependencies: + linaria: 2.3.1(@babel/core@7.17.5) + dev: false + + /next-mdx-remote@4.0.2(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-1cZM2xm+G1FyYodGt92lCXisP0owPeppVHeH5TIaXUGdt6ENBZYOxLNFaVl9fkS9wP/s2sLcC9m2c1iLH2H4rA==} + engines: {node: '>=14', npm: '>=7'} + peerDependencies: + react: '>=16.x <=17.x' + react-dom: '>=16.x <=17.x' + dependencies: + '@mdx-js/mdx': 2.1.0 + '@mdx-js/react': 2.1.1(react@17.0.2) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + vfile: 5.3.2 + vfile-matter: 3.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /next-remote-watch@1.0.0: + resolution: {integrity: sha512-kV+pglCwcnKyqJIXPHUUrnZr9d3rCqCIEQWBkFYC02GDXHyKVmcFytoY6q0+wMIQqh/izIAQL1x6OKXZhksjLA==} + hasBin: true + dependencies: + body-parser: 1.20.0 + chalk: 4.1.2 + chokidar: 3.5.3 + commander: 5.1.0 + express: 4.17.3 + transitivePeerDependencies: + - supports-color + dev: true + + /next-sitemap@2.5.20(next@12.3.4): + resolution: {integrity: sha512-Qbm4N2WGA6VHemFN0C9PNWQav9RKwMEbVrNgVvDQhG0sDBmNBgKii54WklOjCvVJVHgQPgtXLBhlNaJGS+RVQA==} + engines: {node: '>=14.18'} + hasBin: true + peerDependencies: + next: '*' + dependencies: + '@corex/deepmerge': 2.6.148 + minimist: 1.2.7 + next: 12.3.4(@babel/core@7.17.5)(react-dom@17.0.2)(react@17.0.2) + dev: true + + /next@12.3.4(@babel/core@7.17.5)(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-VcyMJUtLZBGzLKo3oMxrEF0stxh8HwuW976pAzlHhI3t8qJ4SROjCrSh1T24bhrbjw55wfZXAbXPGwPt5FLRfQ==} + engines: {node: '>=12.22.0'} + hasBin: true + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^6.0.0 || ^7.0.0 + react: ^17.0.2 || ^18.0.0-0 + react-dom: ^17.0.2 || ^18.0.0-0 + sass: ^1.3.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + dependencies: + '@next/env': 12.3.4 + '@swc/helpers': 0.4.11 + caniuse-lite: 1.0.30001561 + postcss: 8.4.14 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + styled-jsx: 5.0.7(@babel/core@7.17.5)(react@17.0.2) + use-sync-external-store: 1.2.0(react@17.0.2) + optionalDependencies: + '@next/swc-android-arm-eabi': 12.3.4 + '@next/swc-android-arm64': 12.3.4 + '@next/swc-darwin-arm64': 12.3.4 + '@next/swc-darwin-x64': 12.3.4 + '@next/swc-freebsd-x64': 12.3.4 + '@next/swc-linux-arm-gnueabihf': 12.3.4 + '@next/swc-linux-arm64-gnu': 12.3.4 + '@next/swc-linux-arm64-musl': 12.3.4 + '@next/swc-linux-x64-gnu': 12.3.4 + '@next/swc-linux-x64-musl': 12.3.4 + '@next/swc-win32-arm64-msvc': 12.3.4 + '@next/swc-win32-ia32-msvc': 12.3.4 + '@next/swc-win32-x64-msvc': 12.3.4 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + /nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + dev: true + + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.3.1 + dev: true + + /node-dir@0.1.17: + resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} + engines: {node: '>= 0.10.5'} + dependencies: + minimatch: 3.1.2 + dev: true + + /node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: true + + /node-libs-browser@2.2.1: + resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==} + dependencies: + assert: 1.5.0 + browserify-zlib: 0.2.0 + buffer: 4.9.2 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + crypto-browserify: 3.12.0 + domain-browser: 1.2.0 + events: 3.3.0 + https-browserify: 1.0.0 + os-browserify: 0.3.0 + path-browserify: 0.0.1 + process: 0.11.10 + punycode: 1.4.1 + querystring-es3: 0.2.1 + readable-stream: 2.3.7 + stream-browserify: 2.0.2 + stream-http: 2.8.3 + string_decoder: 1.3.0 + timers-browserify: 2.0.12 + tty-browserify: 0.0.0 + url: 0.11.0 + util: 0.11.1 + vm-browserify: 1.1.2 + dev: true + + /node-releases@2.0.2: + resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==} + + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.0 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + requiresBuild: true + dependencies: + remove-trailing-separator: 1.1.0 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + dependencies: + path-key: 2.0.1 + dev: true + + /npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + dev: true + + /nth-check@2.0.1: + resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==} + dependencies: + boolbase: 1.0.0 + + /num2fraction@1.2.2: + resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==} + dev: true + + /nwsapi@2.2.0: + resolution: {integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==} + dev: false + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /object-copy@0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + dev: true + + /object-inspect@1.12.0: + resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==} + dev: true + + /object-is@1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + /object-visit@1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.assign@4.1.2: + resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + has-symbols: 1.0.2 + object-keys: 1.1.1 + + /object.entries@1.1.5: + resolution: {integrity: sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + dev: true + + /object.fromentries@2.0.5: + resolution: {integrity: sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + dev: true + + /object.getownpropertydescriptors@2.1.3: + resolution: {integrity: sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==} + engines: {node: '>= 0.8'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + dev: true + + /object.hasown@1.1.0: + resolution: {integrity: sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==} + dependencies: + define-properties: 1.1.3 + es-abstract: 1.19.1 + dev: true + + /object.pick@1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.values@1.1.5: + resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + dev: true + + /objectorarray@1.0.5: + resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} + dev: true + + /on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: true + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: true + + /on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + + /opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + dev: true + + /optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.4 + + /optionator@0.9.1: + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.4 + dev: true + + /os-browserify@0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + dev: true + + /overlayscrollbars@1.13.1: + resolution: {integrity: sha512-gIQfzgGgu1wy80EB4/6DaJGHMEGmizq27xHIESrzXq0Y/J0Ay1P3DWk6tuVmEPIZH15zaBlxeEJOqdJKmowHCQ==} + dev: true + + /p-all@2.1.0: + resolution: {integrity: sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==} + engines: {node: '>=6'} + dependencies: + p-map: 2.1.0 + dev: true + + /p-event@4.2.0: + resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} + engines: {node: '>=8'} + dependencies: + p-timeout: 3.2.0 + dev: true + + /p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + dependencies: + p-map: 2.1.0 + dev: true + + /p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: true + + /p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + dependencies: + p-try: 1.0.0 + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + dependencies: + p-limit: 1.3.0 + dev: true + + /p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + dev: true + + /p-map@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + dependencies: + aggregate-error: 3.1.0 + dev: true + + /p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + dev: true + + /p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + dependencies: + p-finally: 1.0.0 + dev: true + + /p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + dev: true + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + /pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + dev: true + + /parallel-transform@1.2.0: + resolution: {integrity: sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==} + dependencies: + cyclist: 1.0.1 + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.3.1 + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-asn1@5.1.6: + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + dependencies: + asn1.js: 5.4.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.2 + safe-buffer: 5.2.1 + dev: true + + /parse-entities@2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + dependencies: + character-entities: 1.2.4 + character-entities-legacy: 1.1.4 + character-reference-invalid: 1.1.4 + is-alphanumerical: 1.0.4 + is-decimal: 1.0.4 + is-hexadecimal: 1.0.4 + dev: true + + /parse-entities@4.0.0: + resolution: {integrity: sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==} + dependencies: + '@types/unist': 2.0.6 + character-entities: 2.0.1 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.0.1 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + dev: false + + /parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: false + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.22.13 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /parse-numeric-range@1.3.0: + resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + dev: false + + /parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + dependencies: + parse5: 6.0.1 + dev: false + + /parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: true + + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.3.1 + dev: true + + /pascalcase@0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + dev: true + + /path-browserify@0.0.1: + resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} + dev: true + + /path-dirname@1.0.2: + resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} + requiresBuild: true + dev: true + + /path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + /path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: true + + /path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + dependencies: + pify: 3.0.0 + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + + /periscopic@3.0.4: + resolution: {integrity: sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==} + dependencies: + estree-walker: 3.0.1 + is-reference: 3.0.0 + dev: false + + /picocolors@0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: true + + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + + /pirates@4.0.5: + resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} + engines: {node: '>= 6'} + dev: true + + /pkg-dir@3.0.0: + resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} + engines: {node: '>=6'} + dependencies: + find-up: 3.0.0 + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /pkg-dir@5.0.0: + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + dev: true + + /pnp-webpack-plugin@1.6.4(typescript@4.5.5): + resolution: {integrity: sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==} + engines: {node: '>=6'} + dependencies: + ts-pnp: 1.2.0(typescript@4.5.5) + transitivePeerDependencies: + - typescript + dev: true + + /polished@4.1.4: + resolution: {integrity: sha512-Nq5Mbza+Auo7N3sQb1QMFaQiDO+4UexWuSGR7Cjb4Sw11SZIJcrrFtiZ+L0jT9MBsUsxDboHVASbCLbE1rnECg==} + engines: {node: '>=10'} + dependencies: + '@babel/runtime': 7.17.2 + dev: true + + /posix-character-classes@0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + dev: true + + /postcss-flexbugs-fixes@4.2.1: + resolution: {integrity: sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==} + dependencies: + postcss: 7.0.39 + dev: true + + /postcss-loader@4.3.0(postcss@7.0.39)(webpack@4.46.0): + resolution: {integrity: sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==} + engines: {node: '>= 10.13.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^4.0.0 || ^5.0.0 + dependencies: + cosmiconfig: 7.0.1 + klona: 2.0.5 + loader-utils: 2.0.2 + postcss: 7.0.39 + schema-utils: 3.1.1 + semver: 7.5.4 + webpack: 4.46.0 + dev: true + + /postcss-modules-extract-imports@2.0.0: + resolution: {integrity: sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==} + engines: {node: '>= 6'} + dependencies: + postcss: 7.0.39 + dev: true + + /postcss-modules-local-by-default@3.0.3: + resolution: {integrity: sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==} + engines: {node: '>= 6'} + dependencies: + icss-utils: 4.1.1 + postcss: 7.0.39 + postcss-selector-parser: 6.0.9 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-modules-scope@2.2.0: + resolution: {integrity: sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==} + engines: {node: '>= 6'} + dependencies: + postcss: 7.0.39 + postcss-selector-parser: 6.0.9 + dev: true + + /postcss-modules-values@3.0.0: + resolution: {integrity: sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==} + dependencies: + icss-utils: 4.1.1 + postcss: 7.0.39 + dev: true + + /postcss-selector-parser@6.0.9: + resolution: {integrity: sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss@7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} + dependencies: + picocolors: 0.2.1 + source-map: 0.6.1 + + /postcss@8.4.14: + resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + /prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.2.0 + dev: true + + /prettier@2.3.0: + resolution: {integrity: sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /prettier@2.4.1: + resolution: {integrity: sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /pretty-error@2.1.2: + resolution: {integrity: sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==} + dependencies: + lodash: 4.17.21 + renderkid: 2.0.7 + dev: true + + /pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: true + + /pretty-hrtime@1.0.3: + resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} + engines: {node: '>= 0.8'} + dev: true + + /prismjs@1.27.0: + resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} + engines: {node: '>=6'} + dev: true + + /prismjs@1.28.0: + resolution: {integrity: sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==} + engines: {node: '>=6'} + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: true + + /promise-inflight@1.0.1(bluebird@3.7.2): + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + dependencies: + bluebird: 3.7.2 + dev: true + + /promise.allsettled@1.0.5: + resolution: {integrity: sha512-tVDqeZPoBC0SlzJHzWGZ2NKAguVq2oiYj7gbggbiTvH2itHohijTp7njOUA0aQ/nl+0lr/r6egmhoYu63UZ/pQ==} + engines: {node: '>= 0.4'} + dependencies: + array.prototype.map: 1.0.4 + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + get-intrinsic: 1.1.1 + iterate-value: 1.0.2 + dev: true + + /promise.prototype.finally@3.1.3: + resolution: {integrity: sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + dev: true + + /promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + dependencies: + asap: 2.0.6 + dev: true + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + /property-information@5.6.0: + resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} + dependencies: + xtend: 4.0.2 + + /property-information@6.1.1: + resolution: {integrity: sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==} + dev: false + + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: true + + /prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + + /psl@1.8.0: + resolution: {integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==} + dev: false + + /public-encrypt@4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + dependencies: + bn.js: 4.12.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + parse-asn1: 5.1.6 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + + /pump@2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /pumpify@1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + dependencies: + duplexify: 3.7.1 + inherits: 2.0.4 + pump: 2.0.1 + dev: true + + /punycode@1.3.2: + resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} + dev: true + + /punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + dev: true + + /punycode@2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} + + /pure-color@1.3.0: + resolution: {integrity: sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==} + dev: true + + /qs@6.10.3: + resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: true + + /qs@6.9.7: + resolution: {integrity: sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==} + engines: {node: '>=0.6'} + dev: true + + /querystring-es3@0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} + dev: true + + /querystring@0.2.0: + resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + dev: true + + /querystring@0.2.1: + resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /ramda@0.21.0: + resolution: {integrity: sha512-HGd5aczYKQXGILB+abY290V7Xz62eFajpa6AtMdwEmQSakJmgSO7ks4eI3HdR34j+X2Vz4Thp9VAJbrCAMbO2w==} + dev: true + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: true + + /raw-body@2.4.3: + resolution: {integrity: sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 1.8.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: true + + /raw-body@2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: true + + /raw-loader@4.0.2(webpack@4.46.0): + resolution: {integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.2 + schema-utils: 3.1.1 + webpack: 4.46.0 + dev: true + + /react-base16-styling@0.6.0: + resolution: {integrity: sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==} + dependencies: + base16: 1.0.0 + lodash.curry: 4.1.1 + lodash.flow: 3.5.0 + pure-color: 1.3.0 + dev: true + + /react-color@2.19.3(react@17.0.2): + resolution: {integrity: sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==} + peerDependencies: + react: '*' + dependencies: + '@icons/material': 0.2.4(react@17.0.2) + lodash: 4.17.21 + lodash-es: 4.17.21 + material-colors: 1.2.6 + prop-types: 15.8.1 + react: 17.0.2 + reactcss: 1.2.3(react@17.0.2) + tinycolor2: 1.4.2 + dev: true + + /react-colorful@5.5.1(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-M1TJH2X3RXEt12sWkpa6hLc/bbYS0H6F4rIqjQZ+RxNBstpY67d9TrFXtqdZwhpmBXcCwEi7stKqFue3ZRkiOg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: true + + /react-docgen-typescript@2.2.2(typescript@4.5.5): + resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} + peerDependencies: + typescript: '>= 4.3.x' + dependencies: + typescript: 4.5.5 + dev: true + + /react-docgen@5.4.0: + resolution: {integrity: sha512-JBjVQ9cahmNlfjMGxWUxJg919xBBKAoy3hgDgKERbR+BcF4ANpDuzWAScC7j27hZfd8sJNmMPOLWo9+vB/XJEQ==} + engines: {node: '>=8.10.0'} + hasBin: true + dependencies: + '@babel/core': 7.17.5 + '@babel/generator': 7.23.0 + '@babel/runtime': 7.17.2 + ast-types: 0.14.2 + commander: 2.20.3 + doctrine: 3.0.0 + estree-to-babel: 3.2.1 + neo-async: 2.6.2 + node-dir: 0.1.17 + strip-indent: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /react-dom@17.0.2(react@17.0.2): + resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} + peerDependencies: + react: 17.0.2 + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react: 17.0.2 + scheduler: 0.20.2 + + /react-draggable@4.4.4(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-6e0WdcNLwpBx/YIDpoyd2Xb04PB0elrDrulKUgdrIlwuYvxh5Ok9M+F8cljm8kPXXs43PmMzek9RrB1b7mLMqA==} + peerDependencies: + react: '>= 16.3.0' + react-dom: '>= 16.3.0' + dependencies: + clsx: 1.1.1 + prop-types: 15.8.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + dev: true + + /react-easy-swipe@0.0.21: + resolution: {integrity: sha512-OeR2jAxdoqUMHIn/nS9fgreI5hSpgGoL5ezdal4+oO7YSSgJR8ga+PkYGJrSrJ9MKlPcQjMQXnketrD7WNmNsg==} + engines: {node: '>= 6'} + dependencies: + prop-types: 15.8.1 + dev: false + + /react-element-to-jsx-string@14.3.4(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==} + peerDependencies: + react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 + react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 + dependencies: + '@base2/pretty-print-object': 1.0.1 + is-plain-object: 5.0.0 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-is: 17.0.2 + dev: true + + /react-fast-compare@3.2.0: + resolution: {integrity: sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==} + dev: true + + /react-helmet-async@1.2.3(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-mCk2silF53Tq/YaYdkl2sB+/tDoPnaxN7dFS/6ZLJb/rhUY2EWGI5Xj2b4jHppScMqY45MbgPSwTxDchKpZ5Kw==} + peerDependencies: + react: ^16.6.0 || ^17.0.0 + react-dom: ^16.6.0 || ^17.0.0 + dependencies: + '@babel/runtime': 7.17.2 + invariant: 2.2.4 + prop-types: 15.8.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-fast-compare: 3.2.0 + shallowequal: 1.1.0 + dev: true + + /react-inspector@5.1.1(react@17.0.2): + resolution: {integrity: sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==} + peerDependencies: + react: ^16.8.4 || ^17.0.0 + dependencies: + '@babel/runtime': 7.17.2 + is-dom: 1.1.0 + prop-types: 15.8.1 + react: 17.0.2 + dev: true + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: true + + /react-lifecycles-compat@3.0.4: + resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} + dev: true + + /react-popper-tooltip@3.1.1(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ==} + peerDependencies: + react: ^16.6.0 || ^17.0.0 + react-dom: ^16.6.0 || ^17.0.0 + dependencies: + '@babel/runtime': 7.17.2 + '@popperjs/core': 2.11.2 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-popper: 2.2.5(@popperjs/core@2.11.2)(react@17.0.2) + dev: true + + /react-popper@2.2.5(@popperjs/core@2.11.2)(react@17.0.2): + resolution: {integrity: sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==} + peerDependencies: + '@popperjs/core': ^2.0.0 + react: ^16.8.0 || ^17 + dependencies: + '@popperjs/core': 2.11.2 + react: 17.0.2 + react-fast-compare: 3.2.0 + warning: 4.0.3 + dev: true + + /react-refresh@0.11.0: + resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} + engines: {node: '>=0.10.0'} + dev: true + + /react-responsive-carousel@3.2.23: + resolution: {integrity: sha512-pqJLsBaKHWJhw/ItODgbVoziR2z4lpcJg+YwmRlSk4rKH32VE633mAtZZ9kDXjy4wFO+pgUZmDKPsPe1fPmHCg==} + dependencies: + classnames: 2.3.1 + prop-types: 15.8.1 + react-easy-swipe: 0.0.21 + dev: false + + /react-router-dom@6.2.2(react-dom@17.0.2)(react@17.0.2): + resolution: {integrity: sha512-AtYEsAST7bDD4dLSQHDnk/qxWLJdad5t1HFa1qJyUrCeGgEuCSw0VB/27ARbF9Fi/W5598ujvJOm3ujUCVzuYQ==} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + dependencies: + history: 5.3.0 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + react-router: 6.2.2(react@17.0.2) + dev: true + + /react-router@6.2.2(react@17.0.2): + resolution: {integrity: sha512-/MbxyLzd7Q7amp4gDOGaYvXwhEojkJD5BtExkuKmj39VEE0m3l/zipf6h2WIB2jyAO0lI6NGETh4RDcktRm4AQ==} + peerDependencies: + react: '>=16.8' + dependencies: + history: 5.3.0 + react: 17.0.2 + dev: true + + /react-sizeme@3.0.2: + resolution: {integrity: sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==} + dependencies: + element-resize-detector: 1.2.4 + invariant: 2.2.4 + shallowequal: 1.1.0 + throttle-debounce: 3.0.1 + dev: true + + /react-syntax-highlighter@13.5.3(react@17.0.2): + resolution: {integrity: sha512-crPaF+QGPeHNIblxxCdf2Lg936NAHKhNhuMzRL3F9ct6aYXL3NcZtCL0Rms9+qVo6Y1EQLdXGypBNSbPL/r+qg==} + peerDependencies: + react: '>= 0.14.0' + dependencies: + '@babel/runtime': 7.17.2 + highlight.js: 10.7.3 + lowlight: 1.20.0 + prismjs: 1.28.0 + react: 17.0.2 + refractor: 3.6.0 + dev: true + + /react-textarea-autosize@6.1.0(react@17.0.2): + resolution: {integrity: sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A==} + peerDependencies: + react: '>=0.14.0 <17.0.0' + dependencies: + prop-types: 15.8.1 + react: 17.0.2 + dev: true + + /react-textarea-autosize@8.3.3(@types/react@17.0.39)(react@17.0.2): + resolution: {integrity: sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==} + engines: {node: '>=10'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + dependencies: + '@babel/runtime': 7.17.2 + react: 17.0.2 + use-composed-ref: 1.2.1(react@17.0.2) + use-latest: 1.2.0(@types/react@17.0.39)(react@17.0.2) + transitivePeerDependencies: + - '@types/react' + dev: true + + /react@17.0.2: + resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + + /reactcss@1.2.3(react@17.0.2): + resolution: {integrity: sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==} + peerDependencies: + react: '*' + dependencies: + lodash: 4.17.21 + react: 17.0.2 + dev: true + + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.1 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /readable-stream@2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdirp@2.2.1: + resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} + engines: {node: '>=0.10'} + requiresBuild: true + dependencies: + graceful-fs: 4.2.9 + micromatch: 3.1.10 + readable-stream: 2.3.7 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /refractor@3.6.0: + resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} + dependencies: + hastscript: 6.0.0 + parse-entities: 2.0.0 + prismjs: 1.27.0 + dev: true + + /regenerate-unicode-properties@10.0.1: + resolution: {integrity: sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true + + /regenerator-runtime@0.13.9: + resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} + dev: true + + /regenerator-transform@0.14.5: + resolution: {integrity: sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==} + dependencies: + '@babel/runtime': 7.17.2 + dev: true + + /regex-not@1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + dev: true + + /regexp.prototype.flags@1.4.1: + resolution: {integrity: sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /regexpp@3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true + + /regexpu-core@5.0.1: + resolution: {integrity: sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.0.1 + regjsgen: 0.6.0 + regjsparser: 0.8.4 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.0.0 + dev: true + + /regjsgen@0.6.0: + resolution: {integrity: sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==} + dev: true + + /regjsparser@0.8.4: + resolution: {integrity: sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /rehype-parse@7.0.1: + resolution: {integrity: sha512-fOiR9a9xH+Le19i4fGzIEowAbwG7idy2Jzs4mOrFWBSJ0sNUgy0ev871dwWnbOo371SjgjG4pwzrbgSVrKxecw==} + dependencies: + hast-util-from-parse5: 6.0.1 + parse5: 6.0.1 + dev: false + + /rehype-prism@2.1.2(unified@10.1.2): + resolution: {integrity: sha512-2tnWCx6k6UP2za57j5q+ND7GlFsFDDMPwJhJOT4ge3skyBwJpNBTfIs5WC70ATxOKXFm0NpEBryai0u/4fbjIg==} + peerDependencies: + unified: ^10 + dependencies: + '@types/node': 17.0.34 + '@types/prismjs': 1.26.0 + prismjs: 1.28.0 + rehype-parse: 7.0.1 + unified: 10.1.2 + unist-util-is: 5.1.1 + unist-util-select: 4.0.1 + unist-util-visit: 4.1.0 + dev: false + + /relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + dev: true + + /remark-directive@2.0.1: + resolution: {integrity: sha512-oosbsUAkU/qmUE78anLaJePnPis4ihsE7Agp0T/oqTzvTea8pOiaYEtfInU/+xMOVTS9PN5AhGOiaIVe4GD8gw==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-directive: 2.2.1 + micromark-extension-directive: 2.1.1 + unified: 10.1.2 + dev: false + + /remark-external-links@8.0.0: + resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==} + dependencies: + extend: 3.0.2 + is-absolute-url: 3.0.3 + mdast-util-definitions: 4.0.0 + space-separated-tokens: 1.1.5 + unist-util-visit: 2.0.3 + dev: true + + /remark-footnotes@2.0.0: + resolution: {integrity: sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==} + dev: true + + /remark-gfm@3.0.1: + resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-gfm: 2.0.1 + micromark-extension-gfm: 2.0.1 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-mdx@1.6.22: + resolution: {integrity: sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==} + dependencies: + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.10.4 + '@babel/plugin-proposal-object-rest-spread': 7.12.1(@babel/core@7.12.9) + '@babel/plugin-syntax-jsx': 7.12.1(@babel/core@7.12.9) + '@mdx-js/util': 1.6.22 + is-alphabetical: 1.0.4 + remark-parse: 8.0.3 + unified: 9.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /remark-mdx@2.1.0: + resolution: {integrity: sha512-J6Yqw566SaEy6A9Neni1JJTaEjbjsM3OsKqL04TtCvZhevRtFi8CG8GIQPzvxIRKRCAOnWw1Vpk1AInB1OpNqA==} + dependencies: + mdast-util-mdx: 2.0.0 + micromark-extension-mdxjs: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-parse@10.0.1: + resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-from-markdown: 1.2.0 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-parse@8.0.3: + resolution: {integrity: sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==} + dependencies: + ccount: 1.1.0 + collapse-white-space: 1.0.6 + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 + is-whitespace-character: 1.0.4 + is-word-character: 1.0.4 + markdown-escapes: 1.0.4 + parse-entities: 2.0.0 + repeat-string: 1.6.1 + state-toggle: 1.0.3 + trim: 0.0.1 + trim-trailing-lines: 1.1.4 + unherit: 1.1.3 + unist-util-remove-position: 2.0.1 + vfile-location: 3.2.0 + xtend: 4.0.2 + dev: true + + /remark-prism@1.3.6: + resolution: {integrity: sha512-yYSXJ2MEK2DeD9UKDKFkQPcVqRx6aX2FYD1kE27ScogpZ/BBO8MoOO6gf/AKqfXvKGnP51wqvDEBmPseypgaug==} + dependencies: + classnames: 2.3.1 + css-selector-parser: 1.4.1 + escape-html: 1.0.3 + jsdom: 16.7.0 + parse-numeric-range: 1.3.0 + parse5: 6.0.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + prismjs: 1.28.0 + unist-util-map: 2.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: false + + /remark-rehype@10.1.0: + resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + dependencies: + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + mdast-util-to-hast: 12.1.1 + unified: 10.1.2 + dev: false + + /remark-slug@6.1.0: + resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} + dependencies: + github-slugger: 1.4.0 + mdast-util-to-string: 1.1.0 + unist-util-visit: 2.0.3 + dev: true + + /remark-squeeze-paragraphs@4.0.0: + resolution: {integrity: sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==} + dependencies: + mdast-squeeze-paragraphs: 4.0.0 + dev: true + + /remark-stringify@8.1.1: + resolution: {integrity: sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==} + dependencies: + ccount: 1.1.0 + is-alphanumeric: 1.0.0 + is-decimal: 1.0.4 + is-whitespace-character: 1.0.4 + longest-streak: 2.0.4 + markdown-escapes: 1.0.4 + markdown-table: 2.0.0 + mdast-util-compact: 2.0.1 + parse-entities: 2.0.0 + repeat-string: 1.6.1 + state-toggle: 1.0.3 + stringify-entities: 3.1.0 + unherit: 1.1.3 + xtend: 4.0.2 + dev: true + + /remark-unwrap-images@3.0.1: + resolution: {integrity: sha512-5VUY0n+J9lPTPfkct5S3/SbutryBjp8J/4mbgtlkDrOk3h8jde0hyqdYUJOoJKherZezS08tjd6i4+nnQ+wl5w==} + dependencies: + '@types/mdast': 3.0.10 + hast-util-whitespace: 2.0.0 + unified: 10.1.2 + unist-util-visit: 4.1.0 + dev: false + + /remark@12.0.1: + resolution: {integrity: sha512-gS7HDonkdIaHmmP/+shCPejCEEW+liMp/t/QwmF0Xt47Rpuhl32lLtDV1uKWvGoq+kxr5jSgg5oAIpGuyULjUw==} + dependencies: + remark-parse: 8.0.3 + remark-stringify: 8.1.1 + unified: 9.2.2 + dev: true + + /remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + requiresBuild: true + dev: true + + /renderkid@2.0.7: + resolution: {integrity: sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==} + dependencies: + css-select: 4.2.1 + dom-converter: 0.2.0 + htmlparser2: 6.1.0 + lodash: 4.17.21 + strip-ansi: 3.0.1 + dev: true + + /repeat-element@1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + dev: true + + /repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: true + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: false + + /requireindex@1.2.0: + resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} + engines: {node: '>=0.10.5'} + dev: true + + /resolve-from@3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + dev: false + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve-url@0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: true + + /resolve@1.22.0: + resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} + hasBin: true + dependencies: + is-core-module: 2.8.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + /resolve@2.0.0-next.3: + resolution: {integrity: sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==} + dependencies: + is-core-module: 2.8.1 + path-parse: 1.0.7 + dev: true + + /ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rgb-hex@3.0.0: + resolution: {integrity: sha512-8h7ZcwxCBDKvchSWbWngJuSCqJGQ6nDuLLg+QcRyQDbX9jMWt+PpPeXAhSla0GOooEomk3lCprUpGkMdsLjKyg==} + engines: {node: '>=8'} + dev: true + + /rgb-regex@1.0.1: + resolution: {integrity: sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==} + dev: true + + /rgba-regex@1.0.0: + resolution: {integrity: sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==} + dev: true + + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.0 + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.0 + dev: true + + /ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: true + + /rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + dependencies: + estree-walker: 0.6.1 + dev: false + + /rsvp@4.8.5: + resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} + engines: {node: 6.* || >= 7.*} + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /run-queue@1.0.3: + resolution: {integrity: sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==} + dependencies: + aproba: 1.2.0 + dev: true + + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: false + + /safe-buffer@5.1.1: + resolution: {integrity: sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==} + dev: true + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /safe-regex@1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + dependencies: + ret: 0.1.15 + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + /sane@4.1.0: + resolution: {integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==} + engines: {node: 6.* || 8.* || >= 10.*} + deprecated: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added + hasBin: true + dependencies: + '@cnakazawa/watch': 1.0.4 + anymatch: 2.0.0 + capture-exit: 2.0.0 + exec-sh: 0.3.6 + execa: 1.0.0 + fb-watchman: 2.0.1 + micromatch: 3.1.10 + minimist: 1.2.7 + walker: 1.0.8 + transitivePeerDependencies: + - supports-color + dev: true + + /saxes@5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} + dependencies: + xmlchars: 2.2.0 + dev: false + + /scheduler@0.20.2: + resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + + /schema-utils@1.0.0: + resolution: {integrity: sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==} + engines: {node: '>= 4'} + dependencies: + ajv: 6.12.6 + ajv-errors: 1.0.1(ajv@6.12.6) + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + + /schema-utils@2.7.0: + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.9 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + + /schema-utils@2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.9 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + + /schema-utils@3.1.1: + resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.9 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: true + + /section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + dev: false + + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + /semver@7.0.0: + resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} + hasBin: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /send@0.17.2: + resolution: {integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 1.1.2 + destroy: 1.0.4 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 1.8.1 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.3.0 + range-parser: 1.2.1 + statuses: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: true + + /serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: true + + /serialize-javascript@5.0.1: + resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} + dependencies: + randombytes: 2.1.0 + dev: true + + /serve-favicon@2.5.0: + resolution: {integrity: sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==} + engines: {node: '>= 0.8.0'} + dependencies: + etag: 1.8.1 + fresh: 0.5.2 + ms: 2.1.1 + parseurl: 1.3.3 + safe-buffer: 5.1.1 + dev: true + + /serve-static@1.14.2: + resolution: {integrity: sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.17.2 + transitivePeerDependencies: + - supports-color + dev: true + + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + /set-value@2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: true + + /setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: true + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: true + + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + dependencies: + kind-of: 6.0.3 + dev: true + + /shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + dev: true + + /shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: 1.0.0 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.1 + object-inspect: 1.12.0 + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + dependencies: + is-arrayish: 0.3.2 + dev: true + + /sirv@1.0.19: + resolution: {integrity: sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.21 + mrmime: 1.0.0 + totalist: 1.1.0 + dev: true + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + + /slash@2.0.0: + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /snapdragon-node@2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + dev: true + + /snapdragon-util@3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /snapdragon@0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /source-list-map@2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + dev: true + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /source-map-resolve@0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + dev: true + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map-url@0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + dev: true + + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + /source-map@0.7.3: + resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} + engines: {node: '>= 8'} + dev: true + + /space-separated-tokens@1.1.5: + resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} + + /space-separated-tokens@2.0.1: + resolution: {integrity: sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==} + dev: false + + /spdx-correct@3.1.1: + resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.11 + dev: true + + /spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.11 + dev: true + + /spdx-license-ids@3.0.11: + resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} + dev: true + + /split-string@3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + /ssri@6.0.2: + resolution: {integrity: sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==} + dependencies: + figgy-pudding: 3.5.2 + dev: true + + /ssri@8.0.1: + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.1.6 + dev: true + + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: true + + /stackframe@1.2.1: + resolution: {integrity: sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg==} + dev: true + + /state-toggle@1.0.3: + resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} + dev: true + + /static-extend@0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + dev: true + + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: true + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: true + + /store2@2.13.1: + resolution: {integrity: sha512-iJtHSGmNgAUx0b/MCS6ASGxb//hGrHHRgzvN+K5bvkBTN7A9RTpPSf1WSp+nPGvWCJ1jRnvY7MKnuqfoi3OEqg==} + dev: true + + /stream-browserify@2.0.2: + resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + + /stream-each@1.2.3: + resolution: {integrity: sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==} + dependencies: + end-of-stream: 1.4.4 + stream-shift: 1.0.1 + dev: true + + /stream-http@2.8.3: + resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==} + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 2.3.7 + to-arraybuffer: 1.0.1 + xtend: 4.0.2 + dev: true + + /stream-shift@1.0.1: + resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} + dev: true + + /string-width@3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + dev: false + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string.prototype.matchall@4.0.6: + resolution: {integrity: sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + get-intrinsic: 1.1.1 + has-symbols: 1.0.2 + internal-slot: 1.0.3 + regexp.prototype.flags: 1.4.1 + side-channel: 1.0.4 + dev: true + + /string.prototype.padend@3.1.3: + resolution: {integrity: sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + dev: true + + /string.prototype.padstart@3.1.3: + resolution: {integrity: sha512-NZydyOMtYxpTjGqp0VN5PYUF/tsU15yDMZnUdj16qRUIUiMJkHHSDElYyQFrMu+/WloTpA7MQSiADhBicDfaoA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + es-abstract: 1.19.1 + dev: true + + /string.prototype.trimend@1.0.4: + resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /string.prototype.trimstart@1.0.4: + resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /stringify-entities@3.1.0: + resolution: {integrity: sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==} + dependencies: + character-entities-html4: 1.1.4 + character-entities-legacy: 1.1.4 + xtend: 4.0.2 + dev: true + + /stringify-entities@4.0.2: + resolution: {integrity: sha512-MTxTVcEkorNtBbNpoFJPEh0kKdM6+QbMjLbaxmvaPMmayOXdr/AIVIIJX7FReUVweRBFJfZepK4A4AKgwuFpMQ==} + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + dev: false + + /strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + dev: true + + /strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + dependencies: + ansi-regex: 4.1.0 + dev: false + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + dev: false + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + dev: true + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /style-loader@1.3.0(webpack@4.46.0): + resolution: {integrity: sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==} + engines: {node: '>= 8.9.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.2 + schema-utils: 2.7.1 + webpack: 4.46.0 + dev: true + + /style-to-object@0.3.0: + resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} + dependencies: + inline-style-parser: 0.1.1 + + /styled-jsx@5.0.7(@babel/core@7.17.5)(react@17.0.2): + resolution: {integrity: sha512-b3sUzamS086YLRuvnaDigdAewz1/EFYlHpYBP5mZovKEdQQOIIYq8lApylub3HHZ6xFjV051kkGU7cudJmrXEA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + '@babel/core': 7.17.5 + react: 17.0.2 + + /stylis@3.5.4: + resolution: {integrity: sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==} + dev: false + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + /symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: false + + /symbol.prototype.description@1.0.5: + resolution: {integrity: sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==} + engines: {node: '>= 0.11.15'} + dependencies: + call-bind: 1.0.2 + get-symbol-description: 1.0.0 + has-symbols: 1.0.2 + object.getownpropertydescriptors: 2.1.3 + dev: true + + /synchronous-promise@2.0.15: + resolution: {integrity: sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==} + dev: true + + /tapable@1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + + /tar@6.1.11: + resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==} + engines: {node: '>= 10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 3.1.6 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: true + + /telejson@5.3.3: + resolution: {integrity: sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==} + dependencies: + '@types/is-function': 1.0.1 + global: 4.4.0 + is-function: 1.0.2 + is-regex: 1.1.4 + is-symbol: 1.0.4 + isobject: 4.0.0 + lodash: 4.17.21 + memoizerific: 1.11.3 + dev: true + + /terser-webpack-plugin@1.4.5(webpack@4.46.0): + resolution: {integrity: sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==} + engines: {node: '>= 6.9.0'} + peerDependencies: + webpack: ^4.0.0 + dependencies: + cacache: 12.0.4 + find-cache-dir: 2.1.0 + is-wsl: 1.1.0 + schema-utils: 1.0.0 + serialize-javascript: 4.0.0 + source-map: 0.6.1 + terser: 4.8.1 + webpack: 4.46.0 + webpack-sources: 1.4.3 + worker-farm: 1.7.0 + dev: true + + /terser-webpack-plugin@4.2.3(webpack@4.46.0): + resolution: {integrity: sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + cacache: 15.3.0 + find-cache-dir: 3.3.2 + jest-worker: 26.6.2 + p-limit: 3.1.0 + schema-utils: 3.1.1 + serialize-javascript: 5.0.1 + source-map: 0.6.1 + terser: 5.12.0 + webpack: 4.46.0 + webpack-sources: 1.4.3 + transitivePeerDependencies: + - bluebird + dev: true + + /terser@4.8.1: + resolution: {integrity: sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + acorn: 8.7.1 + commander: 2.20.3 + source-map: 0.6.1 + source-map-support: 0.5.21 + dev: true + + /terser@5.12.0: + resolution: {integrity: sha512-R3AUhNBGWiFc77HXag+1fXpAxTAFRQTJemlJKjAgD9r8xXTpjNKqIXwHM/o7Rh+O0kUJtS3WQVdBeMKFk5sw9A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + acorn: 8.7.1 + commander: 2.20.3 + source-map: 0.7.3 + source-map-support: 0.5.21 + dev: true + + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.0 + minimatch: 3.1.2 + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /throttle-debounce@3.0.1: + resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} + engines: {node: '>=10'} + dev: true + + /through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.7 + xtend: 4.0.2 + dev: true + + /timers-browserify@2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} + dependencies: + setimmediate: 1.0.5 + dev: true + + /tinycolor2@1.4.2: + resolution: {integrity: sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==} + dev: true + + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: true + + /to-arraybuffer@1.0.1: + resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + /to-object-path@0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /to-regex-range@2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /to-regex@3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + dev: true + + /toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + dev: true + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: true + + /totalist@1.1.0: + resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==} + engines: {node: '>=6'} + dev: true + + /tough-cookie@4.0.0: + resolution: {integrity: sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==} + engines: {node: '>=6'} + dependencies: + psl: 1.8.0 + punycode: 2.1.1 + universalify: 0.1.2 + dev: false + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /tr46@2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + dependencies: + punycode: 2.1.1 + dev: false + + /trim-trailing-lines@1.1.4: + resolution: {integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==} + dev: true + + /trim@0.0.1: + resolution: {integrity: sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==} + deprecated: Use String.prototype.trim() instead + dev: true + + /trough@1.0.5: + resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} + dev: true + + /trough@2.1.0: + resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + dev: false + + /ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + dev: true + + /ts-node@10.8.0(@types/node@17.0.21)(typescript@4.5.5): + resolution: {integrity: sha512-/fNd5Qh+zTt8Vt1KbYZjRHCE9sI5i7nqfD/dzBBRDeVXZXS6kToW6R7tTU6Nd4XavFs0mAVCg29Q//ML7WsZYA==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.8 + '@tsconfig/node12': 1.0.9 + '@tsconfig/node14': 1.0.1 + '@tsconfig/node16': 1.0.2 + '@types/node': 17.0.21 + acorn: 8.7.1 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.5.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: false + + /ts-pnp@1.2.0(typescript@4.5.5): + resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} + engines: {node: '>=6'} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 4.5.5 + dev: true + + /tsconfig-paths@3.12.0: + resolution: {integrity: sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.7 + strip-bom: 3.0.0 + dev: true + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tslib@2.3.1: + resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} + dev: true + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + /tsutils@3.21.0(typescript@4.5.5): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.5.5 + dev: true + + /tty-browserify@0.0.0: + resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} + dev: true + + /type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.34 + dev: true + + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: true + + /typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: true + + /typescript@4.5.5: + resolution: {integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==} + engines: {node: '>=4.2.0'} + hasBin: true + + /ua-parser-js@0.7.33: + resolution: {integrity: sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==} + dev: true + + /uglify-js@3.15.2: + resolution: {integrity: sha512-peeoTk3hSwYdoc9nrdiEJk+gx1ALCtTjdYuKSXMTDqq7n1W7dHPqWDdSi+BPL0ni2YMeHD7hKUSdbj3TZauY2A==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /unbox-primitive@1.0.1: + resolution: {integrity: sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==} + dependencies: + function-bind: 1.1.1 + has-bigints: 1.0.1 + has-symbols: 1.0.2 + which-boxed-primitive: 1.0.2 + dev: true + + /undici@5.26.2: + resolution: {integrity: sha512-a4PDLQgLTPHVzOK+x3F79/M4GtyYPl+aX9AAK7aQxpwxDwCqkeZCScy7Gk5kWT3JtdFq1uhO3uZJdLtHI4dK9A==} + engines: {node: '>=14.0'} + dependencies: + '@fastify/busboy': 2.0.0 + dev: false + + /unfetch@4.2.0: + resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} + dev: true + + /unherit@1.1.3: + resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==} + dependencies: + inherits: 2.0.4 + xtend: 4.0.2 + dev: true + + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: true + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.0.0 + dev: true + + /unicode-match-property-value-ecmascript@2.0.0: + resolution: {integrity: sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==} + engines: {node: '>=4'} + dev: true + + /unicode-property-aliases-ecmascript@2.0.0: + resolution: {integrity: sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==} + engines: {node: '>=4'} + dev: true + + /unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + dependencies: + '@types/unist': 2.0.6 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.0.0 + trough: 2.1.0 + vfile: 5.3.2 + dev: false + + /unified@9.2.0: + resolution: {integrity: sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==} + dependencies: + '@types/unist': 2.0.6 + bail: 1.0.5 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 2.1.0 + trough: 1.0.5 + vfile: 4.2.1 + dev: true + + /unified@9.2.2: + resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} + dependencies: + '@types/unist': 2.0.6 + bail: 1.0.5 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 2.1.0 + trough: 1.0.5 + vfile: 4.2.1 + dev: true + + /union-value@1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + dev: true + + /unique-filename@1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + dependencies: + unique-slug: 2.0.2 + dev: true + + /unique-slug@2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + dependencies: + imurmurhash: 0.1.4 + dev: true + + /unist-builder@2.0.3: + resolution: {integrity: sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==} + dev: true + + /unist-builder@3.0.0: + resolution: {integrity: sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-generated@1.1.6: + resolution: {integrity: sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==} + dev: true + + /unist-util-generated@2.0.0: + resolution: {integrity: sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==} + dev: false + + /unist-util-is@4.1.0: + resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} + dev: true + + /unist-util-is@5.1.1: + resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==} + dev: false + + /unist-util-map@2.0.1: + resolution: {integrity: sha512-VdNvk4BQUUU9Rgr8iUOvclHa/iN9O+6Dt66FKij8l9OVezGG37gGWCPU5KSax1R2degqXFvl3kWTkvzL79e9tQ==} + dependencies: + '@types/mdast': 3.0.10 + object-assign: 4.1.1 + dev: false + + /unist-util-position-from-estree@1.1.1: + resolution: {integrity: sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-position@3.1.0: + resolution: {integrity: sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==} + dev: true + + /unist-util-position@4.0.2: + resolution: {integrity: sha512-Y6+plxR41dOLbyyqVDLuGWgXDmxdXslCSRYQkSDagBnOT9oFsQH0J8FzhirSklUEe0xZTT0WDnAE1gXPaDFljA==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-remove-position@2.0.1: + resolution: {integrity: sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==} + dependencies: + unist-util-visit: 2.0.3 + dev: true + + /unist-util-remove-position@4.0.1: + resolution: {integrity: sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==} + dependencies: + '@types/unist': 2.0.6 + unist-util-visit: 4.1.0 + dev: false + + /unist-util-remove@2.1.0: + resolution: {integrity: sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==} + dependencies: + unist-util-is: 4.1.0 + dev: true + + /unist-util-select@4.0.1: + resolution: {integrity: sha512-zPozyEo5vr1csbHf1TqlQrnuLVJ0tNMo63og3HrnINh2+OIDAgQpqHVr+0BMw1DIVHJV8ft/e6BZqtvD1Y5enw==} + dependencies: + '@types/unist': 2.0.6 + css-selector-parser: 1.4.1 + nth-check: 2.0.1 + unist-util-is: 5.1.1 + zwitch: 2.0.2 + dev: false + + /unist-util-stringify-position@2.0.3: + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + dependencies: + '@types/unist': 2.0.6 + + /unist-util-stringify-position@3.0.2: + resolution: {integrity: sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==} + dependencies: + '@types/unist': 2.0.6 + dev: false + + /unist-util-visit-parents@3.1.1: + resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 4.1.0 + dev: true + + /unist-util-visit-parents@4.1.1: + resolution: {integrity: sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.1.1 + dev: false + + /unist-util-visit-parents@5.1.0: + resolution: {integrity: sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.1.1 + dev: false + + /unist-util-visit@2.0.3: + resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 4.1.0 + unist-util-visit-parents: 3.1.1 + dev: true + + /unist-util-visit@3.1.0: + resolution: {integrity: sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.1.1 + unist-util-visit-parents: 4.1.1 + dev: false + + /unist-util-visit@4.1.0: + resolution: {integrity: sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==} + dependencies: + '@types/unist': 2.0.6 + unist-util-is: 5.1.1 + unist-util-visit-parents: 5.1.0 + dev: false + + /universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: false + + /universalify@2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: true + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: true + + /unset-value@1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + dev: true + + /upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + requiresBuild: true + dev: true + optional: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.1.1 + dev: true + + /urix@0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: true + + /url-loader@4.1.1(file-loader@6.2.0)(webpack@4.46.0): + resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + file-loader: '*' + webpack: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + file-loader: + optional: true + dependencies: + file-loader: 6.2.0(webpack@4.46.0) + loader-utils: 2.0.2 + mime-types: 2.1.34 + schema-utils: 3.1.1 + webpack: 4.46.0 + dev: true + + /url@0.11.0: + resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + dev: true + + /use-composed-ref@1.2.1(react@17.0.2): + resolution: {integrity: sha512-6+X1FLlIcjvFMAeAD/hcxDT8tmyrWnbSPMU0EnxQuDLIxokuFzWliXBiYZuGIx+mrAMLBw0WFfCkaPw8ebzAhw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 + dependencies: + react: 17.0.2 + dev: true + + /use-isomorphic-layout-effect@1.1.1(@types/react@17.0.39)(react@17.0.2): + resolution: {integrity: sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.39 + react: 17.0.2 + dev: true + + /use-latest@1.2.0(@types/react@17.0.39)(react@17.0.2): + resolution: {integrity: sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 17.0.39 + react: 17.0.2 + use-isomorphic-layout-effect: 1.1.1(@types/react@17.0.39)(react@17.0.2) + dev: true + + /use-sync-external-store@1.2.0(react@17.0.2): + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 17.0.2 + + /use@3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + /util.promisify@1.0.0: + resolution: {integrity: sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==} + dependencies: + define-properties: 1.1.3 + object.getownpropertydescriptors: 2.1.3 + dev: true + + /util@0.10.3: + resolution: {integrity: sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==} + dependencies: + inherits: 2.0.1 + dev: true + + /util@0.11.1: + resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==} + dependencies: + inherits: 2.0.3 + dev: true + + /utila@0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + dev: true + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: true + + /uuid-browser@3.1.0: + resolution: {integrity: sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==} + deprecated: Package no longer supported and required. Use the uuid package or crypto.randomUUID instead + dev: true + + /uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: true + + /uvu@0.5.3: + resolution: {integrity: sha512-brFwqA3FXzilmtnIyJ+CxdkInkY/i4ErvP7uV0DnUVxQcQ55reuHphorpF+tZoVHK2MniZ/VJzI7zJQoc9T9Yw==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.2 + diff: 5.0.0 + kleur: 4.1.4 + sade: 1.8.1 + dev: false + + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: false + + /v8-compile-cache@2.3.0: + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} + dev: true + + /v8-to-istanbul@8.1.1: + resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} + engines: {node: '>=10.12.0'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + convert-source-map: 1.8.0 + source-map: 0.7.3 + dev: true + + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.1.1 + spdx-expression-parse: 3.0.1 + dev: true + + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: true + + /vfile-location@3.2.0: + resolution: {integrity: sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==} + + /vfile-matter@3.0.1: + resolution: {integrity: sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==} + dependencies: + '@types/js-yaml': 4.0.9 + is-buffer: 2.0.5 + js-yaml: 4.1.0 + dev: false + + /vfile-message@2.0.4: + resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} + dependencies: + '@types/unist': 2.0.6 + unist-util-stringify-position: 2.0.3 + + /vfile-message@3.1.2: + resolution: {integrity: sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==} + dependencies: + '@types/unist': 2.0.6 + unist-util-stringify-position: 3.0.2 + dev: false + + /vfile@4.2.1: + resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} + dependencies: + '@types/unist': 2.0.6 + is-buffer: 2.0.5 + unist-util-stringify-position: 2.0.3 + vfile-message: 2.0.4 + + /vfile@5.3.2: + resolution: {integrity: sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==} + dependencies: + '@types/unist': 2.0.6 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.2 + vfile-message: 3.1.2 + dev: false + + /vm-browserify@1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + dev: true + + /w3c-hr-time@1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. + dependencies: + browser-process-hrtime: 1.0.0 + dev: false + + /w3c-xmlserializer@2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} + dependencies: + xml-name-validator: 3.0.0 + dev: false + + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 + dev: true + + /warning@4.0.3: + resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} + dependencies: + loose-envify: 1.4.0 + dev: true + + /watchpack-chokidar2@2.0.1: + resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==} + requiresBuild: true + dependencies: + chokidar: 2.1.8 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /watchpack@1.7.5: + resolution: {integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==} + dependencies: + graceful-fs: 4.2.9 + neo-async: 2.6.2 + optionalDependencies: + chokidar: 3.5.3 + watchpack-chokidar2: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /watchpack@2.3.1: + resolution: {integrity: sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.9 + dev: true + + /web-namespaces@1.1.4: + resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==} + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /webidl-conversions@5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + dev: false + + /webidl-conversions@6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + dev: false + + /webpack-bundle-analyzer@4.3.0: + resolution: {integrity: sha512-J3TPm54bPARx6QG8z4cKBszahnUglcv70+N+8gUqv2I5KOFHJbzBiLx+pAp606so0X004fxM7hqRu10MLjJifA==} + engines: {node: '>= 10.13.0'} + hasBin: true + dependencies: + acorn: 8.7.1 + acorn-walk: 8.2.0 + chalk: 4.1.2 + commander: 6.2.1 + gzip-size: 6.0.0 + lodash: 4.17.21 + opener: 1.5.2 + sirv: 1.0.19 + ws: 7.5.7 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /webpack-dev-middleware@3.7.3(webpack@4.46.0): + resolution: {integrity: sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==} + engines: {node: '>= 6'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + memory-fs: 0.4.1 + mime: 2.6.0 + mkdirp: 0.5.5 + range-parser: 1.2.1 + webpack: 4.46.0 + webpack-log: 2.0.0 + dev: true + + /webpack-filter-warnings-plugin@1.2.1(webpack@4.46.0): + resolution: {integrity: sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==} + engines: {node: '>= 4.3 < 5.0.0 || >= 5.10'} + peerDependencies: + webpack: ^2.0.0 || ^3.0.0 || ^4.0.0 + dependencies: + webpack: 4.46.0 + dev: true + + /webpack-hot-middleware@2.25.1: + resolution: {integrity: sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==} + dependencies: + ansi-html-community: 0.0.8 + html-entities: 2.3.2 + querystring: 0.2.1 + strip-ansi: 6.0.1 + dev: true + + /webpack-log@2.0.0: + resolution: {integrity: sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==} + engines: {node: '>= 6'} + dependencies: + ansi-colors: 3.2.4 + uuid: 3.4.0 + dev: true + + /webpack-sources@1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: true + + /webpack-virtual-modules@0.2.2: + resolution: {integrity: sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==} + dependencies: + debug: 3.2.7 + transitivePeerDependencies: + - supports-color + dev: true + + /webpack@4.46.0: + resolution: {integrity: sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==} + engines: {node: '>=6.11.5'} + hasBin: true + peerDependencies: + webpack-cli: '*' + webpack-command: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + webpack-command: + optional: true + dependencies: + '@webassemblyjs/ast': 1.9.0 + '@webassemblyjs/helper-module-context': 1.9.0 + '@webassemblyjs/wasm-edit': 1.9.0 + '@webassemblyjs/wasm-parser': 1.9.0 + acorn: 6.4.2 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + chrome-trace-event: 1.0.3 + enhanced-resolve: 4.5.0 + eslint-scope: 4.0.3 + json-parse-better-errors: 1.0.2 + loader-runner: 2.4.0 + loader-utils: 1.4.2 + memory-fs: 0.4.1 + micromatch: 3.1.10 + mkdirp: 0.5.5 + neo-async: 2.6.2 + node-libs-browser: 2.2.1 + schema-utils: 1.0.0 + tapable: 1.1.3 + terser-webpack-plugin: 1.4.5(webpack@4.46.0) + watchpack: 1.7.5 + webpack-sources: 1.4.3 + transitivePeerDependencies: + - supports-color + dev: true + + /whatwg-encoding@1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + dependencies: + iconv-lite: 0.4.24 + dev: false + + /whatwg-mimetype@2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + dev: false + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + + /whatwg-url@8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} + dependencies: + lodash: 4.17.21 + tr46: 2.1.0 + webidl-conversions: 6.1.0 + dev: false + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.6 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: true + + /which-module@2.0.0: + resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} + dev: false + + /which-typed-array@1.1.7: + resolution: {integrity: sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-abstract: 1.19.1 + foreach: 2.0.5 + has-tostringtag: 1.0.0 + is-typed-array: 1.1.8 + dev: true + + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + dependencies: + string-width: 4.2.3 + dev: true + + /widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + dependencies: + string-width: 4.2.3 + dev: true + + /word-wrap@1.2.4: + resolution: {integrity: sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==} + engines: {node: '>=0.10.0'} + + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + dev: true + + /worker-farm@1.7.0: + resolution: {integrity: sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==} + dependencies: + errno: 0.1.8 + dev: true + + /worker-rpc@0.1.1: + resolution: {integrity: sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==} + dependencies: + microevent.ts: 0.1.1 + dev: true + + /wrap-ansi@5.1.0: + resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} + engines: {node: '>=6'} + dependencies: + ansi-styles: 3.2.1 + string-width: 3.1.0 + strip-ansi: 5.2.0 + dev: false + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: true + + /ws@7.5.7: + resolution: {integrity: sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + /ws@8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /xml-name-validator@3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + dev: false + + /xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: false + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true + + /yargs-parser@13.1.2: + resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: false + + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + + /yargs@13.3.2: + resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} + dependencies: + cliui: 5.0.0 + find-up: 3.0.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 3.1.0 + which-module: 2.0.0 + y18n: 4.0.3 + yargs-parser: 13.1.2 + dev: false + + /yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: true + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: false + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /zwitch@1.0.5: + resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} + dev: true + + /zwitch@2.0.2: + resolution: {integrity: sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==} + dev: false diff --git a/docs/pnpm-workspace.yaml b/docs/pnpm-workspace.yaml new file mode 100644 index 0000000000..5785dce6f5 --- /dev/null +++ b/docs/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +# docs are a workspace with a single package to isolate +# it from the rest of the monorepo +packages: + - '.' diff --git a/docs/public/hardhat-ignition-images/hardhat_ignition_stages.png b/docs/public/hardhat-ignition-images/hardhat_ignition_stages.png new file mode 100644 index 0000000000..b87e083cc3 Binary files /dev/null and b/docs/public/hardhat-ignition-images/hardhat_ignition_stages.png differ diff --git a/docs/public/static/ignition-visualize-example.html b/docs/public/static/ignition-visualize-example.html new file mode 100644 index 0000000000..074dcfb970 --- /dev/null +++ b/docs/public/static/ignition-visualize-example.html @@ -0,0 +1,2057 @@ + + + + + + + Hardhat Ignition + + + + +
+

Ignition deployment loading...

+
+ + + + diff --git a/docs/public/static/privacy-policy.html b/docs/public/static/privacy-policy.html new file mode 100644 index 0000000000..37fbcecfa7 --- /dev/null +++ b/docs/public/static/privacy-policy.html @@ -0,0 +1,1956 @@ + + + + + + + + + + + + + + + + + + + + + +
+ +

Nomic Foundation Privacy Policy

+ +

Nomic Foundation (the “Nomic Foundation,” “we,” or “us”), a Swiss +Foundation, located at c/o Kaiser Odermatt & +Partner AG, Baarerstrasse 12, 6300 Zug, is a software +development foundation building open-source software to unlock developer +productivity in the Ethereum ecosystem is the controller and processor of your +personal data.

+ +

 

+ +

This Privacy Policy applies to: (i) the Nomic Foundation +website (https://nomic.foundation), the Hardhat website (https://hardhat.org/), and any other website +published by us (“website”), (ii) the Hardhat software (“Hardhat”), and +the (iii) Hardhat tools and plugins, including the hardhat runner, the hardhat vscode, the @nomicfoundation/coc-solidity, and the hardhat +network which, with any other features, tools and/or materials, domains and +subdomains, projects, made available from time to time by the Foundation (the +“Tools”), all of which are referred to as “services” in this Privacy Policy. +Users of the websites, Hardhat and the Tools are referred to collectively +as “Clients.”

+ +

 

+ +

This Privacy Policy describes what information Nomic Foundation collects, +how we use that information, and how we protect it. Nomic Foundation collects +and processes personal data in order to run our organization and offer our +services to Clients. We do not share Client information with third parties +except for the limited purposes described in this Privacy Policy.

+ +

 

+ +

By using our services, Clients understand and agree that we will collect, +process and use their information as described in this Privacy Policy, and in +compliance with the Swiss Federal Act on Data Protection (“FADP”), the Swiss +Ordinance to the Federal Act on Data Protection (“OFADP”), and the General +European Data Protection Regulation (“GDPR”). We recommend that Clients read +this Privacy Policy in full to ensure they are fully informed.

+ +

 

+ +

If you have any questions about this Privacy Policy or how we handle +personal data, please contact us at privacy@nomic.foundation or use the +contact information set out at bottom of this Privacy Policy.

+ +

 

+ +

What Personal Data Does Nomic Foundation Collect, +and Why?

+ +

The information that Nomic Foundation gathers from Clients allows us to +deliver and improve our services. For example, it allows us to communicate with +Clients, provide support, and (with Clients’ permission) monitor deployments +of Hardhat or any other website and the Tools for +performance-improvement and error-correction purposes.

+ +

 

+ +

A.        Information Our +Clients Provide

+ +

We receive and store the information our Clients +supply to us when they communicate with us by email, GitHub, and social media. +This information may include the Client’s name, company, email address, +username, postal address, and telephone number.

+ +

Personal data processed through social media is subject to their privacy +policies. You should check each social media privacy policies. The Nomic +Foundation is not responsible for the data collected by these platforms.

+ +

 

+ +

B.        Information +Automatically Collected from Clients

+ +

We also collect certain information automatically, including:

+ +

1.     Error and performance monitoring data

+ +

Hardhat collects automated error and performance monitoring data to help +Nomic Foundation fix bugs and improve the performance of our software. This +data is only collected and processed if the Client opts into this feature.

+ +

 

+ +

The information collected includes: 1) a unique cryptographic identifier +to identify data from a single user; 2) the Hardhat version number; 3) whether +Hardhat is running on a server or desktop; 4) the Client’s operating system +(e.g. Windows, Mac, or Linux); 5) whether the Hardhat task running is a +build-in or user-defined task; 6) the versions of Node.js and Sentry running on +the Client’s computer; 7) error message text; 8) stack trace data; and 9) +timestamps.

+ +

 

+ +

The Nomic Foundation uses +third-party services, Sentry and Google analytics, to collect and process this +data: i) Google +analytics: extension version, machine Id, operating system, user agent; and ii) +Sentry: extension name + version, environment, machine id as mentioned above, +tags that provide context.

+ +

In the case of Sentry, the data is anonymized before being sent to +Sentry’s servers. Any piece of data resembling a path +or a private key is removed on a best-effort basis. The data sent to Sentry is +subject to a data processing agreement limiting Sentry’s use of the data and +requiring Sentry to take appropriate security measures to protect the data.

+ +

2.     Website cookies

+ +

Like many websites, the Nomic Foundation websites use cookies to obtain +certain types of information when your web browser accesses our site. Cookies +are used most commonly to do things like tracking page +views, identifying repeat users and utilizing login tokens for a session.

+ + + + + + + + + + + + + + + + + + + + +
+

Type of Cookie

+
+

Served By

+
+

How to Control These

+
+

Session cookies: these are used to anonymously track a user’s session + on our websites to deliver a better experience.

+
+

Nomic Foundation

+
+

You can block or delete these by changing your browser settings.

+
+

Performance and Targeting cookies: These cookies collect information + that is used either in aggregate form to help us understand how our website + is being used or how effective our marketing campaigns are, or to help us + customize our website for you. Such cookies may record site and + display-related activity for a session so that a client does not see displays + that are irrelevant or have already been dismissed.

+
+

Google

+
+

Google offers a Google + Analytics Opt-Out Browser Add-on for + most browsers.

+
+

You can set or amend your web browser controls to accept or refuse + cookies. If you choose to reject cookies, you may still use our website + though your access to some functionality and areas of our website may be + restricted. As the means by which you can refuse cookies through your web + browser controls vary from browser-to-browser, you should visit your + browser's help menu for more information.

+
+ +

 

+ +

Other information we collect and analyze includes the Internet Protocol +(IP) address used to connect your computer to the Internet, computer and +connection information such as browser type, version, language, and time zone +setting, browser plug-in type and version, screen resolution, and operating +system and platform. This information is stored in log files and is collected +automatically. We collect this technical information to better understand user +needs and provide Clients with an optimal online experience.

+ +

 

+ +

We also collect aggregate usage data for our websites, which may include +browsing patterns and broad demographic information, to enable us to understand +how our websites are being used and to develop and refine them to better serve +our Clients.

+ +

 

+ +

Our Legal Bases for Processing Personal Information

+ +

For personal data under Nomic Foundation’s control, we rely on two bases +to lawfully obtain and process personal information. First, where Clients have +given us valid consent to use their data in certain ways, we rely on that +consent. Second, as described in more detail below, in certain cases we may +process information where this is necessary to meet legal obligations, such as +compliance with law enforcement subpoenas or warrants, and/or to further our +legitimate interests, so long as any such legitimate interests are not +overridden by your rights or interests.

+ +

 

+ +

How and When Do We Share Information?

+ +

Nomic Foundation does not sell your information. As set out below, we +only share information on a limited basis in order to enable us to offer our +services. We do not otherwise make Client data available +to third parties.  

+ +

 

+ +

Service Providers

+ +

We employ other organizations and service providers to perform certain +functions on our behalf. These third parties have only limited access to your +information, may use your information only to perform these tasks on our +behalf, and are obligated to Nomic Foundation not to disclose or use your +information for other purposes.

+ +

 

+ +

All Service Providers warrant to be in compliance with +the GDPR and provide sufficient security to the information they access to.

+ +

 

+ +

Our use of Service Providers includes:

+ +

·       Google: for website analytics

+ +

·       Sentry: for +collection and processing of error and performance monitoring data +for Hardhat

+ +

If you have any questions about the specific Service Providers we +currently use, please contact us at privacy@nomic.foundation or by +using the contact information set out at the bottom of this Privacy Policy.

+ +

 

+ +

Legal Compliance / Protection of the Public and Our Business / +Legitimate Interests 

+ +

We will release personal and account information: to comply with a +subpoena, court order, legal process, or other legal requirement when we +believe in good faith that such disclosure is necessary to comply with the law; +to protect, establish, or exercise our legal rights or defend against legal +claims; when we believe doing so is reasonably necessary to prevent harm to an +individual; or take action regarding illegal activities, suspected fraud, +threats to our property, or violations of our legal terms.

+ +

 

+ +

We may also share your information during an organizational transaction +like a merger or distribution of our assets to a successor organization. If +such a transaction occurs, we will provide notification of any changes to +control of your information, as well as choices you may have.

+ +

 

+ +

Children’s Privacy

+ +

The services are not intended for children under the age of 16. We do +not knowingly collect personal information from anyone under the age of +sixteen. If you are under the age of sixteen, your parent or guardian must +provide their consent for you to use the services.

+ +

 

+ +

Data Transfers

+ +

Nomic Foundation provides a voluntary service and Clients can choose whether or not they wish to use it. Consequently, when +decided to use our Services you entitled Nomic Foundation to transfer your +personal data to the Services Providers for the purposes of the data processing +described in this Privacy Policy.

+ +

 

+ +

When your data is moved from its home country to another country, the +laws and rules that protect your personal information in the country to which +your information is transferred may be different from those in the country +where you reside. Because we offer our services to people in different +countries and use technical infrastructure based in different jurisdictions, we +may need to transfer your personal information across borders in order to +deliver our services.

+ +

 

+ +

Our Services Providers are obliged to protect data privacy at least to +the same extent as ourselves. We contractually ensure that the protection of +your personal data corresponds to the applicable laws by using the standard +contractual clauses to comply with the GDPR.

+ +

 

+ +

How Secure Is Your Information?

+ +

We maintain administrative, technical, and physical safeguards designed +to protect the privacy and security of the information we maintain about you. +The connection between your computer and our website server is encrypted using +Secure Sockets Layer (SSL) software that encrypts that information.

+ +

 

+ +

We use a Digital Certificate and secure pages will be identified by a +padlock sign and “https://” in the address bar. Likewise, +all Hardhat error and performance monitoring data is transmitted over +HTTPS transport layer security (TLS)-secured connections.

+ +

 

+ +

However, no method of transmission or storage is 100% secure. As a +result, while we strive to protect your personal information, you acknowledge +that: (a) there are security and privacy limitations inherent to the Internet +which are beyond our control; and (b) security, integrity, and privacy of any and all information and data exchanged between you and +us through this Site cannot be guaranteed.

+ +

 

+ +

What Are Your Rights?

+ +

Upon request, Nomic Foundation will provide Clients with information +about whether we hold any of their personal information (“Right to +confirmation”). In certain cases, subject to relevant legal rights, Clients +have the right to object to the processing of their personal information, to +request changes, corrections, or the deletion of their personal information, +and to obtain a copy of their personal information in an easily accessible +format (“Right to access”, “Right to object”, “Right to rectification”).

+ +

 

+ +

In order to do this, Clients can contact us using the contact +information set out at the bottom of this Privacy Policy. We will respond to +every request within a reasonable timeframe and may need to take reasonable +steps to confirm identity before proceeding.

+ +

 

+ +

You can also withdraw your consent to our processing of your information +and the use of our services, and/or delete your Client +account at any time, by using the contact information below to request that +your personal information be deleted (“right to be forgotten”).

+ +

 

+ +

If you are an EU resident and believe that our processing of your +personal data is contrary to the EU General Data Protection Regulation, you +have the right to lodge a complaint with the appropriate supervisory authority.

+ +

 

+ +

If you withdraw your consent to the use or sharing of your personal +information for the purposes set out in this policy, we may not be able to +provide you with our services. Please note that in certain cases we may +continue to process your information after you have withdrawn consent and +requested that we delete your information if we have a legal basis/need to do +so.

+ +

 

+ +

Data Retention

+ +

For personal data under its control, Nomic Foundation will retain such +data only for as long as is necessary for the purposes set out in this policy, +or as needed to provide Clients with our services.

+ +

 

+ +

If a Client no longer wishes to use our +services then it may request deletion of its data at any time.

+ +

 

+ +

Notwithstanding the above, Nomic Foundation will retain and use Client +information to the extent necessary to comply with our legal obligations (for +example, if we are required to retain your information to comply with +applicable tax/revenue laws), resolve disputes, and enforce our agreements.

+ +

 

+ +

We may also retain log files for the purpose of internal analysis, for +site safety, security and fraud prevention, to improve site functionality, or +where we are legally required to retain them for longer time periods.

+ +

 

+ +

Contact Us

+ +

If you have any questions, comments or suggestions about how we handle +personal information you can contact Nomic Foundation at privacy@nomic.foundation

+ +

 

+ +
+ + + + diff --git a/docs/redirects.config.js b/docs/redirects.config.js index 0d801afd81..9eca3dc24a 100644 --- a/docs/redirects.config.js +++ b/docs/redirects.config.js @@ -18,258 +18,300 @@ const customRedirects = [ { source: "/config", destination: "/hardhat-runner/docs/config", - permanent: false + permanent: false, }, { source: "/plugins", destination: "/hardhat-runner/plugins", - permanent: false + permanent: false, }, { source: "/getting-started", destination: "/hardhat-runner/docs/getting-started#overview", - permanent: false + permanent: false, }, { source: "/links/stack-traces", destination: "/", permanent: false }, { source: "/reportbug", destination: "https://github.com/NomicFoundation/hardhat/issues/new", - permanent: false + permanent: false, }, { source: "/report-bug", destination: "https://github.com/NomicFoundation/hardhat/issues/new", - permanent: false + permanent: false, }, { source: "/console-log", destination: "/hardhat-network/#console.log", - permanent: false + permanent: false, }, { source: "/discord", destination: "https://discord.gg/TETZs2KK4k", - permanent: false + permanent: false, + }, + { + source: "/ignition-discord", + destination: "https://discord.gg/7jBkZQXB25", + permanent: false, }, { source: "/hre", destination: "/advanced/hardhat-runtime-environment", - permanent: false + permanent: false, }, { source: "/nodejs-versions", destination: "/reference/stability-guarantees#node.js-versions-support", - permanent: false + permanent: false, }, { source: "/verify-custom-networks", - destination: "/plugins/nomicfoundation-hardhat-verify#adding-support-for-other-networks", - permanent: false + destination: + "/plugins/nomicfoundation-hardhat-verify#adding-support-for-other-networks", + permanent: false, }, { source: "/verify-multiple-networks", - destination: "plugins/nomicfoundation-hardhat-verify.html#multiple-api-keys-and-alternative-block-explorers", - permanent: false + destination: + "plugins/nomicfoundation-hardhat-verify.html#multiple-api-keys-and-alternative-block-explorers", + permanent: false, }, { source: "/metamask-issue", destination: "/hardhat-network/docs/metamask-issue", - permanent: false + permanent: false, }, { source: "/migrate-from-waffle", destination: "/hardhat-runner/docs/guides/migrating-from-hardhat-waffle", - permanent: false + permanent: false, + }, + { + source: "/hardhat-runner/docs/guides/migrating-from-hardhat-waffle", + destination: "/hardhat-runner/docs/advanced/migrating-from-hardhat-waffle", + permanent: false, }, { source: "/custom-hardfork-history", - destination: "/hardhat-network/docs/guides/forking-other-networks.html#using-a-custom-hardfork-history", - permanent: false + destination: + "/hardhat-network/docs/guides/forking-other-networks.html#using-a-custom-hardfork-history", + permanent: false, }, { - source: "/solidity-survey-2022", - destination: "https://cryptpad.fr/form/#/2/form/view/HuPIRv4gvziSV0dPV1SJncKzYJXTVc8LGCaMfLUoj2c/", - permanent: false + source: "/solidity-survey-2023", + destination: + "https://cryptpad.fr/form/#/2/form/view/pV-DdryeJoYUWvW+gXsFaMNynEY7t5mUsgeD1urgwSE", + permanent: false, }, { source: "/solc-viair", - destination: "/hardhat-runner/docs/reference/solidity-support#support-for-ir-based-codegen", - permanent: false + destination: + "/hardhat-runner/docs/reference/solidity-support#support-for-ir-based-codegen", + permanent: false, + }, + { + source: "/chaining-async-matchers", + destination: + "/plugins/nomicfoundation-hardhat-chai-matchers#chaining-async-matchers", + permanent: false, + }, + { + source: "/ignition-errors", + destination: "/ignition/docs/guides/error-handling", + permanent: false, }, - // top-level component URLs { source: "/hardhat-runner", destination: "/hardhat-runner/docs/getting-started#overview", - permanent: false + permanent: false, }, { source: "/hardhat-runner/docs", destination: "/hardhat-runner/docs/getting-started#overview", - permanent: false + permanent: false, }, { source: "/hardhat-network", destination: "/hardhat-network/docs/overview", - permanent: false + permanent: false, }, { source: "/hardhat-network/docs", destination: "/hardhat-network/docs/overview", - permanent: false + permanent: false, }, { source: "/hardhat-vscode", destination: "/hardhat-vscode/docs/overview", - permanent: false + permanent: false, }, { source: "/hardhat-vscode/docs", destination: "/hardhat-vscode/docs/overview", - permanent: false + permanent: false, }, { source: "/hardhat-chai-matchers", destination: "/hardhat-chai-matchers/docs/overview", - permanent: false + permanent: false, }, { source: "/hardhat-chai-matchers/docs", destination: "/hardhat-chai-matchers/docs/overview", - permanent: false + permanent: false, }, { source: "/hardhat-network-helpers", destination: "/hardhat-network-helpers/docs/overview", - permanent: false + permanent: false, }, { source: "/hardhat-network-helpers/docs", destination: "/hardhat-network-helpers/docs/overview", - permanent: false + permanent: false, + }, + { + source: "/ignition", + destination: "/ignition/docs/getting-started#overview", + permanent: false, + }, + { + source: "/ignition/docs", + destination: "/ignition/docs/getting-started#overview", + permanent: false, }, // legacy URLs { source: "/configuration", destination: "/hardhat-runner/docs/config", - permanent: false + permanent: false, }, { source: "/guides/create-plugin", destination: "/advanced/building-plugins", - permanent: false + permanent: false, }, { source: "/guides/mainnet-forking", destination: "/hardhat-network/docs/guides/forking-other-networks", - permanent: false + permanent: false, }, { source: "/hardhat-network/guides/mainnet-forking", destination: "/hardhat-network/docs/guides/forking-other-networks", - permanent: false + permanent: false, }, { source: "/hardhat-network/reference", destination: "/hardhat-network/docs/reference", - permanent: false + permanent: false, }, { source: "/hardhat-network/explanation/mining-modes", destination: "/hardhat-network/docs/explanation/mining-modes", - permanent: false + permanent: false, }, { source: "/troubleshooting/verbose-logging", destination: "/hardhat-runner/docs/troubleshooting/verbose-logging", - permanent: false + permanent: false, }, { source: "/troubleshooting/common-problems", destination: "/hardhat-runner/docs/troubleshooting/common-problems", - permanent: false + permanent: false, }, { source: "/errors", destination: "/hardhat-runner/docs/errors", - permanent: false + permanent: false, }, { source: "/reference/stability-guarantees", destination: "/hardhat-runner/docs/reference/stability-guarantees", - permanent: false + permanent: false, }, { source: "/reference/solidity-support", destination: "/hardhat-runner/docs/reference/solidity-support", - permanent: false + permanent: false, }, { source: "/plugins/:slug", destination: "/hardhat-runner/plugins/:slug", - permanent: false + permanent: false, }, { source: "/hardhat-runner/docs/guides/shorthand", destination: "/hardhat-runner/docs/guides/command-line-completion", - permanent: false + permanent: false, }, // guides redirects, exceptions go first { - source: "/guides/:slug(hardhat-runtime-environment|create-task|scripts|building-plugins|vscode-tests)", + source: + "/guides/:slug(hardhat-runtime-environment|create-task|scripts|building-plugins|vscode-tests)", destination: "/hardhat-runner/docs/advanced/:slug", - permanent: false + permanent: false, }, { - source: "/guides/:slug(waffle-testing|truffle-testing|truffle-migration|ganache-tests)", + source: + "/guides/:slug(waffle-testing|truffle-testing|truffle-migration|ganache-tests)", destination: "/hardhat-runner/docs/other-guides/:slug", - permanent: false + permanent: false, }, { source: "/guides/parallel-tests", - destination: "/hardhat-runner/docs/guides/test-contracts#running-tests-in-parallel", - permanent: false + destination: + "/hardhat-runner/docs/guides/test-contracts#running-tests-in-parallel", + permanent: false, }, { source: "/guides/:slug", destination: "/hardhat-runner/docs/guides/:slug", - permanent: false + permanent: false, }, { source: "/advanced/:slug", destination: "/hardhat-runner/docs/advanced/:slug", - permanent: false + permanent: false, }, { source: "/chai-matchers", destination: "/hardhat-chai-matchers", - permanent: false + permanent: false, }, { source: "/chai-matchers/:slug", destination: "/hardhat-chai-matchers/docs/:slug", - permanent: false + permanent: false, }, { source: "/network-helpers", destination: "/hardhat-network-helpers", - permanent: false + permanent: false, }, { source: "/network-helpers/:slug", destination: "/hardhat-network-helpers/docs/:slug", - permanent: false + permanent: false, }, { source: "/hardhat-runner/plugins/nomiclabs-hardhat-etherscan", destination: "/hardhat-runner/plugins/nomicfoundation-hardhat-verify", - permanent: false + permanent: false, + }, + { + source: "/hardhat-runner/plugins/nomiclabs-hardhat-ethers", + destination: "/hardhat-runner/plugins/nomicfoundation-hardhat-ethers", + permanent: false, }, - ...loadErrorRedirects() + ...loadErrorRedirects(), ]; - module.exports = customRedirects; function loadErrorRedirects() { diff --git a/docs/src/components/Navigation.mocks.json b/docs/src/components/Navigation.mocks.json index f542795d7e..a49aacc90d 100644 --- a/docs/src/components/Navigation.mocks.json +++ b/docs/src/components/Navigation.mocks.json @@ -169,6 +169,10 @@ "label": "@nomiclabs/hardhat-web3", "href": "/plugins/nomiclabs-hardhat-web3" }, + { + "label": "@nomicfoundation/hardhat-web3-v4", + "href": "/plugins/nomicfoundation-hardhat-web3-v4" + }, { "label": "@nomiclabs/hardhat-truffle5", "href": "/plugins/nomiclabs-hardhat-truffle5" diff --git a/docs/src/components/landingBlocks/ReviewsBlock.tsx b/docs/src/components/landingBlocks/ReviewsBlock.tsx index 6d985676c2..7845448c84 100644 --- a/docs/src/components/landingBlocks/ReviewsBlock.tsx +++ b/docs/src/components/landingBlocks/ReviewsBlock.tsx @@ -1,5 +1,5 @@ import React from "react"; -import Image from "next/image"; +import Image, { StaticImageData } from "next/image"; import { Carousel } from "react-responsive-carousel"; import { styled } from "linaria/react"; diff --git a/docs/src/components/mdxComponents/CodeBlocks.stories.tsx b/docs/src/components/mdxComponents/CodeBlocks.stories.tsx index 6113bbb803..b4c27ce318 100644 --- a/docs/src/components/mdxComponents/CodeBlocks.stories.tsx +++ b/docs/src/components/mdxComponents/CodeBlocks.stories.tsx @@ -13,7 +13,7 @@ export const Pre = () => ( {` - $ npx hardhat + $ npx hardhat init 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 diff --git a/docs/src/components/ui/FeatureCard.tsx b/docs/src/components/ui/FeatureCard.tsx index 2ca726d4f8..f02fce74e3 100644 --- a/docs/src/components/ui/FeatureCard.tsx +++ b/docs/src/components/ui/FeatureCard.tsx @@ -1,5 +1,5 @@ import React from "react"; -import Image from "next/image"; +import Image, { StaticImageData } from "next/image"; import { styled } from "linaria/react"; import { CTAType } from "./types"; import CTA from "./CTA"; diff --git a/docs/src/config.ts b/docs/src/config.ts index ea1caf8246..3a837ada8a 100644 --- a/docs/src/config.ts +++ b/docs/src/config.ts @@ -13,9 +13,8 @@ import NetworkIcon from "./assets/tools/network"; import RunnerIconDark from "./assets/tools/runner-dark"; import NetworkIconDark from "./assets/tools/network-dark"; import SolidityIconDark from "./assets/tools/solidity-dark"; -// TODO: Re-enable Ignition section -// import IgnitionIcon from "./assets/tools/ignition"; -// import IgnitionIconDark from "./assets/tools/ignition-dark"; +import IgnitionIcon from "./assets/tools/ignition"; +import IgnitionIconDark from "./assets/tools/ignition-dark"; export const SOCIALS_LINKS = { [SocialsEnum.GITHUB]: "https://github.com/NomicFoundation/hardhat", @@ -23,13 +22,14 @@ export const SOCIALS_LINKS = { [SocialsEnum.DISCORD]: "/discord", }; -export const BANNER_LINK = "https://nomic.foundation/hiring"; +export const BANNER_LINK = + "https://cryptpad.fr/form/#/2/form/view/pV-DdryeJoYUWvW+gXsFaMNynEY7t5mUsgeD1urgwSE"; export const PRIVACY_POLICY_PATH = "/privacy-policy.html"; export const bannerContent = { - text: "Join the Hardhat team! Nomic Foundation is hiring", - shortText: "Join the Hardhat team! We are hiring", + text: "Please take a few minutes to complete the 2023 Solidity Survey", + shortText: "Complete the 2023 Solidity Survey here", href: BANNER_LINK, }; @@ -65,14 +65,13 @@ export const menuItemsList: MenuItemType[] = [ icon: RunnerIcon, iconDark: RunnerIconDark, }, - // TODO: Re-enable Ignition section - // { - // prefix: "Hardhat", - // label: "Ignition", - // href: "/?tool=IGNITION#tools", - // icon: IgnitionIcon, - // iconDark: IgnitionIconDark, - // }, + { + prefix: "Hardhat", + label: "Ignition", + href: "/ignition", + icon: IgnitionIcon, + iconDark: IgnitionIconDark, + }, { prefix: "Hardhat", label: "Network", @@ -105,8 +104,7 @@ export const menuItemsList: MenuItemType[] = [ export enum Tools { RUNNER = "RUNNER", - // TODO: Re-enable Ignition section - // IGNITION = "IGNITION", + IGNITION = "IGNITION", NETWORK = "NETWORK", SOLIDITY = "SOLIDITY", } diff --git a/docs/src/content/docs-landing/index.md b/docs/src/content/docs-landing/index.md index 027a089138..fa208f6acb 100644 --- a/docs/src/content/docs-landing/index.md +++ b/docs/src/content/docs-landing/index.md @@ -27,6 +27,10 @@ Hardhat Runner is the main component you interact with when using Hardhat. It's Hardhat comes built-in with Hardhat Network, a local Ethereum network node designed for development. It allows you to deploy your contracts, run your tests and debug your code, all within the confines of your local machine. [Learn more.](/hardhat-network) +### Hardhat Ignition + +Hardhat Ignition is a declarative deployment system that enables you to deploy your smart contracts without navigating the mechanics of the deployment process. [Learn more.](/ignition) + ### Hardhat for Visual Studio Code Hardhat for Visual Studio Code is a VS Code extension that adds language support for Solidity and provides editor integration for Hardhat projects. [Learn more.](/hardhat-vscode) diff --git a/docs/src/content/hardhat-chai-matchers/docs/other-components/_dirinfo.yaml b/docs/src/content/hardhat-chai-matchers/docs/other-components/_dirinfo.yaml index 2a4a770f9e..475844db12 100644 --- a/docs/src/content/hardhat-chai-matchers/docs/other-components/_dirinfo.yaml +++ b/docs/src/content/hardhat-chai-matchers/docs/other-components/_dirinfo.yaml @@ -5,6 +5,8 @@ order: title: Hardhat Runner - href: /../../../hardhat-network/docs title: Hardhat Network + - href: /../../../ignition/docs + title: Hardhat Ignition - href: /../../../hardhat-vscode/docs title: Hardhat VSCode - href: /../../../hardhat-network-helpers/docs diff --git a/docs/src/content/hardhat-chai-matchers/docs/overview.md b/docs/src/content/hardhat-chai-matchers/docs/overview.md index a61f57b0c8..c27acf7bb8 100644 --- a/docs/src/content/hardhat-chai-matchers/docs/overview.md +++ b/docs/src/content/hardhat-chai-matchers/docs/overview.md @@ -90,8 +90,8 @@ This package provides the predicates `anyValue` and `anyUint`, but you can easil ```js -function isEven(x: BigNumber): boolean { - return x.mod(2).isZero(); +function isEven(x: bigint): boolean { + return x % 2n === 0n; } await expect(contract.emitUint(2)) @@ -175,7 +175,7 @@ This package enhances the standard numerical equality matchers (`equal`, `above` expect(await token.balanceOf(someAddress)).to.equal(1); ``` -These matchers support not just [ethers' `BigNumber`](https://docs.ethers.io/v5/single-page/#/v5/api/utils/bignumber/) and the native JavaScript `Number`, but also [`BigInt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt), [bn.js](https://github.com/indutny/bn.js/), and [bignumber.js](https://github.com/MikeMcl/bignumber.js/). +These matchers support not just the native JavaScript `Number`, but also [`BigInt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt), [bn.js](https://github.com/indutny/bn.js/), and [bignumber.js](https://github.com/MikeMcl/bignumber.js/). ### Balance Changes @@ -236,6 +236,10 @@ Finally, the `hexEqual` matcher accepts two hexadecimal strings and compares the expect("0x00012AB").to.hexEqual("0x12ab"); ``` +## Known limitations + +At the moment, some of these chai matchers only work correctly when Hardhat is running in [automine mode](/hardhat-network/docs/explanation/mining-modes). See [this issue](https://github.com/NomicFoundation/hardhat/issues/3203) for more details. + ## Dig Deeper For a full listing of all of the matchers supported by this package, see [the reference documentation](./reference.md). diff --git a/docs/src/content/hardhat-chai-matchers/docs/reference.md b/docs/src/content/hardhat-chai-matchers/docs/reference.md index 42f99a9c64..9b9f5f866e 100644 --- a/docs/src/content/hardhat-chai-matchers/docs/reference.md +++ b/docs/src/content/hardhat-chai-matchers/docs/reference.md @@ -10,13 +10,12 @@ When `@nomicfoundation/hardhat-chai-matchers` is used, equality comparisons of n expect(await token.totalSupply()).to.equal(1_000_000); ``` -will work. These assertions don't normally work because the value returned by `totalSupply()` is an [ethers BigNumber](https://docs.ethers.io/v5/single-page/#/v5/api/utils/bignumber/), and an instance of a `BigNumber` will always be different than a plain number. +will work. These assertions don't normally work because the value returned by `totalSupply()` is a [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt), and a bigint value will always be different than a plain number. The supported types are: - Plain javascript numbers - [BigInts](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) -- [Ethers BigNumbers](https://docs.ethers.io/v5/single-page/#/v5/api/utils/bignumber/) - [`bn.js`](https://github.com/indutny/bn.js/) instances - [`bignumber.js`](https://github.com/MikeMcl/bignumber.js/) instances @@ -129,7 +128,7 @@ If the event has arguments, the `.withArgs` matcher can be added: ```ts await expect(token.transfer(address, 0)) - .to.be.revertedWithCustomError(token, "InvalidTransferValue") + .to.emit(token, "Transfer") .withArgs(100); ``` @@ -204,7 +203,7 @@ Can be used after a `.emit` or a `.revertedWithCustomError` matcher to assert th ```ts // events await expect(token.transfer(address, 0)) - .to.be.revertedWithCustomError(token, "InvalidTransferValue") + .to.emit(token, "Transfer") .withArgs(100); // errors @@ -226,8 +225,8 @@ await expect(factory.create(9999)) Predicates are just functions that return true if the value is correct, and return false if it isn't, so you can create your own predicates: ```ts -function isEven(x: BigNumber): boolean { - return x.mod(2).isZero(); +function isEven(x: bigint): boolean { + return x % 2n === 0n; } await expect(token.transfer(100)).to.emit(token, "Transfer").withArgs(isEven); diff --git a/docs/src/content/hardhat-network-helpers/docs/other-components/_dirinfo.yaml b/docs/src/content/hardhat-network-helpers/docs/other-components/_dirinfo.yaml index de33f52bc1..d6016041af 100644 --- a/docs/src/content/hardhat-network-helpers/docs/other-components/_dirinfo.yaml +++ b/docs/src/content/hardhat-network-helpers/docs/other-components/_dirinfo.yaml @@ -5,6 +5,8 @@ order: title: Hardhat Runner - href: /../../../hardhat-network/docs title: Hardhat Network + - href: /../../../ignition/docs + title: Hardhat Ignition - href: /../../../hardhat-vscode/docs title: Hardhat VSCode - href: /../../../hardhat-chai-matchers/docs diff --git a/docs/src/content/hardhat-network-helpers/docs/reference.md b/docs/src/content/hardhat-network-helpers/docs/reference.md index 19562c8a5f..627ece392b 100644 --- a/docs/src/content/hardhat-network-helpers/docs/reference.md +++ b/docs/src/content/hardhat-network-helpers/docs/reference.md @@ -307,8 +307,6 @@ Parameters: - `prevRandao`: The new PREVRANDAO value to use. -## Other helpers - ### `reset([url], [blockNumber])` Resets the Hardhat Network. The result of calling this method depends on which arguments are provided: diff --git a/docs/src/content/hardhat-network/docs/explanation/mining-modes.md b/docs/src/content/hardhat-network/docs/explanation/mining-modes.md index 3a2a7a6b29..6c6cfea2d4 100644 --- a/docs/src/content/hardhat-network/docs/explanation/mining-modes.md +++ b/docs/src/content/hardhat-network/docs/explanation/mining-modes.md @@ -27,6 +27,18 @@ const pendingBlock = await network.provider.send("eth_getBlockByNumber", [ ]); ``` +### Mining multiple transactions in one block + +Note that for the special case of the Hardhat Network, the transaction `gas`-limit config [defaults to the fixed `blockGasLimit`](../reference/index.md#gas), not to [`auto`](/hardhat-runner/docs/config) (gas-estimation). This [speeds things up](https://github.com/NomicFoundation/hardhat/issues/4090#issuecomment-1622155314), but consequently limits the transactions per block to a maximum of 1. So to mine multiple transactions in a single block on the Hardhat Network, in addition to disabling automine, either specify the transaction `gasLimit` explicitly for each of the transactions, or force automatic gas-estimation in your config with: + +``` +networks: { + hardhat: { + gas: "auto", + }, +}, +``` + ### Mining transactions in FIFO order The way Hardhat Network's mempool orders transactions is customizable. By default, they are prioritized following Geth's rules, but you can enable a FIFO behavior instead, which ensures that transactions are added to blocks in the same order they are sent, and which is useful to recreate blocks from other networks. diff --git a/docs/src/content/hardhat-network/docs/guides/forking-other-networks.md b/docs/src/content/hardhat-network/docs/guides/forking-other-networks.md index e987e66e87..af7402898f 100644 --- a/docs/src/content/hardhat-network/docs/guides/forking-other-networks.md +++ b/docs/src/content/hardhat-network/docs/guides/forking-other-networks.md @@ -167,7 +167,7 @@ await impersonatedSigner.sendTransaction(...); Alternatively, you can use the [`impersonateAccount`]() helper and then obtain the signer for that address: ```js -const helpers = require("@nomicfoundation/hardhat-network-helpers"); +const helpers = require("@nomicfoundation/hardhat-toolbox/network-helpers"); const address = "0x1234567890123456789012345678901234567890"; await helpers.impersonateAccount(address); @@ -183,7 +183,7 @@ Once you've got a local instance of the mainnet chain state, setting that state You can reset the network with the [`reset`]() network helper: ```js -const helpers = require("@nomicfoundation/hardhat-network-helpers"); +const helpers = require("@nomicfoundation/hardhat-toolbox/network-helpers"); await helpers.reset(url, blockNumber); ``` diff --git a/docs/src/content/hardhat-network/docs/other-components/_dirinfo.yaml b/docs/src/content/hardhat-network/docs/other-components/_dirinfo.yaml index 2abe014d46..4ad6471b25 100644 --- a/docs/src/content/hardhat-network/docs/other-components/_dirinfo.yaml +++ b/docs/src/content/hardhat-network/docs/other-components/_dirinfo.yaml @@ -3,6 +3,8 @@ section-title: Other Hardhat components order: - href: /../../../hardhat-runner/docs title: Hardhat Runner + - href: /../../../ignition/docs + title: Hardhat Ignition - href: /../../../hardhat-vscode/docs title: Hardhat VSCode - href: /../../../hardhat-chai-matchers/docs diff --git a/docs/src/content/hardhat-network/docs/overview/index.md b/docs/src/content/hardhat-network/docs/overview/index.md index 4ef156214c..0d35fe2d41 100644 --- a/docs/src/content/hardhat-network/docs/overview/index.md +++ b/docs/src/content/hardhat-network/docs/overview/index.md @@ -15,7 +15,7 @@ It runs as either an in-process or stand-alone daemon, servicing JSON-RPC and We By default, it mines a block with each transaction that it receives, in order and with no delay. -It's backed by the `@ethereumjs/vm` EVM implementation, the same one used by ganache, Remix and Ethereum Studio. +It's backed by the `@ethereumjs/vm` EVM implementation, the same one used by ganache and Remix. ## How can I use it? diff --git a/docs/src/content/hardhat-network/docs/reference/index.md b/docs/src/content/hardhat-network/docs/reference/index.md index 45dde36436..e72b2a083f 100644 --- a/docs/src/content/hardhat-network/docs/reference/index.md +++ b/docs/src/content/hardhat-network/docs/reference/index.md @@ -117,7 +117,9 @@ The minimum `gasPrice` that a transaction must have. This field must not be pres The `baseFeePerGas` of the first block. Note that when forking a remote network, the "first block" is the one immediately after the block you forked from. This field must not be present if the `"hardfork"` is not `"london"` or a later one. Default value: `"1000000000"` if not forking. When forking a remote network, if the remote network uses EIP-1559, the first local block will use the right `baseFeePerGas` according to the EIP, otherwise `"10000000000"` is used. -- `coinbase`: The address used as coinbase in new blocks. Default value: `"0xc014ba5ec014ba5ec014ba5ec014ba5ec014ba5e"`. +#### `coinbase` + +The address used as coinbase in new blocks. Default value: `"0xc014ba5ec014ba5ec014ba5ec014ba5ec014ba5e"`. ### Mining modes @@ -251,6 +253,50 @@ To customise it, take a look at [the configuration section](/config/index.md#har ### Standard methods +#### `debug_traceCall` + +Traces the execution of an `eth_call` within the context of a specific block's execution. See the [Geth's documentation](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-debug#debugtracecall) for more info. + +Arguments: + +- transaction object +- blockTag: optional, default value is "latest" +- traceConfig: optional object with the following properties: + - disableMemory: optional boolean, default value is false + - disableStack: optional boolean, default value is false + - disableStorage: optional boolean, default value is false + +Example without traceConfig: + +```js +const result = await network.provider.send("debug_traceCall", [ + { + from: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + to: "0x4b23ad35Da73fEe8154CDc8b291c814028A4E743", + data: "0xc0129d43", + }, + "latest", +]); +``` + +Example with traceConfig: + +```js +const trace = await network.provider.send("debug_traceCall", [ + { + from: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + to: "0x4b23ad35Da73fEe8154CDc8b291c814028A4E743", + data: "0xc0129d43", + }, + "latest", + { + disableMemory: true, + disableStack: true, + disableStorage: true, + }, +]); +``` + #### `debug_traceTransaction` Get debug traces of already-mined transactions. @@ -287,6 +333,44 @@ const trace = await hre.network.provider.send("debug_traceTransaction", [ #### `eth_call` +This method allows you to simulate a transaction without actually executing it. See the [Geth's documentation](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-eth) for more info. + +Example: + +```js +const result = await network.provider.send("eth_call", [ + { + from: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + to: "0x4b23ad35Da73fEe8154CDc8b291c814028A4E743", + data: "0xc0129d43", + }, + "latest", +]); +``` + +You can optionally pass a state override object to modify the chain before running the call: + +```js +const result = await network.provider.send("eth_call", [ + { + from: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + to: "0x4b23ad35Da73fEe8154CDc8b291c814028A4E743", + data: "0xc0129d43", + }, + "latest", + { + "0x6eE6DE5a56910E5353933761305AEF6a414d97BA": { + balance: "0xde0b6b3a7640000", + nonce: "0x123", + stateDiff: { + "0x0000000000000000000000000000000000000000000000000000000000000002": + "0x000000000000000000000000000000000000000000000000000000000000000c", + }, + }, + }, +]); +``` + #### `eth_chainId` #### `eth_coinbase` diff --git a/docs/src/content/hardhat-runner/docs/advanced/_dirinfo.yaml b/docs/src/content/hardhat-runner/docs/advanced/_dirinfo.yaml index 6365297f03..9b6ec2234d 100644 --- a/docs/src/content/hardhat-runner/docs/advanced/_dirinfo.yaml +++ b/docs/src/content/hardhat-runner/docs/advanced/_dirinfo.yaml @@ -12,3 +12,6 @@ order: - href: /vscode-tests title: Running tests in VS Code - /using-esm + - /using-viem + - title: Migrating away from hardhat-waffle + href: /migrating-from-hardhat-waffle diff --git a/docs/src/content/hardhat-runner/docs/advanced/building-plugins.md b/docs/src/content/hardhat-runner/docs/advanced/building-plugins.md index c1aa605b85..e905353de0 100644 --- a/docs/src/content/hardhat-runner/docs/advanced/building-plugins.md +++ b/docs/src/content/hardhat-runner/docs/advanced/building-plugins.md @@ -47,6 +47,62 @@ Hello, Hardhat! This is literally all it takes to put together a plugin for Hardhat. Now `hi` is available to be used in the Hardhat console, your tasks, tests and other plugins. +## Extending the Hardhat provider + +Next, we can take a look at how to add features on top of the default provider offered by Hardhat, found on `hre.network.provider`. Doing this, any extra functionality you add will be available everywhere, just as it would if you extend the [Hardhat Runtime Environment](#extending-the-hardhat-runtime-environment). + +The Hardhat provider is configured through a queue of extension functions that you can add to by using the `extendProvider()` function. It receives one parameter which is a callback to be executed after the first call to `hre.network.provider.request()` is made. This happens only once. If `extendProvider` is called multiple times, its callbacks will be executed in order, and Hardhat will wait on each one to finish before executing the next one. Returning an entirely new provider is possible but not advisable. + +These callbacks can be `async`, and they will be `await`ed until they finish, so you should be careful when adding any functionality that might take a long time to resolve. + +It's important to keep in mind that after all callbacks are executed, the provider will be wrapped by Hardhat's built-in extenders. This means that the object returned by `extendProvider` is not the same as the one found on `hre.network.provider`, but its funcionality is included there. + +For example, adding the following to `hardhat.config.js`: + +```js +import { ProviderWrapper } from 'hardhat/plugins' + +class FixedGasProvider extends ProviderWrapper { + constructor( + public readonly gasPrice, + protected readonly _wrappedProvider + ) { + super(_wrappedProvider); + } + + public async request(args) { + if (args.method === "eth_estimateGas") { + return this.gasPrice; + } else if (args.method === "eth_sendTransaction") { + const params = this._getParams(args); + const tx = params[0]; + + // let's pretend that EIP-1559 never happened + tx.gasPrice = this.gasPrice; + } + + return this._wrappedProvider.request(args); + } +} + +extendProvider(async (provider, config, network) => { + // We fix the gas price to be set by the config or to a random high value + const gasPrice = config.fixedGasPrice || "0x1000000" + const newProvider = new FixedGasProvider(gasPrice, provider); + return newProvider; +}); +``` + +Will make the `hre` provider use that gas price value everywhere it's used: + +```js +task("request", async (args, hre) => { + await hre.network.request(/*{ method arguments }*/); // this will run FixedGasProvider's request method above +}); + +module.exports = {}; +``` + ## Using the Hardhat TypeScript plugin boilerplate For a complete example of a plugin you can take a look at the [Hardhat TypeScript plugin boilerplate project](https://github.com/NomicFoundation/hardhat-ts-plugin-boilerplate/). diff --git a/docs/src/content/hardhat-runner/docs/advanced/create-task.md b/docs/src/content/hardhat-runner/docs/advanced/create-task.md index 33c7972df1..b14e3f8035 100644 --- a/docs/src/content/hardhat-runner/docs/advanced/create-task.md +++ b/docs/src/content/hardhat-runner/docs/advanced/create-task.md @@ -48,7 +48,7 @@ Let’s go through the process of creating one to interact with a smart contract Tasks in Hardhat are asynchronous JavaScript functions that get access to the [Hardhat Runtime Environment](../advanced/hardhat-runtime-environment.md), which exposes its configuration and parameters, as well as programmatic access to other tasks and any plugin objects that may have been injected. -For our example, we will use the [`@nomicfoundation/hardhat-toolbox`](/hardhat-runner/plugins/nomicfoundation-hardhat-toolbox), which includes the [ethers.js](https://docs.ethers.io/v5/) library to interact with our contracts. +For our example, we will use the [`@nomicfoundation/hardhat-toolbox`](/hardhat-runner/plugins/nomicfoundation-hardhat-toolbox), which includes the [ethers.js](https://docs.ethers.org/v6/) library to interact with our contracts. ::::tabsgroup{options="npm 7+,npm 6,yarn"} @@ -63,7 +63,7 @@ npm install --save-dev @nomicfoundation/hardhat-toolbox :::tab{value="npm 6"} ``` -npm install --save-dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers +npm install --save-dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomicfoundation/hardhat-ethers @nomicfoundation/hardhat-verify chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v6 ``` ::: @@ -71,7 +71,7 @@ npm install --save-dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat :::tab{value="yarn"} ``` -yarn add --dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers +yarn add --dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomicfoundation/hardhat-ethers @nomicfoundation/hardhat-verify chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v6 ``` ::: @@ -93,7 +93,7 @@ task("balance", "Prints an account's balance").setAction(async () => {}); /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { - solidity: "0.8.9", + solidity: "{RECOMMENDED_SOLC_VERSION}", }; ``` @@ -154,7 +154,7 @@ task("balance", "Prints an account's balance") .setAction(async (taskArgs) => { const balance = await ethers.provider.getBalance(taskArgs.account); - console.log(ethers.utils.formatEther(balance), "ETH"); + console.log(ethers.formatEther(balance), "ETH"); }); ``` @@ -325,3 +325,28 @@ subtask("print", "Prints a message") console.log(taskArgs.message); }); ``` + +### Scoped tasks + +You can group tasks under a _scope_. This is useful when you have several tasks that are related to each other in some way. + +```js +const myScope = scope("my-scope", "Scope description"); + +myScope.task("my-task", "Do something") + .setAction(async () => { ... }); + +myScope.task("my-other-task", "Do something else") + .setAction(async () => { ... }); +``` + +In this case, you can run these tasks with `npx hardhat my-scope my-task` and `npx hardhat my-scope my-other-task`. + +Scoped tasks can also be run programmatically: + +```js +await hre.run({ + scope: "my-scope", + task: "my-task", +}); +``` diff --git a/docs/src/content/hardhat-runner/docs/advanced/hardhat-and-foundry.md b/docs/src/content/hardhat-runner/docs/advanced/hardhat-and-foundry.md index 189e422f32..075d64387b 100644 --- a/docs/src/content/hardhat-runner/docs/advanced/hardhat-and-foundry.md +++ b/docs/src/content/hardhat-runner/docs/advanced/hardhat-and-foundry.md @@ -108,7 +108,7 @@ yarn add --dev hardhat @nomicfoundation/hardhat-foundry :::: -After that, initialize a Hardhat project with `npx hardhat`. Choose the "Create an empty hardhat.config.js" option, and then import the plugin in `hardhat.config.js`: +After that, initialize a Hardhat project with `npx hardhat init`. Choose the "Create an empty hardhat.config.js" option, and then import the plugin in `hardhat.config.js`: ```javascript require("@nomicfoundation/hardhat-foundry"); diff --git a/docs/src/content/hardhat-runner/docs/advanced/hardhat-runtime-environment.md b/docs/src/content/hardhat-runner/docs/advanced/hardhat-runtime-environment.md index 6f9d550920..9902915702 100644 --- a/docs/src/content/hardhat-runner/docs/advanced/hardhat-runtime-environment.md +++ b/docs/src/content/hardhat-runner/docs/advanced/hardhat-runtime-environment.md @@ -51,7 +51,7 @@ This way, tests written for Hardhat are just normal Mocha tests. This enables yo The HRE only provides the core functionality that users and plugin developers need to start building on top of Hardhat. Using it to interface directly with Ethereum in your project can be somewhat harder than expected. -Everything gets easier when you use higher-level libraries, like [Ethers.js](https://docs.ethers.io/) or [ethereum-waffle](https://www.npmjs.com/package/ethereum-waffle), but these libraries need some initialization to work, and that could get repetitive. +Everything gets easier when you use higher-level libraries, like [Ethers.js](https://docs.ethers.org/v6/) or [ethereum-waffle](https://www.npmjs.com/package/ethereum-waffle), but these libraries need some initialization to work, and that could get repetitive. Hardhat lets you hook into the HRE construction, and extend it with new functionality. This way, you only have to initialize everything once, and your new features or libraries will be available everywhere the HRE is used. diff --git a/docs/src/content/hardhat-runner/docs/advanced/migrating-from-hardhat-waffle.md b/docs/src/content/hardhat-runner/docs/advanced/migrating-from-hardhat-waffle.md new file mode 100644 index 0000000000..b4edec853c --- /dev/null +++ b/docs/src/content/hardhat-runner/docs/advanced/migrating-from-hardhat-waffle.md @@ -0,0 +1,111 @@ +# Migrating away from hardhat-waffle + +In the past, our recommended setup included [Waffle], by using the [`hardhat-waffle`] plugin. + +However, we now recommend using [Hardhat Toolbox], a plugin that bundles a curated set of useful packages. This set includes [Hardhat Chai Matchers] and [Hardhat Network Helpers], which work as an improved replacement for `hardhat-waffle`. + +Migrating to the Toolbox only takes a few minutes. If you do so, you'll get more functionality, like support for Solidity custom errors and native `bigint` support, and a more reliable testing experience. It will also make it easier for you to keep up to date with our recommended setup. + +## Migrating to Hardhat Toolbox + +Follow these steps to migrate your project to Hardhat Toolbox. + +1. First you'll need to remove some packages from your project. + + ::::tabsgroup{options="npm 7+,npm 6,yarn"} + + :::tab{value="npm 7+"} + + ``` + npm uninstall @nomiclabs/hardhat-waffle ethereum-waffle @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers + ``` + + ::: + + :::tab{value="npm 6"} + + ``` + npm uninstall @nomiclabs/hardhat-waffle ethereum-waffle @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers + ``` + + ::: + + :::tab{value=yarn} + + ``` + yarn remove @nomiclabs/hardhat-waffle ethereum-waffle + ``` + + ::: + + :::: + +2. Then you need to install the Toolbox. If you are using yarn or an old version of npm, you'll also have to install some other packages (the peer dependencies of the Toolbox). + + ::::tabsgroup{options="npm 7+,npm 6,yarn"} + + :::tab{value="npm 7+"} + + ``` + npm install --save-dev @nomicfoundation/hardhat-toolbox + ``` + + ::: + + :::tab{value="npm 6"} + + ``` + npm install --save-dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomicfoundation/hardhat-ethers @nomicfoundation/hardhat-verify chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v6 + ``` + + ::: + + :::tab{value="yarn"} + + ``` + yarn add --dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers@1 @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers@5 hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v6 + ``` + + ::: + + :::: + +3. Finally, remove `hardhat-waffle` from your imported plugins and import the Toolbox instead: + + ::::tabsgroup{options=TypeScript,JavaScript} + + :::tab{value=TypeScript} + + ```diff + - import "@nomiclabs/hardhat-waffle"; + + import "@nomicfoundation/hardhat-toolbox"; + ``` + + ::: + + :::tab{value=JavaScript} + + ```diff + - require("@nomiclabs/hardhat-waffle"); + + require("@nomicfoundation/hardhat-toolbox"); + ``` + + ::: + + :::: + + Adding the Toolbox will make many other imports redundant, so you can remove any of these if you want: + + - `@nomicfoundation/hardhat-ethers` + - `@nomicfoundation/hardhat-verify` + - `hardhat-gas-reporter` + - `solidity-coverage` + - `@typechain/hardhat` + +Check the [Hardhat Chai Matchers] and [Hardhat Network Helpers] docs to learn more about the functionality included in the Toolbox. + +[waffle]: https://getwaffle.io +[`hardhat-waffle`]: ../../plugins/nomiclabs-hardhat-waffle +[hardhat chai matchers]: /hardhat-chai-matchers +[hardhat network helpers]: /hardhat-network-helpers +[hardhat toolbox]: /hardhat-runner/plugins/nomicfoundation-hardhat-toolbox diff --git a/docs/src/content/hardhat-runner/docs/advanced/scripts.md b/docs/src/content/hardhat-runner/docs/advanced/scripts.md index e29e47e01b..e36a8b004b 100644 --- a/docs/src/content/hardhat-runner/docs/advanced/scripts.md +++ b/docs/src/content/hardhat-runner/docs/advanced/scripts.md @@ -24,7 +24,7 @@ const hre = require("hardhat"); You can get access to all your tasks and plugins. To run these scripts you simply go through node: `node script.js`. -To try this out, let's look at [a fresh Hardhat project](../guides/project-setup.md). Run `npx hardhat` and go through the steps to create a JavaScript project. When you're done, your project directory should look like this: +To try this out, let's look at [a fresh Hardhat project](../guides/project-setup.md). Run `npx hardhat init` and go through the steps to create a JavaScript project. When you're done, your project directory should look like this: ``` $ ls -l @@ -65,7 +65,7 @@ Lock with 1 ETH deployed to: 0x5FbDB2315678afecb367f032d93F642f64180aa3 ### Hardhat arguments -You can still pass arguments to Hardhat when running a standalone script. This is done by setting environment variables. These are: +You can still pass arguments to Hardhat when running a standalone script. This is done by setting environment variables. Some of these are: - `HARDHAT_NETWORK`: Sets the network to connect to. @@ -75,4 +75,4 @@ You can still pass arguments to Hardhat when running a standalone script. This i - `HARDHAT_MAX_MEMORY`: Sets the maximum amount of memory that Hardhat can use. -For example, instead of doing `npx hardhat --network localhost run script.js`, you can do `HARDHAT_NETWORK=localhost node script.js`. +For example, instead of doing `npx hardhat --network localhost run script.js`, you can do `HARDHAT_NETWORK=localhost node script.js`. Check our [Environment variables](/hardhat-runner/docs/reference/environment-variables) reference to learn more about this. diff --git a/docs/src/content/hardhat-runner/docs/advanced/using-esm.md b/docs/src/content/hardhat-runner/docs/advanced/using-esm.md index 291a4cf4f6..ce6c7e4002 100644 --- a/docs/src/content/hardhat-runner/docs/advanced/using-esm.md +++ b/docs/src/content/hardhat-runner/docs/advanced/using-esm.md @@ -80,7 +80,7 @@ yarn add --dev hardhat :::: -and run `npx hardhat` to create a Hardhat project: +and run `npx hardhat init` to create a Hardhat project: ``` 888 888 888 888 888 @@ -92,7 +92,7 @@ and run `npx hardhat` to create a Hardhat project: 888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. 888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 -Welcome to Hardhat v2.13.0 +Welcome to Hardhat v{HARDHAT_VERSION} ? What do you want to do? … ▸ Create a JavaScript project diff --git a/docs/src/content/hardhat-runner/docs/advanced/using-viem.md b/docs/src/content/hardhat-runner/docs/advanced/using-viem.md new file mode 100644 index 0000000000..fcd759d087 --- /dev/null +++ b/docs/src/content/hardhat-runner/docs/advanced/using-viem.md @@ -0,0 +1,229 @@ +# Using Viem + +## Overview + +Most of this documentation assumes that you are using [ethers](https://docs.ethers.org/v6/) as your connection library, but you can also use Hardhat with [Viem](https://viem.sh/docs/introduction.html), a more lightweight and type-safe alternative. This guide explains how to setup a project that uses [the Viem-based Toolbox](/hardhat-runner/plugins/nomicfoundation-hardhat-toolbox-viem) instead of the main one. + +## Quick start + +To create a new Hardhat project with Viem, initialize a project as [you normally do](/hardhat-runner/docs/guides/project-setup), but select the _“Create a TypeScript project (with Viem)”_ option. + +You can also try `hardhat-viem` in an existing project, even if it uses `hardhat-ethers`, since both plugins are compatible. To do this, just install the `@nomicfoundation/hardhat-viem` package and add it to your config. + +### Clients + +Viem provides a set of interfaces to interact with the blockchain. `hardhat-viem` wraps and auto-configures these based on your Hardhat project settings for a seamless experience. + +These **clients** are tailored for specific interactions: + +- **Public Client** fetches node information from the “public” JSON-RPC API. +- **Wallet Client** interacts with Ethereum Accounts for tasks like transactions and message signing. +- **Test Client** performs actions that are only available in development nodes. + +You can access clients via `hre.viem`. Read our documentation to learn more about the [HRE](/hardhat-runner/docs/advanced/hardhat-runtime-environment). Find below an example of how to use the public and wallet clients: + +1. Create a `scripts/clients.ts` inside your project directory. +2. Add this code to `scripts/clients.ts`: + + ```tsx + import { parseEther, formatEther } from "viem"; + import hre from "hardhat"; + + async function main() { + const [bobWalletClient, aliceWalletClient] = + await hre.viem.getWalletClients(); + + const publicClient = await hre.viem.getPublicClient(); + const bobBalance = await publicClient.getBalance({ + address: bobWalletClient.account.address, + }); + + console.log( + `Balance of ${bobWalletClient.account.address}: ${formatEther( + bobBalance + )} ETH` + ); + + const hash = await bobWalletClient.sendTransaction({ + to: aliceWalletClient.account.address, + value: parseEther("1"), + }); + await publicClient.waitForTransactionReceipt({ hash }); + } + + main() + .then(() => process.exit()) + .catch((error) => { + console.error(error); + process.exit(1); + }); + ``` + +3. Run `npx hardhat run scripts/clients.ts`. + +For more detailed documentation on clients, you can visit the [hardhat-viem plugin site](/hardhat-runner/plugins/nomicfoundation-hardhat-viem#clients) and [Viem's official site](https://viem.sh/docs/clients/intro.html). + +### Contracts + +Viem also provides functionality for interacting with contracts, and `hardhat-viem` provides wrappers for the most useful methods. Plus, it generates types for your contracts, enhancing type-checking and IDE suggestions. + +Use the `hre.viem` object to get these helpers, similar to how clients are used. The next example shows how to get a contract instance and call one of its methods: + +1. Create a `MyToken.sol` file inside your project’s `contracts` directory: + + ```solidity + // SPDX-License-Identifier: MIT + pragma solidity ^{RECOMMENDED_SOLC_VERSION}; + + contract MyToken { + uint256 public totalSupply; + + constructor(uint256 _initialSupply) { + totalSupply = _initialSupply; + } + + function increaseSupply(uint256 _amount) public { + require(_amount > 0, "Amount must be greater than 0"); + totalSupply += _amount; + } + + function getCurrentSupply() public view returns (uint256) { + return totalSupply; + } + } + ``` + +2. Run `npx hardhat compile` to compile your contracts and produce types in the `artifacts` directory. +3. Create a `contracts.ts` inside the `scripts` directory: + + ```tsx + import hre from "hardhat"; + + async function main() { + const myToken = await hre.viem.deployContract("MyToken", [1_000_000n]); + + const initialSupply = await myToken.read.getCurrentSupply(); + console.log(`Initial supply of MyToken: ${initialSupply}`); + + await myToken.write.increaseSupply([500_000n]); + // increaseSupply sends a tx, so we need to wait for it to be mined + const publicClient = await hre.viem.getPublicClient(); + await publicClient.waitForTransactionReceipt({ hash }); + + const newSupply = await myToken.read.getCurrentSupply(); + console.log(`New supply of MyToken: ${newSupply}`); + } + + main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); + ``` + +4. Open your terminal and run `npx hardhat run scripts/contracts.ts`. This will deploy the `MyToken` contract, call the `increaseSupply()` function, and display the new supply in your terminal. + +#### Contract Type Generation + +The proper types for each contract are generated during compilation. These types are used to overload the `hardhat-viem` types and improve type checking and suggestions. For example, if you copy and paste the following code at the end of the `main()` function of `scripts/contracts.ts`, TypeScript would highlight it as an error: + +```tsx +// The amount is required as a parameter +// TS Error: Expected 1-2 arguments, but got 0. +await myToken.write.increaseSupply(); + +// There is no setSupply function in the MyToken contract +// TS Error: Property 'setSupply' does not exist on type... +const tokenPrice = await myToken.write.setSupply([5000000n]); + +// The first argument of the constructor arguments is expected to be an bigint +// TS Error: No overload matches this call. +const myToken2 = await hre.viem.deployContract("MyToken", ["1000000"]); +``` + +If you want to learn more about working with contracts, you can visit the [`hardhat-viem` plugin site](/hardhat-runner/plugins/nomicfoundation-hardhat-viem#contracts) and [Viem's official site](https://viem.sh/docs/contract/getContract.html). + +### Testing + +In this example, we’ll test the `MyToken` contract, covering scenarios like supply increase and expected operation reverts. + +1. Create a `test/my-token.ts` file: + + ```tsx + import hre from "hardhat"; + import { assert, expect } from "chai"; + import { loadFixture } from "@nomicfoundation/hardhat-toolbox-viem/network-helpers"; + + // A deployment function to set up the initial state + const deploy = async () => { + const myToken = await hre.viem.deployContract("MyToken", [1_000_000n]); + + return { myToken }; + }; + + describe("MyToken Contract Tests", function () { + it("should increase supply correctly", async function () { + // Load the contract instance using the deployment function + const { myToken } = await loadFixture(deploy); + + // Get the initial supply + const initialSupply = await myToken.read.getCurrentSupply(); + + // Increase the supply + await myToken.write.increaseSupply([500_000n]); + + // Get the new supply after the increase + const newSupply = await myToken.read.getCurrentSupply(); + + // Assert that the supply increased as expected + assert.equal(initialSupply + 500_000n, newSupply); + }); + + it("should revert when increasing supply by less than 1", async function () { + // Load the contract instance using the deployment function + const { myToken } = await loadFixture(deploy); + + // Attempt to increase supply by 0 (which should fail) + await expect(myToken.write.increaseSupply([0n])).to.be.rejectedWith( + "Amount must be greater than 0" + ); + }); + }); + ``` + +2. Open your terminal and run `npx hardhat test` to run these tests. + +### Managing Types and Version Stability + +Viem adopts a particular [approach to handling changes in types within their codebase](https://viem.sh/docs/typescript.html#typescript). They consider these changes as non-breaking and typically release them as patch version updates. This approach has implications for users of both `hardhat-viem` and `hardhat-toolbox-viem`. + +**Option 1: Pinning Versions (Recommended for Stability)** + +Viem recommends pinning their package version in your project. However, it's important to note that if you choose to follow this recommendation, you should also pin the versions of `hardhat-viem` and `hardhat-toolbox-viem`. This ensures version compatibility and stability for your project. However, it's worth mentioning that by pinning versions, you may miss out on potential improvements and updates shipped with our plugins. + +To pin the versions, follow these steps: + +1. Explicitly install `hardhat-viem`, `hardhat-toolbox-viem`, and `viem`. This will add these dependencies to your `package.json` file: + + ```tsx + npm i @nomicfoundation/hardhat-toolbox-viem @nomicfoundation/hardhat-viem viem + ``` + +2. Open your `package.json` file and remove the caret character (**`^`**) from the versions of the three packages: + + ```json + { + "dependencies": { + "@nomicfoundation/hardhat-toolbox-viem": "X.Y.Z", + "@nomicfoundation/hardhat-viem": "X.Y.Z", + "viem": "X.Y.Z" + } + } + ``` + +**Option 2: Stay Updated (Recommended for Features)** + +Alternatively, you can choose not to pin versions and remain aware that your project's types may break if a newer version of `viem` is installed. By opting for this approach, you won't miss out on important upgrades and features, but you might need to address type errors occasionally. + +Both options have their merits, and your choice depends on whether you prioritize stability or staying up-to-date with the latest features and improvements. diff --git a/docs/src/content/hardhat-runner/docs/config/index.md b/docs/src/content/hardhat-runner/docs/config/index.md index 0b818c2c6b..f43eaf8c18 100644 --- a/docs/src/content/hardhat-runner/docs/config/index.md +++ b/docs/src/content/hardhat-runner/docs/config/index.md @@ -26,7 +26,7 @@ module.exports = { } }, solidity: { - version: "0.5.15", + version: "{RECOMMENDED_SOLC_VERSION}", settings: { optimizer: { enabled: true, @@ -62,7 +62,7 @@ module.exports = { } }, solidity: { - version: "0.5.15", + version: "{RECOMMENDED_SOLC_VERSION}", settings: { optimizer: { enabled: true, @@ -176,13 +176,13 @@ module.exports = { The `solidity` config is an optional field that can be one of the following: -- A solc version to use, e.g. `"0.7.3"`. +- A solc version to use, e.g. `"{RECOMMENDED_SOLC_VERSION}"`. - An object which describes the configuration for a single compiler. It contains the following keys: - `version`: The solc version to use. - - `settings`: An object with the same schema as the `settings` entry in the [Input JSON](https://solidity.readthedocs.io/en/v0.7.4/using-the-compiler.html#input-description). + - `settings`: An object with the same schema as the `settings` entry in the [Input JSON](https://docs.soliditylang.org/en/latest/using-the-compiler.html#input-description). - An object which describes multiple compilers and their respective configurations. It contains the following: @@ -208,3 +208,20 @@ You can configure how your tests are run using the `mocha` entry, which accepts ## Quickly integrating other tools from Hardhat's config Hardhat's config file will always run before any task, so you can use it to integrate with other tools, like importing `@babel/register`. + +## Default EVM Version + +The default EVM version is determined by solc's choice for a given compiler version. To specify a different EVM version, modify your `hardhat.config.js`: + +```js +module.exports = { + solidity: { + version: "0.8.21", + settings: { + evmVersion: "shanghai", + }, + }, +}; +``` + +Since version `0.8.20`, solc's EVM default is `shanghai`, which can lead to issues in chains that don't support the `PUSH0` opcode. To address this, starting from `0.8.20` Hardhat defaults to `paris`. This value can be overridden by using the above configuration. diff --git a/docs/src/content/hardhat-runner/docs/getting-started/index.md b/docs/src/content/hardhat-runner/docs/getting-started/index.md index b1bc062deb..d21a5f4c8c 100644 --- a/docs/src/content/hardhat-runner/docs/getting-started/index.md +++ b/docs/src/content/hardhat-runner/docs/getting-started/index.md @@ -55,7 +55,7 @@ yarn add --dev hardhat :::: -To use your local installation of Hardhat, you need to use `npx` to run it (i.e. `npx hardhat`). +To use your local installation of Hardhat, you need to use `npx` to run it (i.e. `npx hardhat init`). ## Quick Start @@ -67,10 +67,10 @@ If you are using Windows, we **strongly recommend** using [WSL 2](https://docs.m We will explore the basics of creating a Hardhat project with a sample contract, tests of that contract, and a script to deploy it. -To create the sample project, run `npx hardhat` in your project folder: +To create the sample project, run `npx hardhat init` in your project folder: ``` -$ npx hardhat +$ npx hardhat init 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 @@ -80,11 +80,12 @@ $ npx hardhat 888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. 888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 -👷 Welcome to Hardhat v2.9.9 👷‍ +👷 Welcome to Hardhat v{HARDHAT_VERSION} 👷‍ ? What do you want to do? … ❯ Create a JavaScript project Create a TypeScript project + Create a TypeScript project (with Viem) Create an empty hardhat.config.js Quit ``` @@ -150,7 +151,7 @@ If you created a TypeScript project, this task will also generate TypeScript bin ### Testing your contracts -Your project comes with tests that use [Mocha](https://mochajs.org), [Chai](https://www.chaijs.com), and [Ethers.js](https://docs.ethers.io/v5). +Your project comes with tests that use [Mocha](https://mochajs.org), [Chai](https://www.chaijs.com), and [Ethers.js](https://docs.ethers.org/v6/). If you take a look in the `test/` folder, you'll see a test file: @@ -178,7 +179,7 @@ You can run your tests with `npx hardhat test`: ``` $ npx hardhat test -Generating typings for: 2 artifacts in dir: typechain-types for target: ethers-v5 +Generating typings for: 2 artifacts in dir: typechain-types for target: ethers-v6 Successfully generated 6 typings! Compiled 2 Solidity files successfully @@ -238,6 +239,12 @@ Compiled 2 Solidity files successfully ### Deploying your contracts +:::tip + +Try [Hardhat Ignition](/ignition) for your deployments! Our new declarative system for deploying smart contracts without getting caught up in execution details. + +::: + Next, to deploy the contract we will use a Hardhat script. Inside the `scripts/` folder you will find a file with the following code: diff --git a/docs/src/content/hardhat-runner/docs/guides/_dirinfo.yaml b/docs/src/content/hardhat-runner/docs/guides/_dirinfo.yaml index 9d3b2adfa2..d45c59fac7 100644 --- a/docs/src/content/hardhat-runner/docs/guides/_dirinfo.yaml +++ b/docs/src/content/hardhat-runner/docs/guides/_dirinfo.yaml @@ -10,6 +10,5 @@ order: - /hardhat-console - /typescript - /command-line-completion - - title: Migrating away from hardhat-waffle - href: /migrating-from-hardhat-waffle + - /configuration-variables - /getting-help diff --git a/docs/src/content/hardhat-runner/docs/guides/command-line-completion.md b/docs/src/content/hardhat-runner/docs/guides/command-line-completion.md index 15417e731e..4fa85c2620 100644 --- a/docs/src/content/hardhat-runner/docs/guides/command-line-completion.md +++ b/docs/src/content/hardhat-runner/docs/guides/command-line-completion.md @@ -48,3 +48,16 @@ This approach has the downside of there being no way to provide autocomplete sug First, make sure you installed the autocompletion script with `hardhat-completion install`, then either reload your shell or open a new terminal to try again. If you still have problems, make sure that your Hardhat config doesn't have any issues. You can do this by just running `hh`. If the command prints the help message, then your config is fine. If not, you'll see what the problem is. + +If you are using zsh, these are some other things you can try: + +- Run `declare -f _hh_completion`. If you don't get any output, then the completion script is not being loaded. +- Check that your `.zshrc` has a line that loads a `__tabtab.zsh` file. This is the file that in turn should load the `hh` completion. +- Check that this `__tabtab.zsh` exists, and that there is a `hh.zsh` file in that same directory. +- Make sure that your `.zshrc` is autoloading `compinit`. This means that you should have something like `autoload -U compinit && compinit` before the `__tabtab.zsh` line. + +If you are using bash, try this: + +- Run `complete -p hh`. You should get `complete -o default -F _hh_completion hh` as the output. +- Check that your `.bashrc` has a line that loads a `__tabtab.bash` file. This is the file that in turn should load the `hh` completion. +- Check that this `__tabtab.bash` exists, and that there is a `hh.bash` file in that same directory. diff --git a/docs/src/content/hardhat-runner/docs/guides/compile-contracts.md b/docs/src/content/hardhat-runner/docs/guides/compile-contracts.md index f7cb9a426f..a3c9b3dc7a 100644 --- a/docs/src/content/hardhat-runner/docs/guides/compile-contracts.md +++ b/docs/src/content/hardhat-runner/docs/guides/compile-contracts.md @@ -27,7 +27,7 @@ If you need to customize the Solidity compiler options, then you can do so throu ```js module.exports = { - solidity: "0.8.9", + solidity: "{RECOMMENDED_SOLC_VERSION}", }; ``` @@ -44,7 +44,7 @@ The expanded usage allows for more control of the compiler: ```js module.exports = { solidity: { - version: "0.8.9", + version: "{RECOMMENDED_SOLC_VERSION}", settings: { optimizer: { enabled: true, diff --git a/docs/src/content/hardhat-runner/docs/guides/configuration-variables.md b/docs/src/content/hardhat-runner/docs/guides/configuration-variables.md new file mode 100644 index 0000000000..782c035335 --- /dev/null +++ b/docs/src/content/hardhat-runner/docs/guides/configuration-variables.md @@ -0,0 +1,156 @@ +# Configuration variables + +A Hardhat project can use configuration variables for user-specific values or for data that shouldn't be included in the code repository. + +These variables are set via tasks in the `vars` scope and can be retrieved in the config using the `vars` object. For example, if you do this in your config: + +```js +const INFURA_API_KEY = vars.get("INFURA_API_KEY"); + +module.exports = { + networks: { + sepolia: { + url: `https://sepolia.infura.io/v3/${INFURA_API_KEY}`, + }, + }, +}; +``` + +And then you set the `INFURA_API_KEY` with: + +``` +$ npx hardhat vars set INFURA_API_KEY +✔ Enter value: ******************************** +``` + +Then the URL for the `sepolia` network will be formed with the configuration variable you set. + +:::warning + +Configuration variables are stored in plain text on your disk. Avoid using this feature for data you wouldn’t normally save in an unencrypted file. Run `npx hardhat vars path` to find the storage's file location. + +::: + +## Managing configuration variables + +Use the tasks under the `vars` scope to manage your configuration variables. + +### `vars set` + +Assigns a value to a configuration variable, or creates one if it doesn't exist: + +``` +$ npx hardhat vars set TEST_API_KEY +``` + +### `vars get` + +Displays a configuration variable's value: + +``` +$ npx hardhat vars get TEST_API_KEY +1234abcd1234abcd1234abcd1234abcd +``` + +### `vars list` + +Prints all the configuration variables stored on your machine: + +``` +$ npx hardhat vars list +TEST_API_KEY +TEST_PK +``` + +### `vars delete` + +Removes a configuration variable: + +``` +$ npx hardhat vars delete TEST_API_KEY +``` + +## Using variables in your configuration file + +Configuration variables that you have previously stored can be retrieved within your Hardhat configuration file. Use the `vars.get` method to obtain them: + +```js +const { vars } = require("hardhat/config"); + +const INFURA_API_KEY = vars.get("INFURA_API_KEY"); + +module.exports = { + sepolia: { + url: `https://sepolia.infura.io/v3/${INFURA_API_KEY}`, + accounts: [vars.get("TEST_PK")], + }, +}; +``` + +For variables that may not exist, you can specify a default value as the second parameter: + +```js +const salt = vars.get("DEPLOY_SALT", "12345"); +``` + +You can also use `vars.has` to check if a variable exists: + +```js +const accounts = vars.has("TEST_PK") ? [vars.get("TEST_PK")] : []; +``` + +## Setting up variables for a project + +The `vars setup` task lists all the configuration variables used by the project. This is useful to know which ones you need to set up before running the project. + +### Mandatory vs. optional variables + +The output of `vars setup` separates mandatory variables from optional ones. + +A variable is considered mandatory if the configuration cannot be loaded without it. This happens when you retrieve the variable without a default value: + +```js +vars.get("MANDATORY_VARIABLE"); +``` + +However, when combined with `vars.has`, the variable is considered optional: + +```js +vars.has("OPTIONAL_VARIABLE") ? [vars.get("OPTIONAL_VARIABLE")] : []; +``` + +Variables always used with a default value are also considered optional: + +```js +vars.get("ANOTHER_OPTIONAL_VARIABLE", "DEFAULT_VALUE"); +``` + +## Migrating from `dotenv` + +If you are using `dotenv`, we recommend you migrate to our built-in configuration variables manager. This will make it easier to share values across various Hardhat projects, and will minimize the risk of exposing sensitive data by accidentally uploading a `.env` file to a public repository. + +To migrate from `dotenv`, follow these steps: + +1. Replace `process.env.KEY` references in your configuration with `vars.get("KEY")`. Replace conditions like `process.env.KEY !== undefined` with `vars.has("KEY")` +2. Run `npx hardhat vars setup` to identify all the variables that are used by your project. +3. Use `npx hardhat vars set` for each variable as indicated by the setup task. +4. After substituting all instances of `process.env`, you may uninstall the `dotenv` package and remove its import from your configuration. + +## Overriding configuration variables with environment variables + +Environment variables prefixed with `HARDHAT_VAR_` can be used to override the values of configuration variables. + +For example, if your config uses `vars.get("MY_KEY")` and you run Hardhat with the environment variable `HARDHAT_VAR_MY_KEY` set to some value, then that value is going to be used: + +```sh +HARDHAT_VAR_MY_KEY=123 npx hardhat some-task +``` + +Keep in mind that changes to environment variables during the configuration execution are not recognized. For example, if you do this: + +```js +process.env.HARDHAT_VAR_MY_KEY = "123"; +console.log(vars.get("MY_KEY")); +``` + +Then the value of `MY_KEY` _won't_ be `"123"`. diff --git a/docs/src/content/hardhat-runner/docs/guides/deploying.md b/docs/src/content/hardhat-runner/docs/guides/deploying.md index c16c9ba40f..9c93208e5e 100644 --- a/docs/src/content/hardhat-runner/docs/guides/deploying.md +++ b/docs/src/content/hardhat-runner/docs/guides/deploying.md @@ -1,8 +1,12 @@ # Deploying your contracts -When it comes to deploying, there are no official plugins that implement a deployment system for Hardhat yet. We are working on it. +:::tip -In the meantime, we recommend deploying your smart contracts using scripts, or using [the hardhat-deploy community plugin](https://github.com/wighawag/hardhat-deploy/tree/master). You can deploy the `Lock` contract from the sample project with a deployment script like this: +Try [Hardhat Ignition](/ignition) for your deployments! Our new declarative system for deploying smart contracts without getting caught up in execution details. + +::: + +When it comes to deploying, you can use a deployment system like [Hardhat Ignition](/ignition) or you can deploy your smart contracts using scripts. You can deploy the `Lock` contract from the sample project with a deployment script like this: ::::tabsgroup{options="TypeScript,JavaScript"} diff --git a/docs/src/content/hardhat-runner/docs/guides/hardhat-console.md b/docs/src/content/hardhat-runner/docs/guides/hardhat-console.md index 7bf0def7a4..451a30a51e 100644 --- a/docs/src/content/hardhat-runner/docs/guides/hardhat-console.md +++ b/docs/src/content/hardhat-runner/docs/guides/hardhat-console.md @@ -25,7 +25,7 @@ For example, you'll have access in the global scope to the `config` object: > ``` -And if you followed the [Getting started guide](../getting-started) or installed `@nomiclabs/hardhat-ethers`, the `ethers` object: +And if you followed the [Getting started guide](../getting-started) or installed `@nomicfoundation/hardhat-ethers`, the `ethers` object: ``` > ethers diff --git a/docs/src/content/hardhat-runner/docs/guides/project-setup.md b/docs/src/content/hardhat-runner/docs/guides/project-setup.md index 0751641054..dff9cc1bde 100644 --- a/docs/src/content/hardhat-runner/docs/guides/project-setup.md +++ b/docs/src/content/hardhat-runner/docs/guides/project-setup.md @@ -68,10 +68,10 @@ yarn add --dev hardhat :::: -If you run `npx hardhat` now, you will be shown some options to facilitate project creation: +If you run `npx hardhat init` now, you will be shown some options to facilitate project creation: ``` -$ npx hardhat +$ npx hardhat init 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 @@ -81,11 +81,12 @@ $ npx hardhat 888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. 888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 -Welcome to Hardhat v2.10.0 +Welcome to Hardhat v{HARDHAT_VERSION} ? What do you want to do? … ▸ Create a JavaScript project Create a TypeScript project + Create a TypeScript project (with Viem) Create an empty hardhat.config.js Quit ``` @@ -95,7 +96,7 @@ If you select _Create an empty hardhat.config.js_, Hardhat will create a `hardha ```js /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { - solidity: "0.8.9", + solidity: "{RECOMMENDED_SOLC_VERSION}", }; ``` @@ -128,7 +129,7 @@ When it comes to testing your contracts, the sample project comes with some usef - The built-in [Hardhat Network](/hardhat-network/docs) as the development network to test on, along with the [Hardhat Network Helpers](/hardhat-network-helpers) library to manipulate this network. - [Mocha](https://mochajs.org/) as the test runner, [Chai](https://chaijs.com/) as the assertion library, and the [Hardhat Chai Matchers](/hardhat-chai-matchers) to extend Chai with contracts-related functionality. -- The [`ethers.js`](https://docs.ethers.io/v5/) library to interact with the network and with contracts. +- The [`ethers.js`](https://docs.ethers.org/v6/) library to interact with the network and with contracts. As well as other useful plugins. You can learn more about this in the [Testing contracts guide](./test-contracts.md). @@ -154,7 +155,7 @@ To use a plugin, the first step is always to install it using npm or yarn, follo import "@nomicfoundation/hardhat-toolbox"; export default { - solidity: "0.8.9", + solidity: "{RECOMMENDED_SOLC_VERSION}", }; ``` @@ -166,7 +167,7 @@ export default { require("@nomicfoundation/hardhat-toolbox"); module.exports = { - solidity: "0.8.9", + solidity: "{RECOMMENDED_SOLC_VERSION}", }; ``` diff --git a/docs/src/content/hardhat-runner/docs/guides/test-contracts.md b/docs/src/content/hardhat-runner/docs/guides/test-contracts.md index d7e4e93552..f967343d76 100644 --- a/docs/src/content/hardhat-runner/docs/guides/test-contracts.md +++ b/docs/src/content/hardhat-runner/docs/guides/test-contracts.md @@ -2,7 +2,7 @@ After [compiling your contracts](./compile-contracts.md), the next step is to write some tests to verify that they work as intended. -This guide explains our recommended approach for testing contracts in Hardhat. It relies on [ethers](https://docs.ethers.io/v5/) to connect to [Hardhat Network](/hardhat-network) and on [Mocha](https://mochajs.org/) and [Chai](https://www.chaijs.com/) for the tests. It also uses our custom [Chai matchers](/hardhat-chai-matchers) and our [Hardhat Network Helpers](/hardhat-network-helpers) to make it easier to write clean test code. These packages are part of the Hardhat Toolbox plugin; if you followed the previous guides, you should already have them installed. +This guide explains our recommended approach for testing contracts in Hardhat. It relies on [ethers](https://docs.ethers.org/v6/) to connect to [Hardhat Network](/hardhat-network) and on [Mocha](https://mochajs.org/) and [Chai](https://www.chaijs.com/) for the tests. It also uses our custom [Chai matchers](/hardhat-chai-matchers) and our [Hardhat Network Helpers](/hardhat-network-helpers) to make it easier to write clean test code. These packages are part of the Hardhat Toolbox plugin; if you followed the previous guides, you should already have them installed. While this is our recommended test setup, Hardhat is flexible: you can customize the approach or take a completely different path with other tools. @@ -27,7 +27,7 @@ For our first test we’ll deploy the `Lock` contract and assert that the unlock ```tsx import { expect } from "chai"; import hre from "hardhat"; -import { time } from "@nomicfoundation/hardhat-network-helpers"; +import { time } from "@nomicfoundation/hardhat-toolbox/network-helpers"; describe("Lock", function () { it("Should set the right unlockTime", async function () { @@ -37,8 +37,9 @@ describe("Lock", function () { // deploy a lock contract where funds can be withdrawn // one year in the future - const Lock = await hre.ethers.getContractFactory("Lock"); - const lock = await Lock.deploy(unlockTime, { value: lockedAmount }); + const lock = await ethers.deployContract("Lock", [unlockTime], { + value: lockedAmount, + }); // assert that the value is correct expect(await lock.unlockTime()).to.equal(unlockTime); @@ -53,7 +54,7 @@ describe("Lock", function () { ```js const { expect } = require("chai"); const hre = require("hardhat"); -const { time } = require("@nomicfoundation/hardhat-network-helpers"); +const { time } = require("@nomicfoundation/hardhat-toolbox/network-helpers"); describe("Lock", function () { it("Should set the right unlockTime", async function () { @@ -63,8 +64,9 @@ describe("Lock", function () { // deploy a lock contract where funds can be withdrawn // one year in the future - const Lock = await hre.ethers.getContractFactory("Lock"); - const lock = await Lock.deploy(unlockTime, { value: lockedAmount }); + const lock = await ethers.deployContract("Lock", [unlockTime], { + value: lockedAmount, + }); // assert that the value is correct expect(await lock.unlockTime()).to.equal(unlockTime); @@ -78,7 +80,7 @@ describe("Lock", function () { First we import the things we are going to use: the [`expect`](https://www.chaijs.com/api/bdd/) function from `chai` to write our assertions, the [Hardhat Runtime Environment](../advanced/hardhat-runtime-environment.md) (`hre`), and the [network helpers](/hardhat-network-helpers) to interact with the Hardhat Network. After that we use the `describe` and `it` functions, which are global Mocha functions used to describe and group your tests. (You can read more about Mocha [here](https://mochajs.org/#getting-started).) -The test itself is what’s inside the callback argument to the `it` function. First we set the values for the amount we want to lock (in [wei](https://ethereum.org/en/glossary/#wei)) and the unlock time. For the latter we use [`time.latest`](), a network helper that returns the timestamp of the last mined block. Then we deploy the contract itself: first we get a [`ContractFactory`](https://docs.ethers.io/v5/single-page/#/v5/api/contract/contract-factory/) for the `Lock` contract and then we deploy it, passing the unlock time as its constructor argument. We also pass an object with the transaction parameters. This is optional, but we'll use it to send some ETH by setting its `value` field. +The test itself is what’s inside the callback argument to the `it` function. First we set the values for the amount we want to lock (in [wei](https://ethereum.org/en/glossary/#wei)) and the unlock time. For the latter we use [`time.latest`](), a network helper that returns the timestamp of the last mined block. Then we deploy the contract itself: we call `ethers.deployContract` with the name of the contract we want to deploy and an array of constructor arguments that has the unlock time. We also pass an object with the transaction parameters. This is optional, but we'll use it to send some ETH by setting its `value` field. Finally, we check that the value returned by the `unlockTime()` [getter](https://docs.soliditylang.org/en/v0.8.13/contracts.html#getter-functions) in the contract matches the value that we used when we deployed it. Since all the functions on a contract are async, we have to use the `await` keyword to get its value; otherwise, we would be comparing a promise with a number and this would always fail. @@ -171,8 +173,9 @@ describe("Lock", function () { const ONE_YEAR_IN_SECS = 365 * 24 * 60 * 60; unlockTime = (await helpers.time.latest()) + ONE_YEAR_IN_SECS; - const Lock = await ethers.getContractFactory("Lock"); - lock = await Lock.deploy(unlockTime, { value: lockedAmount }); + lock = await ethers.deployContract("Lock", [unlockTime], { + value: lockedAmount, + }); }); it("some test", async function () { @@ -195,8 +198,9 @@ describe("Lock", function () { const ONE_YEAR_IN_SECS = 365 * 24 * 60 * 60; unlockTime = (await helpers.time.latest()) + ONE_YEAR_IN_SECS; - const Lock = await ethers.getContractFactory("Lock"); - lock = await Lock.deploy(unlockTime, { value: lockedAmount }); + lock = await ethers.deployContract("Lock", [unlockTime], { + value: lockedAmount, + }); }); it("some test", async function () { @@ -216,17 +220,25 @@ However, there are two problems with this approach: The `loadFixture` helper in the Hardhat Network Helpers fixes both of these problems. This helper receives a _fixture_, a function that sets up the chain to some desired state. The first time `loadFixture` is called, the fixture is executed. But the second time, instead of executing the fixture again, `loadFixture` will reset the state of the network to the point where it was right after the fixture was executed. This is faster, and it undoes any state changes done by the previous test. -This is how our two first tests look like when a fixture is used: +This is how our tests look like when a fixture is used: ```tsx +const { expect } = require("chai"); +const hre = require("hardhat"); +const { + loadFixture, + time, +} = require("@nomicfoundation/hardhat-toolbox/network-helpers"); + describe("Lock", function () { async function deployOneYearLockFixture() { const lockedAmount = 1_000_000_000; const ONE_YEAR_IN_SECS = 365 * 24 * 60 * 60; const unlockTime = (await time.latest()) + ONE_YEAR_IN_SECS; - const Lock = await ethers.getContractFactory("Lock"); - const lock = await Lock.deploy(unlockTime, { value: lockedAmount }); + const lock = await ethers.deployContract("Lock", [unlockTime], { + value: lockedAmount, + }); return { lock, unlockTime, lockedAmount }; } @@ -243,6 +255,29 @@ describe("Lock", function () { await expect(lock.withdraw()).to.be.revertedWith("You can't withdraw yet"); }); + + it("Should transfer the funds to the owner", async function () { + const { lock, unlockTime } = await loadFixture(deployOneYearLockFixture); + + await time.increaseTo(unlockTime); + + // this will throw if the transaction reverts + await lock.withdraw(); + }); + + it("Should revert with the right error if called from another account", async function () { + const { lock, unlockTime } = await loadFixture(deployOneYearLockFixture); + + const [owner, otherAccount] = await ethers.getSigners(); + + // we increase the time of the chain to pass the first check + await time.increaseTo(unlockTime); + + // We use lock.connect() to send a transaction from another account + await expect(lock.connect(otherAccount).withdraw()).to.be.revertedWith( + "You aren't the owner" + ); + }); }); ``` diff --git a/docs/src/content/hardhat-runner/docs/guides/typescript.md b/docs/src/content/hardhat-runner/docs/guides/typescript.md index d54671b9e8..29afc3a69e 100644 --- a/docs/src/content/hardhat-runner/docs/guides/typescript.md +++ b/docs/src/content/hardhat-runner/docs/guides/typescript.md @@ -80,7 +80,7 @@ yarn add --dev chai @types/node @types/mocha @types/chai You can easily turn a JavaScript Hardhat config file into a TypeScript one. Let's see how this is done starting with a fresh Hardhat project. -Open your terminal, go to an empty folder, run `npx hardhat`, and go through the steps to create a JavaScript project. When you're done your project directory should look something like this: +Open your terminal, go to an empty folder, run `npx hardhat init`, and go through the steps to create a JavaScript project. When you're done your project directory should look something like this: ``` $ ls -l diff --git a/docs/src/content/hardhat-runner/docs/other-components/_dirinfo.yaml b/docs/src/content/hardhat-runner/docs/other-components/_dirinfo.yaml index 193d21e233..c0e2946e01 100644 --- a/docs/src/content/hardhat-runner/docs/other-components/_dirinfo.yaml +++ b/docs/src/content/hardhat-runner/docs/other-components/_dirinfo.yaml @@ -3,6 +3,8 @@ section-title: Other Hardhat components order: - href: /../../../hardhat-network/docs title: Hardhat Network + - href: /../../../ignition/docs + title: Hardhat Ignition - href: /../../../hardhat-vscode/docs title: Hardhat VSCode - href: /../../../hardhat-chai-matchers/docs diff --git a/docs/src/content/hardhat-runner/docs/other-guides/truffle-migration.md b/docs/src/content/hardhat-runner/docs/other-guides/truffle-migration.md index 097f60400e..1bb1a9eb55 100644 --- a/docs/src/content/hardhat-runner/docs/other-guides/truffle-migration.md +++ b/docs/src/content/hardhat-runner/docs/other-guides/truffle-migration.md @@ -4,7 +4,129 @@ Hardhat is a task runner that facilitates building Ethereum smart contracts. It The bulk of Hardhat's functionality comes from plugins, and as a developer you're free to choose the ones you want to use. There are plugins for Truffle 4 and 5 that make migrating to Hardhat easy. -To migrate an existing Truffle project to Hardhat there are two main things to consider: testing and deployment. +To migrate an existing Truffle project to Hardhat you need to install the proper dependencies and adapt three parts of your project: the configuration, the tests, and the deployments. + +### Installation + +The first thing you need to do is to install Hardhat and the proper plugin. This guide assumes that you'll be using the `@nomiclabs/hardhat-truffle5` plugin. + +::::tabsgroup{options="npm 7+,npm 6,yarn"} + +:::tab{value="npm 7+"} + +``` +npm install --save-dev hardhat @nomiclabs/hardhat-truffle5 +``` + +::: + +:::tab{value="npm 6"} + +``` +npm install --save-dev hardhat @nomiclabs/hardhat-truffle5 @nomiclabs/hardhat-web3 'web3@^1.0.0-beta.36' +``` + +::: + +:::tab{value=yarn} + +``` +yarn add --dev hardhat @nomiclabs/hardhat-truffle5 @nomiclabs/hardhat-web3 'web3@^1.0.0-beta.36' +``` + +::: + +:::: + +### Configuration + +After installing the necessary dependencies, you need to create a `hardhat.config.js` file. This file is the equivalent of Truffle's `truffle-config.js` file, and it's where you configure Hardhat and its plugins. We'll be using JavaScript in this guide, but you can learn how to use Hardhat with TypeScript in [this guide](/hardhat-runner/docs/guides/typescript). + +Create a `hardhat.config.js` file with the following contents: + +```js +require("@nomiclabs/hardhat-truffle5"); + +module.exports = { + solidity: { + // ... + }, + networks: { + // ... + }, +}; +``` + +We'll explain how to adapt the compiler and the networks configurations. For other entries in your `truffle-config.js` file, you can compare [Truffle's](https://trufflesuite.com/docs/truffle/reference/configuration/) and [Hardhat's](/hardhat-runner/docs/config) configuration references. Keep in mind that some features might not be portable. + +#### Compiler configuration + +The compiler configuration is the easiest to migrate. You just need to copy the content of the `compilers.solc` object from your `truffle-config.js` file to the `solidity` entry in your `hardhat.config.js` file. For example, if your Truffle config is: + +```js +module.exports = { + compilers: { + solc: { + version: "0.8.20", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + }, +}; +``` + +then your Hardhat config should be: + +```js +module.exports = { + solidity: { + version: "0.8.20", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, +}; +``` + +Keep in mind that only the `version` and `settings` keys are supported. + +#### Network configuration + +The network configuration is a bit more complex. You need to copy the content of the `networks` object from your `truffle-config.js` file to the `networks` entry in your `hardhat.config.js` file and adapt some fields. For example, if your Truffle config is: + +```js +module.exports = { + networks: { + sepolia: { + host: "http://sepolia.example.com", + port: 8545, + network_id: 11155111, + }, + }, +}; +``` + +then your Hardhat config should be: + +```js +module.exports = { + networks: { + sepolia: { + url: "http://sepolia.example.com:8545", + chainId: 11155111, + }, + }, +}; +``` + +Again, not every field is supported. Compare the [Truffle config reference](https://trufflesuite.com/docs/truffle/reference/configuration/#networks) and the [Hardhat config reference](/hardhat-runner/docs/config#json-rpc-based-networks) to learn more. ### Testing diff --git a/docs/src/content/hardhat-runner/docs/other-guides/truffle-testing.md b/docs/src/content/hardhat-runner/docs/other-guides/truffle-testing.md index e291fd71f6..1d0cdf2e34 100644 --- a/docs/src/content/hardhat-runner/docs/other-guides/truffle-testing.md +++ b/docs/src/content/hardhat-runner/docs/other-guides/truffle-testing.md @@ -21,12 +21,12 @@ npm init --yes npm install --save-dev hardhat ``` -Now run `npx hardhat` inside your project folder and select `Create an empty hardhat.config.js`. +Now run `npx hardhat init` inside your project folder and select `Create an empty hardhat.config.js`. Let's now install the `Truffle` and `Web3.js` plugins, as well as `web3.js` itself. ``` -npm install --save-dev @nomiclabs/hardhat-truffle5 @nomiclabs/hardhat-web3 web3 +npm install --save-dev @nomiclabs/hardhat-truffle5 @nomiclabs/hardhat-web3 'web3@^1.0.0-beta.36' ``` Enable the Truffle 5 plugin on your Hardhat config file by requiring it: diff --git a/docs/src/content/hardhat-runner/docs/other-guides/waffle-testing.md b/docs/src/content/hardhat-runner/docs/other-guides/waffle-testing.md index 1c8521bd04..94a9c3332d 100644 --- a/docs/src/content/hardhat-runner/docs/other-guides/waffle-testing.md +++ b/docs/src/content/hardhat-runner/docs/other-guides/waffle-testing.md @@ -8,7 +8,7 @@ Read [this guide](/hardhat-runner/docs/guides/test-contracts.md) to learn about Writing smart contract tests in Hardhat is done using JavaScript or TypeScript. -In this guide, we'll show you how to use [Ethers.js](https://docs.ethers.io/), a JavaScript library to interact with Ethereum, and [Waffle](https://getwaffle.io/) a simple smart contract testing library built on top of it. +In this guide, we'll show you how to use [Ethers.js](https://docs.ethers.org/v6/), a JavaScript library to interact with Ethereum, and [Waffle](https://getwaffle.io/) a simple smart contract testing library built on top of it. Let's see how to use it starting from an empty Hardhat project. @@ -20,10 +20,10 @@ Ethers and Waffle support TypeScript. Learn how to set up Hardhat with TypeScrip ## Setting up -[Install Hardhat](/hardhat-runner/docs/getting-started/index.md#installation) on an empty directory. When done, run `npx hardhat`: +[Install Hardhat](/hardhat-runner/docs/getting-started/index.md#installation) on an empty directory. When done, run `npx hardhat init`: ``` -$ npx hardhat +$ npx hardhat init 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 @@ -33,11 +33,12 @@ $ npx hardhat 888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. 888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 -Welcome to Hardhat v2.10.0 +Welcome to Hardhat v{HARDHAT_VERSION} ? What do you want to do? … ▸ Create a JavaScript project Create a TypeScript project + Create a TypeScript project (with Viem) Create an empty hardhat.config.js Quit ``` @@ -59,7 +60,7 @@ npm install --save-dev chai @nomiclabs/hardhat-waffle :::tab{value="npm 6"} ``` -npm install --save-dev chai @nomiclabs/hardhat-waffle ethereum-waffle @nomiclabs/hardhat-ethers ethers +npm install --save-dev chai @nomiclabs/hardhat-waffle ethereum-waffle @nomiclabs/hardhat-ethers ethers@5 ``` ::: @@ -67,7 +68,7 @@ npm install --save-dev chai @nomiclabs/hardhat-waffle ethereum-waffle @nomiclabs :::tab{value="yarn"} ``` -yarn add --dev chai @nomiclabs/hardhat-waffle ethereum-waffle @nomiclabs/hardhat-ethers ethers +yarn add --dev chai @nomiclabs/hardhat-waffle ethereum-waffle @nomiclabs/hardhat-ethers ethers@5 ``` ::: @@ -229,7 +230,7 @@ A `Signer` in Ethers.js is an object that represents an Ethereum account. It's u :::tip -To learn more about `Signer`, you can look at the [Signers documentation](https://docs.ethers.io/v5/api/signer/#Wallet). +To learn more about `Signer`, you can look at the [Signers documentation](https://docs.ethers.org/v6/api/providers/#Signer). ::: diff --git a/docs/src/content/hardhat-runner/docs/reference/_dirinfo.yaml b/docs/src/content/hardhat-runner/docs/reference/_dirinfo.yaml index 0fddad6ee8..8bdc4f093a 100644 --- a/docs/src/content/hardhat-runner/docs/reference/_dirinfo.yaml +++ b/docs/src/content/hardhat-runner/docs/reference/_dirinfo.yaml @@ -3,3 +3,4 @@ section-title: Reference order: - /stability-guarantees - /solidity-support + - /environment-variables diff --git a/docs/src/content/hardhat-runner/docs/reference/environment-variables.md b/docs/src/content/hardhat-runner/docs/reference/environment-variables.md new file mode 100644 index 0000000000..78345a5b05 --- /dev/null +++ b/docs/src/content/hardhat-runner/docs/reference/environment-variables.md @@ -0,0 +1,38 @@ +# Environment variables + +You can use certain environment variables to configure Hardhat's behavior. + +## Setting parameters with environment variables + +Every global flag or parameter accepted by Hardhat can also be specified using an environment variable. For example, to select the network you normally do: + +```bash +npx hardhat --network localhost run scripts/deploy.js +``` + +But you can get the same behavior by setting the `HARDHAT_NETWORK` environment variable: + +```bash +HARDHAT_NETWORK=localhost npx hardhat run scripts/deploy.js +``` + +In general, each flag or parameter of the form `--some-option` can be set using the `HARDHAT_SOME_OPTION` environment variable. For flags, which don't accept values, you can enable or disable them by setting them to `true` or `false`: + +```bash +HARDHAT_VERBOSE=true npx hardhat run scripts/deploy.js +``` + +Options specified with the `--some-option` form have precedence over environment variables. That is, if you run: + +```bash +HARDHAT_NETWORK=mainnet npx hardhat run --network localhost scripts/deploy.js +``` + +then the `localhost` network is going to be used. + +## Other environment variables + +Besides the environment variables that correspond to global parameters, there are some special environment variables that affect how Hardhat works. Variables starting with `HARDHAT_EXPERIMENTAL_` are experimental and could be removed in future versions. + +- `HARDHAT_DISABLE_TELEMETRY_PROMPT`: if set to `true`, Hardhat won't prompt the user asking for telemetry consent. This prompt is already not shown in CIs or when the output is not a TTY, but in some cases (like automated scripts that write to stdout) you might want to set this variable. +- `HARDHAT_EXPERIMENTAL_ALLOW_NON_LOCAL_INSTALLATION`: if set to `true`, Hardhat won't check if the `hardhat` package is locally installed. diff --git a/docs/src/content/hardhat-runner/docs/reference/solidity-support.md b/docs/src/content/hardhat-runner/docs/reference/solidity-support.md index 39516b2ded..d0aa7b4259 100644 --- a/docs/src/content/hardhat-runner/docs/reference/solidity-support.md +++ b/docs/src/content/hardhat-runner/docs/reference/solidity-support.md @@ -13,7 +13,7 @@ These are the versions of Solidity that you can expect to fully work with Hardha - Any 0.5.x version starting from 0.5.1 - Any 0.6.x version - Any 0.7.x version -- Any 0.8.x version up to and including 0.8.18 +- Any 0.8.x version up to and including 0.8.23 We recommend against using Hardhat with newer, unsupported versions of Solidity. But if you need to do so; please read on. @@ -35,7 +35,7 @@ If you use the `viaIR` option, we recommend you set the [optimization step seque ``` solidity: { - version: "0.8.17", // any version you want + version: "{RECOMMENDED_SOLC_VERSION}", // any version you want settings: { viaIR: true, optimizer: { diff --git a/docs/src/content/hardhat-runner/docs/reference/stability-guarantees.md b/docs/src/content/hardhat-runner/docs/reference/stability-guarantees.md index d925abdda2..825d5c247f 100644 --- a/docs/src/content/hardhat-runner/docs/reference/stability-guarantees.md +++ b/docs/src/content/hardhat-runner/docs/reference/stability-guarantees.md @@ -17,7 +17,7 @@ We will only introduce these changes when a hardfork activates on Mainnet. This Hardhat supports every currently maintained LTS Node.js version, up to two months after its end-of-life. After that period of time, we will stop testing against it, and print a warning when trying to use it. At that point, we will release a new minor version. -We recommend running Hardhat using the current LTS Node.js version. You can learn about it [here](https://nodejs.org/en/about/releases/). +We recommend running Hardhat using the current LTS Node.js version. You can learn about it [here](https://nodejs.org/en/about/previous-releases). ## How to avoid the breaking changes introduced by Hardhat diff --git a/docs/src/content/hardhat-runner/docs/supporter-guides/oracles.md b/docs/src/content/hardhat-runner/docs/supporter-guides/oracles.md index 4a1c7e90ca..79d4f400d2 100644 --- a/docs/src/content/hardhat-runner/docs/supporter-guides/oracles.md +++ b/docs/src/content/hardhat-runner/docs/supporter-guides/oracles.md @@ -144,7 +144,7 @@ require("@chainlink/hardhat-chainlink"); :::: -Then you can just expand the deployment script which will deploy the above `VRFv2Consumer` smart contract and do the VRF Managment part. +Then you can just expand the deployment script which will deploy the above `VRFv2Consumer` smart contract and do the VRF Management part. To do so, first prepare the `hardhat.config` file for the deployment on the Goerli network: diff --git a/docs/src/content/hardhat-runner/plugins/_dirinfo.yaml b/docs/src/content/hardhat-runner/plugins/_dirinfo.yaml index 1728c8daff..36210f0172 100644 --- a/docs/src/content/hardhat-runner/plugins/_dirinfo.yaml +++ b/docs/src/content/hardhat-runner/plugins/_dirinfo.yaml @@ -2,10 +2,14 @@ section-type: plugins section-title: Plugins order: - "@nomicfoundation/hardhat-toolbox" + - "@nomicfoundation/hardhat-toolbox-viem" - "@nomicfoundation/hardhat-chai-matchers" - - "@nomiclabs/hardhat-ethers" + - "@nomicfoundation/hardhat-ethers" + - "@nomicfoundation/hardhat-viem" - "@nomicfoundation/hardhat-verify" - "@nomicfoundation/hardhat-foundry" + - "@nomicfoundation/hardhat-ledger" + - "@nomicfoundation/hardhat-web3-v4" - "@nomiclabs/hardhat-vyper" - "@nomiclabs/hardhat-solhint" - "@nomiclabs/hardhat-solpp" diff --git a/docs/src/content/hardhat-runner/plugins/plugins.ts b/docs/src/content/hardhat-runner/plugins/plugins.ts index 435cf481ea..e75d9d25fa 100644 --- a/docs/src/content/hardhat-runner/plugins/plugins.ts +++ b/docs/src/content/hardhat-runner/plugins/plugins.ts @@ -226,7 +226,14 @@ const communityPlugins: IPlugin[] = [ authorUrl: "https://github.com/symfoni/", description: "A Hardhat plugin that generates a React hook component from your smart contracts. Hot reloaded into your React app. Deployed or not deployed. And everything typed and initialized.", - tags: ["Ethers", "React", "Deploy", "Typechain", "Frontend", "Web3modal"], + tags: [ + "Ethers.js", + "React", + "Deploy", + "Typechain", + "Frontend", + "Web3modal", + ], }, { name: "hardhat-etherscan-abi", @@ -264,6 +271,14 @@ const communityPlugins: IPlugin[] = [ description: "Exporting solidity contract storage layout", tags: ["solidity", "storage-layout"], }, + { + name: "hardhat-storage-layout-json", + npmPackage: "hardhat-storage-layout-json", + author: "(Aurora Labs, mostly!) + 3obby", + authorUrl: "https://github.com/3obby/hardhat-storage-layout-json", + description: "View contracts' layouts with CLI and .json output", + tags: ["solidity", "storage"], + }, { name: "hardhat-change-network", author: "David Mihal", @@ -640,7 +655,7 @@ const communityPlugins: IPlugin[] = [ tags: ["Tooling", "Testing", "Tasks", "Scripts", "Solc", "Compiler"], }, { - name: "@dlsl/hardhat-migrate", + name: "@solarity/hardhat-migrate", author: "Distributed Lab", authorUrl: "https://distributedlab.com/", description: @@ -663,7 +678,7 @@ const communityPlugins: IPlugin[] = [ tags: ["Deployment", "Testing", "Jest", "Smart Contracts", "Solidity"], }, { - name: "@dlsl/hardhat-gobind", + name: "@solarity/hardhat-gobind", author: "Distributed Lab", authorUrl: "https://distributedlab.com/", description: @@ -709,7 +724,7 @@ const communityPlugins: IPlugin[] = [ tags: ["chainlink", "hardhat"], }, { - name: "@dlsl/hardhat-markup", + name: "@solarity/hardhat-markup", author: "Distributed Lab", authorUrl: "https://distributedlab.com/", description: @@ -773,6 +788,81 @@ const communityPlugins: IPlugin[] = [ "Enable project-specific features inside Truffle Dashboard, including advanced calldata decoding and more", tags: ["truffle-dashboard", "transaction", "signing", "decoding"], }, + { + name: "hardhat-w3f", + author: "Gelato Network", + npmPackage: "@gelatonetwork/web3-functions-sdk", + authorUrl: "https://github.com/gelatodigital/web3-functions-sdk", + description: + "The hardhat-w3f plugin allows builders to build & run Web3 Functions connecting smart off-chain data with smart contracts ", + tags: ["Gelato", "w3f", "offchain", "functions"], + }, + { + name: "hardhat-publish-typechain", + author: "xiaosongfu", + npmPackage: "hardhat-publish-typechain", + authorUrl: "https://github.com/xiaosongfu", + description: "Publish generated typechain-types to NPM", + tags: ["typechain-types", "npm registry"], + }, + { + name: "hardhat-deployed-records", + author: "xiaosongfu", + npmPackage: "hardhat-deployed-records", + authorUrl: "https://github.com/xiaosongfu", + description: "Recording deployed contracts address to json file", + tags: ["deployed history"], + }, + { + name: "hardhat-generate-function-selectors", + author: "3obby", + npmPackage: "hardhat-generate-function-selectors", + authorUrl: "https://github.com/3obby/function-selectors-plugin", + description: + "generate an output file of organized function selectors for all ABI/.json files within ./artifacts/contracts", + tags: ["function", "selectors", "tooling", "router"], + }, + { + name: "hardhat-gasless-deployer", + author: "Ahmed Ali", + authorUrl: "https://twitter.com/0xAhmedAli", + npmPackage: "https://www.npmjs.com/package/hardhat-gasless-deployer", + description: "Deploy contracts with Hardhat using Gas Station Network", + tags: ["GSN", "Gasless", "Deployment"], + }, + { + name: "hardhat-generate-storage-namespace", + npmPackage: "hardhat-generate-storage-namespace", + author: "3obby", + authorUrl: "https://github.com/3obby/hardhat-generate-storage-namespace", + description: "Generate unique storage namespaces within a script/task", + tags: ["solidity", "storage", "namespace", "router"], + }, + { + name: "@solarity/hardhat-smart-compare", + author: "Distributed Lab", + authorUrl: "https://distributedlab.com/", + description: "Hardhat plugin to deeply compare smart contracts", + tags: ["Storage Layout", "Bytecode", "Diff", "Compare"], + }, + { + name: "hardhat-logger", + author: "kruglay", + npmPackage: "hardhat-logger", + authorUrl: "https://github.com/kruglay/hardhat-logger", + description: + "Show transaction params before hardhat send transaction to network", + tags: ["log", "logger", "transaction"], + }, + { + name: "hardhat-contract-signatures", + author: "Axel Loupias", + npmPackage: "hardhat-contract-signatures", + authorUrl: "https://github.com/AxelLoupias", + description: + "Display different signatures that have the methods, events and errors of your contracts by console", + tags: ["functions", "errors", "events", "tooling", "selectorss"], + }, ]; const officialPlugins: IPlugin[] = [ @@ -780,8 +870,17 @@ const officialPlugins: IPlugin[] = [ name: "@nomicfoundation/hardhat-toolbox", author: "Nomic Foundation", authorUrl: "https://twitter.com/NomicFoundation", - description: "Nomic Foundation's recommended bundle of Hardhat plugins", - tags: ["Hardhat", "Setup"], + description: + "Nomic Foundation's recommended bundle of Hardhat plugins (ethers based)", + tags: ["Hardhat", "Setup", "Ethers.js"], + }, + { + name: "@nomicfoundation/hardhat-toolbox-viem", + author: "Nomic Foundation", + authorUrl: "https://twitter.com/NomicFoundation", + description: + "Nomic Foundation's recommended bundle of Hardhat plugins (viem based)", + tags: ["Hardhat", "Setup", "viem"], }, { name: "@nomicfoundation/hardhat-chai-matchers", @@ -791,12 +890,19 @@ const officialPlugins: IPlugin[] = [ tags: ["Chai", "Testing"], }, { - name: "@nomiclabs/hardhat-ethers", + name: "@nomicfoundation/hardhat-ethers", author: "Nomic Foundation", authorUrl: "https://twitter.com/NomicFoundation", description: "Injects ethers.js into the Hardhat Runtime Environment", tags: ["Ethers.js", "Testing", "Tasks", "Scripts"], }, + { + name: "@nomicfoundation/hardhat-viem", + author: "Nomic Foundation", + authorUrl: "https://twitter.com/NomicFoundation", + description: "Makes it easier to use viem in a Hardhat project", + tags: ["viem", "Testing", "Tasks", "Scripts"], + }, { name: "@nomicfoundation/hardhat-verify", author: "Nomic Foundation", @@ -812,6 +918,13 @@ const officialPlugins: IPlugin[] = [ "Makes it easier to use Hardhat and Foundry in the same project", tags: ["Foundry"], }, + { + name: "@nomicfoundation/hardhat-ledger", + author: "Nomic Foundation", + authorUrl: "https://twitter.com/NomicFoundation", + description: "Hardhat plugin for the Ledger hardware wallet", + tags: ["Ledger", "Wallet"], + }, { name: "@nomiclabs/hardhat-vyper", author: "Nomic Foundation", @@ -849,6 +962,14 @@ const officialPlugins: IPlugin[] = [ description: "Injects Web3 1.x into the Hardhat Runtime Environment", tags: ["Web3.js", "Testing", "Tasks", "Scripts"], }, + { + name: "@nomicfoundation/hardhat-web3-v4", + author: "ChainSafe and Nomic Foundation", + npmPackage: "@nomicfoundation/hardhat-web3-v4", + authorUrl: "https://twitter.com/ChainSafeth", + description: "Injects Web3 4.x into the Hardhat Runtime Environment", + tags: ["Web3.js", "Testing", "Tasks", "Scripts"], + }, { name: "@nomiclabs/hardhat-truffle5", author: "Nomic Foundation", diff --git a/docs/src/content/hardhat-vscode/docs/other-components/_dirinfo.yaml b/docs/src/content/hardhat-vscode/docs/other-components/_dirinfo.yaml index 6cc6cf92f9..99e861c32c 100644 --- a/docs/src/content/hardhat-vscode/docs/other-components/_dirinfo.yaml +++ b/docs/src/content/hardhat-vscode/docs/other-components/_dirinfo.yaml @@ -5,6 +5,8 @@ order: title: Hardhat Runner - href: /../../../hardhat-network/docs title: Hardhat Network + - href: /../../../ignition/docs + title: Hardhat Ignition - href: /../../../hardhat-chai-matchers/docs title: Hardhat Chai Matchers - href: /../../../hardhat-network-helpers/docs diff --git a/docs/src/content/home.ts b/docs/src/content/home.ts index 0ba2fd12e9..59c1d8307d 100644 --- a/docs/src/content/home.ts +++ b/docs/src/content/home.ts @@ -1,7 +1,6 @@ import SolidityIcon from "../assets/tools/solidity"; import RunnerIcon from "../assets/tools/runner"; -// TODO: Re-enable Ignition section -// import IgnitionIcon from "../assets/tools/ignition"; +import IgnitionIcon from "../assets/tools/ignition"; import NetworkIcon from "../assets/tools/network"; import SolidityImageMobile from "../assets/feature-cards/Mobile/SolidityImage.svg"; @@ -29,7 +28,7 @@ import vibrantCommunityImageDark from "../assets/vibrantCommunityImageDark.svg"; import { Tools } from "../components/ui/types"; import reviewsBlock from "../assets/homepage-assets/reviews-block"; import RunnerIconDark from "../assets/tools/runner-dark"; -// import IgnitionIconDark from "../assets/tools/ignition-dark"; +import IgnitionIconDark from "../assets/tools/ignition-dark"; import NetworkIconDark from "../assets/tools/network-dark"; import SolidityIconDark from "../assets/tools/solidity-dark"; @@ -212,16 +211,16 @@ const toolsBlockContent = { "Hardhat Runner is the main component you interact with when using Hardhat. It's a flexible and extensible task runner that helps you manage and automate the recurring tasks inherent to developing smart contracts and dApps.", link: "/hardhat-runner", }, - // TODO: Re-enable Ignition section - // { - // icon: IgnitionIcon, - // title: "Ignition", - // value: Tools.IGNITION, - // mottos: ["deploy", "distribute"], - // description: - // "Deployment system for structuring, automating and distributing smart contract deployment setups.", - // link: "/hardhat-ignition", - // }, + { + icon: IgnitionIcon, + iconDark: IgnitionIconDark, + title: "Ignition", + value: Tools.IGNITION, + mottos: ["deploy"], + description: + "Declarative deployment system that enables you to deploy your smart contracts without navigating the mechanics of the deployment process.", + link: "/ignition", + }, { icon: NetworkIcon, iconDark: NetworkIconDark, diff --git a/docs/src/content/ignition/_dirinfo.yaml b/docs/src/content/ignition/_dirinfo.yaml new file mode 100644 index 0000000000..9ec3f9e8a0 --- /dev/null +++ b/docs/src/content/ignition/_dirinfo.yaml @@ -0,0 +1 @@ +section-type: hidden diff --git a/docs/src/content/ignition/docs/_dirinfo.yaml b/docs/src/content/ignition/docs/_dirinfo.yaml new file mode 100644 index 0000000000..9ec3f9e8a0 --- /dev/null +++ b/docs/src/content/ignition/docs/_dirinfo.yaml @@ -0,0 +1 @@ +section-type: hidden diff --git a/docs/src/content/ignition/docs/advanced/_dirinfo.yaml b/docs/src/content/ignition/docs/advanced/_dirinfo.yaml new file mode 100644 index 0000000000..3b86264611 --- /dev/null +++ b/docs/src/content/ignition/docs/advanced/_dirinfo.yaml @@ -0,0 +1,7 @@ +section-type: group +section-title: Advanced +order: + - /execution + - /deployment-artifacts + - /reconciliation + - /versioning diff --git a/docs/src/content/ignition/docs/advanced/deployment-artifacts.md b/docs/src/content/ignition/docs/advanced/deployment-artifacts.md new file mode 100644 index 0000000000..169a1bec77 --- /dev/null +++ b/docs/src/content/ignition/docs/advanced/deployment-artifacts.md @@ -0,0 +1,37 @@ +# Deployment artifacts + +Hardhat Ignition stores the information for each of your deployments in folders inside of `./ignition/deployments`. + +These folders contain all the deployment results, and a journal file which records every deployment action executed, enabling recovery from errors and resuming deployments. + +The different files inside each deployment folder are detailed below: + +## The journal + +The main file in a deployment folder is `journal.jsonl`. This is where Hardhat Ignition writes every operation it makes, before executing it. + +The journal file allows Hardhat Ignition to resume deployments. + +## Contract Artifacts and `BuildInfo`s + +Hardhat Ignition uses [the same format as Hardhat](../../../hardhat-runner/docs/advanced/artifacts.md) for artifacts and build info files. + +The only differences are that the artifacts are stored in `ignition/deployment//artifacts`, without subfolders, and that their files are named after the `Future` ID that created them. + +As an example, a call to `m.contract` with ID `"foo"` in your module `"Mod"`, will create an artifact file `ignition/deployment//artifacts/Mod#foo.json`. + +## Contract addresses + +Every deployment folder also contains a `deployed_addresses.json`, which is a JSON file mapping each successfully executed contract `Future` to its address. + +This means that if you have a call to `m.contract`, `m.library`, or `m.contractAt` with ID `"foo"` in your module `"Mod"`, the `deployed_addresses.json` mapping will look like: + +```json +{ + //... + + "Mod#foo": "0x..." + + //... +} +``` diff --git a/docs/src/content/ignition/docs/advanced/execution.md b/docs/src/content/ignition/docs/advanced/execution.md new file mode 100644 index 0000000000..2303563407 --- /dev/null +++ b/docs/src/content/ignition/docs/advanced/execution.md @@ -0,0 +1,77 @@ +# Module execution + +This section explains how Hardhat Ignition deploys your modules. You don't need to understand this to start using it, you can read the [Quick Start guide](../getting-started/index.md#quick-start) instead. + +## Module loading and validation + +When you run `npx hardhat ignition deploy `, Hardhat Ignition will read the ``, then execute its code including the call to `buildModule` that defines your module. + +`buildModule` uses your module definition callback to create different futures. `buildModule` runs some initial validations that only depend on the module definition itself. If these validations pass, an Ignition Module will be created based on the futures. + +Hardhat Ignition will next check the created module in the context of your project. It will perform additional validations to ensure the futures are correct with respect to your contracts (i.e the contracts you want to deploy exist, that you are passing them valid arguments, etc). + +## Previous state and reconciliation + +Hardhat Ignition is designed to be able to resume a previously started deployment. This is achieved by keeping a journal of the deployment execution. Before taking an action it is written to the journal. After an action produces a result, the result is written to the journal. This allows Hardhat Ignition to reconstruct its internal state by reading the journal, a technique called [write-ahead logging](https://en.wikipedia.org/wiki/Write-ahead_logging). + +Note that the journal does not store your module definition, but only the actions that have been taken during the deployment. + +Whenever you run a deployment, Hardhat Ignition will first check if there's an existing journal. If there is one, Hardhat Ignition will use it to reconstruct the state of the deployment on its last run. There is then a check to determine if the modules to be deployed are compatible with the deployment's state. This process is called Reconciliation. + +You can think of the reconciliation process as a validation that tries to understand if the previous state is compatible with your current modules. To learn more about this process, read the [Reconciliation guide](./reconciliation.md). + +If there's a journal, and the reconciliation process passes, Hardhat Ignition starts the deployment using the previous state. The next steps of the deployment process are the same whether a fresh state is used or the state of the previous run. + +## Execution order and batching + +Deploying a module means executing all of its futures, which in turn requires executing all of their dependencies, which may come from different modules. + +To decide the right order of execution, Hardhat Ignition creates a graph of `Future` objects, including those in your module, and those in submodules. In this graph, edges represent [explicit or implicit dependencies between `Future` objects](../guides/creating-modules.md#dependencies-between--future--objects). + +Using this graph, Hardhat Ignition will create different execution batches. Each batch has a set of `Future` objects that can be executed in parallel. + +The first batch will contain `Future` objects that meet one of these rules: + +- It has started executing in a previous run and has neither completed nor failed. +- It has no dependency. +- All of its dependencies were succesfully executed in a the previous run. + +The successive batches will have `Future` objects whose dependencies are included in the batches preceding it. For example, batch 4 would have `Future` objects whose dependencies were executed in a previous run, or are included in the batches 1, 2 or 3. + +This batching process is run before starting to execute, and the batches are not updated during the execution. + +When Hardhat Ignition starts executing a batch, it will wait until all its `Future` objects are complete before executing the next batch. + +## `Future` execution + +Each `Future` within a batch is executed independently, so we'll focus on the execution of a single `Future`. + +### Journaling + +As explained above, Hardhat Ignition uses a journal to be able to recreate its internal state at any point in time. To do this, it records every action it takes. + +The first message recorded into the journal indicates that Hardhat Ignition will start executing a `Future`. This message records a concrete view of your `Future`, where any `Future`, Module Parameter or account used as argument or option is replaced with their concrete value. This allows Hardhat Ignition, during the reconciliation process, to prevent the execution of an unmodified `Future` with different values (e.g. different Module Parameters). + +Subsequent steps of the `Future` execution are also recorded to the journal, including both success and failure results. The only exception to this rule are failed transaction simulations; these are not recorded. See [Transaction execution](./execution.md#transaction-execution) to learn more about transaction simulations. + +Hardhat Ignition will error if you try to resume the execution of a `Future` that has a failed result recorded in the journal. It will indicate that you need to [wipe the future's previous execution](../guides/error-handling.md#wiping-a-previous-execution). + +### Executing the different kinds of `Future` + +Hardhat Ignition knows how to execute each kind of `Future`: deploying a contract, instantiating an existing one, calling a contract, reading from one, deploying a library, sending ETH or data, or reading an event argument. + +Some of these require sending transactions, which Hardhat Ignition does through the [Hardhat Runtime Environment](../../../hardhat-runner/docs/advanced/hardhat-runtime-environment.md)'s network connection. + +### Transaction execution + +When Hardhat Ignition needs to send a transaction it first simulates it by running `eth_call`. If this simulation fails (i.e. the `eth_call` reverts) the execution is interrupted. Read the [Error handling guide](../guides/error-handling.md) to learn how to deal with this situation. + +If the simulation is successful, Hardhat Ignition will send the transaction and start monitoring its progress until it is included in a block and accumulates the [required number of confirmations](../config/index.md#requiredconfirmations) to be considered successful. + +The execution of a `Future` is not considered complete until all of its transactions have the required number of confirmations. This means that if the `Future` Child depends on the `Future` Parent, Child won't start executing before every `Future` in Parent's batch has all of their transactions confirmed with the required number of confirmations. + +Once a transaction is sent, Hardhat Ignition will wait for [a period of time](../config/index.md#timebeforebumpingfees) for it to confirm. If it doesn't get its first confirmation during that time, it will resend it with higher fees. + +If a transaction needs to be resent more than the configured [maximum number of times](../config/index.md#maxfeebumps), Hardhat Ignition will stop resending it and will consider the execution of the `Future` to have timed out, aborting the deployment. + +Finally, if the transaction gets dropped from the mempool or replaced by an unexpected transaction (e.g. sent by the user), the execution will be aborted. You will have to rerun Hardhat Ignition, which will recover from the situation automatically, though on rerun it may indicate a wait is required for unexpected transactions to fully confirm. diff --git a/docs/src/content/ignition/docs/advanced/reconciliation.md b/docs/src/content/ignition/docs/advanced/reconciliation.md new file mode 100644 index 0000000000..343546f175 --- /dev/null +++ b/docs/src/content/ignition/docs/advanced/reconciliation.md @@ -0,0 +1,42 @@ +# Reconciliation + +Being able to resume the deployment of a module is a key feature of Hardhat Ignition. Resuming is used to [recover from errors](../guides/error-handling.md), and to allow you to [continue the deployment of modified modules](../guides/modifications.md). + +As explained in the [Module execution](./execution.md) guide, Hardhat Ignition can resume a previous deployment thanks to its journal, which is used to reconstruct the internal state of the previous deployment run. + +This previous state may have been created with a different version of your modules or contracts though. Hardhat Ignition runs a process called Reconciliation to understand if the previous state is compatible with your current modules and contracts. + +If the reconciliation process fails, Hardhat Ignition won't let you resume the deployment, and will indicate which `Future` objects have incompatible changes. + +## Compatible changes + +There are different changes that you can apply to your module that will pass the reconciliation process. + +You can always define a new `Future` in an existing module, including importing from submodules. + +You can also alter your modules so that they express the same outcomes that you already deployed, but in a different way. For example, if you had this module + +```js +const param = m.getParameter("param"); +const foo = m.contract("Foo", [param]); +``` + +and deployed it with `5` as the value of `param`, you can modify it like this and it will be compatible + +```js +const foo = m.contract("Foo", [5]); +``` + +You can delete `Future` objects from modules as long as they haven't been executed yet. You can also delete a `Future` if it has been successfully executed, though Hardhat Ignition will print a warning when the modified module is deployed. + +You can also modify the dependencies of a `Future` as long as it hasn't started executing, or if the dependencies have already been successfully executed. + +Finally, you can modify the contracts used by `Future` objects that have already started executing. Hardhat Ignition will consider the changes compatible as long as their compilation bytecode is the same, except for their metadata hash, which can be different. + +## Recovering from incompatible changes + +There are three ways to recover from incompatible changes: + +1. Revert the change. +2. Apply a new change so that your module matches what you have already deployed in a different way, as explained above. +3. Delete the previous execution of a `Future`, as explained [here](../guides/error-handling.md#wiping-a-previous-execution). diff --git a/docs/src/content/ignition/docs/advanced/versioning.md b/docs/src/content/ignition/docs/advanced/versioning.md new file mode 100644 index 0000000000..b496da47bc --- /dev/null +++ b/docs/src/content/ignition/docs/advanced/versioning.md @@ -0,0 +1,11 @@ +# Version control of deployments + +Hardhat Ignition creates files for each deployment. The files are stored under the directory `./ignition/deployments/`. To understand the files created, please read our [Deployment artifacts](./deployment-artifacts.md) guide. + +If you want to store your deployments in version control, the recommended way is commiting the entire `./ignition/deployments` directory. + +If you think they are too large to be committed, you should at least commit their `deployed_addresses.json` file. + +Note that if you don't keep track of the rest of the files, you won't be able to extend your executed deployment by modifying your modules, so consider storing them somewhere else. + +Future versions of Hardhat Ignition will make the `deployments` file system structure lighter and friendlier for version control. diff --git a/docs/src/content/ignition/docs/config/_dirinfo.yaml b/docs/src/content/ignition/docs/config/_dirinfo.yaml new file mode 100644 index 0000000000..2b92f5fa94 --- /dev/null +++ b/docs/src/content/ignition/docs/config/_dirinfo.yaml @@ -0,0 +1,2 @@ +section-type: single +section-title: Configuration diff --git a/docs/src/content/ignition/docs/config/index.md b/docs/src/content/ignition/docs/config/index.md new file mode 100644 index 0000000000..179e3fa87c --- /dev/null +++ b/docs/src/content/ignition/docs/config/index.md @@ -0,0 +1,43 @@ +# Configuration + +You can use the `ignition` field in the Hardhat config to customize how Hardhat Ignition behaves: + +```js +// hardhat.config.js +module.exports = { + ignition: { + blockPollingInterval: 1_000, + timeBeforeBumpingFees: 3 * 60 * 1_000, + maxFeeBumps: 4, + requiredConfirmations: 5, + }, +}; +``` + +## Configuration options + +These are the different options you can add to your Hardhat config file. + +### `blockPollingInterval` + +The time in milliseconds that Hardhat Ignition will wait between checks that a new block has been minted. + +Default value: 1000 milliseconds (1 second). + +### `timeBeforeBumpingFees` + +The time in milliseconds to wait before bumping the fee for an unconfirmed transaction. + +Default value: 180,000 milliseconds (3 minutes). + +### `maxFeeBumps` + +The number of times an unconfirmed transaction will have its fee bumped before Hardhat Ignition considers it timed out. + +Default value: 4. + +### `requiredConfirmations` + +The number of confirmations Hardhat Ignition waits before considering a transaction as complete. This provides control over block re-org risk. + +Default value: 5 diff --git a/docs/src/content/ignition/docs/getting-started/_dirinfo.yaml b/docs/src/content/ignition/docs/getting-started/_dirinfo.yaml new file mode 100644 index 0000000000..0d1f3c1051 --- /dev/null +++ b/docs/src/content/ignition/docs/getting-started/_dirinfo.yaml @@ -0,0 +1,9 @@ +section-type: group +section-title: Hardhat Ignition +order: + - href: "#overview" + title: Overview + - href: "#installation" + title: Installation + - href: "#quick-start" + title: Quick start diff --git a/docs/src/content/ignition/docs/getting-started/index.md b/docs/src/content/ignition/docs/getting-started/index.md new file mode 100644 index 0000000000..e1dd48a3d6 --- /dev/null +++ b/docs/src/content/ignition/docs/getting-started/index.md @@ -0,0 +1,235 @@ +--- +title: Getting started with Hardhat Ignition +description: Getting started with Hardhat Ignition, a declarative smart contract deployment system. +--- + +## Overview + +Hardhat Ignition is a [declarative](https://en.wikipedia.org/wiki/Declarative_programming) system for deploying smart contracts on Ethereum. It enables you to define smart contract instances you want to deploy, and any operation you want to run on them. By taking over the deployment and execution, Hardhat Ignition lets you focus on your project instead of getting caught up in the deployment details. + +In Hardhat Ignition, deployments are defined through Ignition Modules. These modules serve as abstractions, helping you outline and describe the system that you want to deploy. Each Ignition Module encapsulates a group of smart contract instances and operations within your system. + +You can think of Ignition Modules as being conceptually similar to JavaScript modules. In JavaScript, you create a module to group definitions of functions, classes, and values, and then you export some of them. In Hardhat Ignition, you create a module where you group definitions of smart contract instances and operations, and you export some of those contracts. + +Creating a module doesn't lead to an interaction with the Ethereum network. After your modules are defined, then you can ask Hardhat Ignition to deploy them. + +This declarative approach provides Hardhat Ignition with the autonomy to determine the best way to execute your deployment. It leverages this advantage to execute steps in parallel, manage and recover from errors, resume interrupted or partial deployments, and even adapt to modifications in your modules. + +This guide will walk you through the steps to install Hardhat Ignition into an existing Hardhat project, define your first module, and deploy it. + +:::tip + +If you don't have a Hardhat project yet, or if you want to create a new one to try Hardhat Ignition, please follow [this guide](../../../hardhat-runner/docs/getting-started/index.md) first. + +::: + +## Installation + +To install Hardhat Ignition in an existing Hardhat project, you will need: + +- Hardhat version 2.18.0 or higher +- Ethers.js version 6 or higher + +You can also follow [Hardhat's Quick Start guide](../../../hardhat-runner/docs/getting-started/index.md) to create a new project from scratch to follow this guide. + +:::tip + +If you prefer to use **Viem** instead of **ethers**, check out the [Viem guide](../../../ignition/docs/guides/viem.md) for installation instructions. + +::: + +Once you have a Hardhat project ready, open a terminal in its root directory, and run: + +::::tabsgroup{options="npm 7+,npm 6,yarn"} + +:::tab{value="npm 7+"} + +```sh +npm install --save-dev @nomicfoundation/hardhat-ignition-ethers +``` + +::: + +:::tab{value="npm 6"} + +```sh +npm install --save-dev @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-ethers @nomicfoundation/hardhat-ignition @nomicfoundation/hardhat-verify @nomicfoundation/ignition-core ethers +``` + +::: + +:::tab{value=yarn} + +```sh +yarn add --dev @nomicfoundation/hardhat-ignition-ethers @nomicfoundation/hardhat-ethers @nomicfoundation/hardhat-ignition @nomicfoundation/hardhat-verify @nomicfoundation/ignition-core ethers +``` + +::: + +:::: + +Finally, add this to your config file to [enable the plugin](../../../hardhat-runner/docs/guides/project-setup.md#plugins-and-dependencies): + +::::tabsgroup{options="TypeScript,JavaScript"} + +:::tab{value="TypeScript"} + +```typescript +import "@nomicfoundation/hardhat-ignition-ethers"; +``` + +::: + +:::tab{value="JavaScript"} + +```javascript +require("@nomicfoundation/hardhat-ignition-ethers"); +``` + +::: + +:::: + +## Quick start + +We are going to explore a basic scenario where we deploy a simple contract and then run a post-deployment initialization function. + +### Creating your contract + +Paste the following code into `contracts/Rocket.sol`: + +```solidity +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +contract Rocket { + string public name; + string public status; + + constructor(string memory _name) { + name = _name; + status = "ignition"; + } + + function launch() public { + status = "lift-off"; + } +} +``` + +It contains a simple smart contract called `Rocket`, featuring a `launch` function that we'll call after deployment. + +### Creating your first module + +Modules are defined in JavaScript or TypeScript files inside of `ignition/modules`. Let's create that folder structure: + +```sh +mkdir ignition +mkdir ignition/modules +``` + +::::tabsgroup{options="TypeScript,JavaScript"} + +:::tab{value="TypeScript"} + +And paste the following code into a `ignition/modules/Apollo.ts`. We'll explain it in a moment. + +```typescript +import { buildModule } from "@nomicfoundation/hardhat-ignition/modules"; + +export default buildModule("Apollo", (m) => { + const apollo = m.contract("Rocket", ["Saturn V"]); + + m.call(apollo, "launch", []); + + return { apollo }; +}); +``` + +::: + +:::tab{value="JavaScript"} + +And paste the following code into a `ignition/modules/Apollo.js`. We'll explain it in a moment. + +```javascript +const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules"); + +module.exports = buildModule("Apollo", (m) => { + const apollo = m.contract("Rocket", ["Saturn V"]); + + m.call(apollo, "launch", []); + + return { apollo }; +}); +``` + +::: + +:::: + +The first aspect to note is that modules are created by calling the `buildModule` function, which requires a module ID and a callback function. Our module will be identified as `"Apollo"`. + +The callback function is where the module definition actually happens. The `m` parameter being passed into the callback is an instance of a `ModuleBuilder`, which is an object with methods to define and configure your smart contract instances. + +When we call these `ModuleBuilder` methods, they create a `Future` object, which represents the result of an execution step that Hardhat Ignition needs to run to deploy a contract instance or interact with an existing one. + +This doesn't execute anything against the network, it simply represents it internally. After the `Future` is created, it gets registered within the module, and the method returns it. + +In our module, we created two `Future` objects by calling the `contract` and `call` methods. The initial one instructs Hardhat Ignition to deploy a `Rocket` contract instance, specifying `"Saturn V"` as the only constructor parameter. The second one indicates that we intend to execute the `launch` function of the deployed `Rocket` instance, with no arguments provided. + +Finally, we return the `Future` object representing the `Rocket` contract instance, to make it accessible to other modules and tests as well. + +### Deploying it + +Now that our module definition is ready, let's deploy it to a local Hardhat node. Let's start by spinning up a local node: + +```sh +npx hardhat node +``` + +Next, in a terminal in the root of your Hardhat project, run: + +::::tabsgroup{options="TypeScript,JavaScript"} + +:::tab{value="TypeScript"} + +```sh +npx hardhat ignition deploy ignition/modules/Apollo.ts --network localhost +``` + +::: + +:::tab{value="JavaScript"} + +```sh +npx hardhat ignition deploy ignition/modules/Apollo.js --network localhost +``` + +::: + +:::: + +Hardhat Ignition will execute every `Future` that we defined in the right order, and display the results: + +``` +Hardhat Ignition 🚀 + +Deploying [ Apollo ] + +Batch #1 + Executed Apollo#Rocket + +Batch #2 + Executed Apollo#Rocket.launch + +[ Apollo ] successfully deployed 🚀 + +Deployed Addresses + +Apollo#Rocket - 0x5fbdb2315678afecb367f032d93f642f64180aa3 +``` + +A `ignition/deployments/chain-31337` folder will be created. This contains all details about your deployment. Hardhat Ignition uses this data to recover from errors, resume a modified deployment, and more. + +That's all it takes to define and execute a deployment using Hardhat Ignition. Check out the rest of the guides to learn more! diff --git a/docs/src/content/ignition/docs/guides/_dirinfo.yaml b/docs/src/content/ignition/docs/guides/_dirinfo.yaml new file mode 100644 index 0000000000..18ba9ad6f5 --- /dev/null +++ b/docs/src/content/ignition/docs/guides/_dirinfo.yaml @@ -0,0 +1,11 @@ +section-type: group +section-title: Guides +order: + - /creating-modules + - /deploy + - /visualize + - /error-handling + - /modifications + - /tests + - /verify + - /viem diff --git a/docs/src/content/ignition/docs/guides/creating-modules.md b/docs/src/content/ignition/docs/guides/creating-modules.md new file mode 100644 index 0000000000..be1f6fd86c --- /dev/null +++ b/docs/src/content/ignition/docs/guides/creating-modules.md @@ -0,0 +1,335 @@ +# Creating Ignition Modules + +In Hardhat Ignition, deployments are defined through Ignition Modules. These modules help you outline and describe the system that you want to deploy. Each Ignition Module encapsulates a group of smart contract instances and operations within your system. + +This guide will explain how to create Ignition Modules. + +## The module definition API + +To create an Ignition Module, import the `buildModule` function from `@nomicfoundation/hardhat-ignition/modules`. Then, call it with a `string` that will be used as the module ID, and a callback that will define the content of the module. + +This is a module which will be identified as `"MyToken"`: + +::::tabsgroup{options="TypeScript,JavaScript"} + +:::tab{value="TypeScript"} + +```typescript +import { buildModule } from "@nomicfoundation/hardhat-ignition/modules"; + +export default buildModule("MyToken", (m) => { + const token = m.contract("Token", ["My Token", "TKN", 18]); + + return { token }; +}); +``` + +::: + +:::tab{value="JavaScript"} + +```javascript +const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules"); + +module.exports = buildModule("My token", (m) => { + const token = m.contract("Token", ["My Token", "TKN", 18]); + + return { token }; +}); +``` + +::: + +:::: + +You can create multiple modules in a single file, but each must have a unique ID. To deploy a module, you must export it using `module.exports =` or `export default`. As a best practice, we suggest maintaining one module per file, naming the file after the module ID. + +The callback function is where the module definition actually happens. The `m` parameter being passed into the callback is an instance of a `ModuleBuilder`, which is an object with methods to define and configure your smart contract instances. + +When we call these `ModuleBuilder` methods, they create a `Future` object, which represents the result of an execution step that Hardhat Ignition needs to run to deploy a contract instance or interact with an existing one. + +This doesn't execute anything against the network, it simply represents it internally. After the `Future` is created, it gets registered within the module, and the method returns it. + +To deploy a module, Hardhat Ignition executes each of the `Future` objects that the module defines once, and stores the results. + +Finally, the module definition callback can return `Future` objects that represent contract instances, making these contracts accessible to other modules and tests, just like we returned `token` in our example. + +## The different kinds of `Future` + +This section will explore the different kinds of `Future` objects that Hardhat Ignition supports, and how to define them using `ModuleBuilder`. + +### Deploying a contract + +As explained above, to define a new contract instance you'll have to use `m.contract` to create a `Future`. + +Hardhat Ignition knows all the contracts you have in your Hardhat project, so you can refer to them by their names like you would when you're writing tests. + +Let's go over the example again: + +```js +const token = m.contract("Token", ["My Token", "TKN", 18]); +``` + +We call `m.contract` and provide the contract name as the first argument. Then we provide an array of arguments that the constructor needs. + +If you want to use the future value that a `Future` object represents as an argument for another method call, you can simply use the `Future` object itself. Hardhat Ignition will figure out how to resolve it during execution. + +For example, we can use the address of `token` like this: + +```js +const foo = m.contract("ReceivesAnAddress", [token]); +``` + +If you need to send ETH to the constructor, you can pass an object with options as the third argument to `m.contract`, and put in how much you want to send in the `value` field: + +```js +const bar = m.contract("ReceivesETH", [], { + value: 1_000_000_000n, // 1gwei +}); +``` + +### Using an existing contract + +If you need to interact with existing contract instances, you can create a `Future` to represent it in your module like this: + +```js +const existingToken = m.contractAt("Token", "0x..."); +``` + +Just like with `m.contract`, the first value is the name of the contract, and the second value is its address. + +You can also use another `Future` for the address (the second argument). This can be useful when using a factory, or to create a contract `Future` with a different interface (like when deploying a proxy and instantiating it as its implementation). + +### Calling contract functions + +To call a function of a contract you need to use the `m.call` method in `ModuleBuilder`: + +```js +m.call(token, "transfer", [receiver, amount]); +``` + +The first argument is the `Future` object for the contract you want to call, the second one the function name, and the third one is an array of arguments. Once again, the array of arguments can contain other `Future` objects and Hardhat Ignition will figure out how to resolve them during execution. + +In this example, the `m.call` returns a `Future` which we aren't assigning to any variable. This isn't a problem. Hardhat Ignition will execute every `Future` within a module, regardless of whether we store it or not. + +If you need to send ETH while calling a function, you can pass an object with options as the third argument to `m.contract`, and put in how much you want to send in the `value` field: + +```js +m.call(myContract, "receivesEth" [], { + value: 1_000_000_000n, // 1gwei +}); +``` + +### Reading a value from a contract + +If you need to call a `view` or `pure` function in a contract to retreive a value, you can do it with `m.staticCall`: + +```js +const balance = m.staticCall(token, "balanceOf", [address]); +``` + +Just like with `m.call`, the `m.staticCall` method requires you to provide the contract's `Future` object, the function name, and its arguments. It returns a `Future` representing the value returned by the contract call. + +If the function you are calling returns more than one value, `m.staticCall` will return the first one by default. If you need a value other than the first one, you can provide an index or name as the fourth parameter. + +To execute this `Future`, Hardhat Ignition won't send any transactions and it will use [`eth_call`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_call) instead. Just like every other `Future`, it gets executed once, and the result is recorded. + +### Reading values from events emitted during `Future` execution + +If you're dealing with a `Future` that emits a Solidity event when executed, and you need to extract an argument from said event, then you can use `m.readEventArgument`: + +```tsx +const transfer = m.call(token, "transfer", [receiver, amount]); + +const value = m.readEventArgument(transfer, "Transfer", "_value"); +``` + +The first parameter is the `Future` object, whose execution results in the event's emission. Next, you specify the event's name and the particular argument you wish to extract from this event, using either its index or name for identification. + +You can also provide as a fourth parameter an object with options, which can contain: + +- `emitter`: A `Future` representing the contract instance that **directly emits** the event. This defaults to the `Future` you pass as first argument, but they’re not always the same. A `Future` can be executed and indirectly lead to an event emission by calling other contracts during its execution, which then directly emit the event. + +- `eventIndex`: If the are multiple events with the same name emitted by the `emitter`, you can use this parameter to pick one of them. It defaults to `0`. + +### Sending ETH or data to an account + +To send ETH or data to an account you can use `m.send`: + +```js +const send = m.send("SendingEth", address, 1_000_000n); +const send = m.send("SendingData", address, undefined, "0x16417104"); +``` + +Calling `m.send` will create a `Future` representing the sending action. The first parameter it requires is the ID for the `Future` that will be created. + +The second argument is the address of the account where you want to send the ETH or data to. + +The third and forth parameters are both optional. They represent the amount of ETH and the data to be sent. + +### Deploying a library + +To deploy a library you can use `m.library`: + +```js +const myLib = m.library("MyLib"); +``` + +If you need to link libraries take a look at the [Linking Libraries](#linking-libraries) section. + +## `Future` IDs + +Each `Future` that is created should have a unique ID. In most cases, Hardhat Ignition will automatically generate an ID for the every `Future` you create, based on the creation parameters. + +In some cases, this automatic process may lead to an ID clash with an existing `Future`. If that happens, Hardhat Ignition won't try to resolve the clash, and you will need to define an ID manually to resolve the issue. Every method of `ModuleBuilder` accepts an options object as last argument, which has an `id` field that can be used like this: + +```js +const token = m.contract("Token", ["My Token 2", "TKN2", 18], { + id: "MyToken2", +}); +``` + +The `Future` IDs are used to organize your deployment results, artifacts, and to resume a deployment after interruptions or modifications. For this reason, you should avoid changing IDs after running a deployment. + +## Dependencies between `Future` objects + +If you provide a `Future` object `A` as an argument when constructing `Future` object `B`, a dependency from `B` to `A` is created. + +Dependencies are used by Hardhat Ignition to understand how to order and batch the execution of the different `Future` objects. + +You also have the option to set explicit dependencies between `Future` objects. This is done through the `after` field in the options object, accepted by all `ModuleBuilder` methods when creating a `Future`. Here's how you can do it: + +```js +const token = m.contract("Token", ["My Token", "TKN", 18]); + +const receiver = m.contract("Receiver", [], { + after: token, // `receiver` is deployed after `token` +}); +``` + +## Module parameters + +When defining Ignition Modules, you can use configurable parameters for flexibility. + +During deployment, you can specify these parameters in a JSON file that maps module IDs with respective parameter names and values. This section will focus on retrieving parameters, while the [Defining parameters during deployment](./deploy.md#defining-parameters-during-deployment) section explains how to provide them. + +To access these values, you can call `m.getParameter` providing the name for the parameter as the first argument. You can also make your parameters optional by providing a second argument to `m.getParameter` which will act as the default value in case the parameter isn't provided. + +For example, we can modify the `Apollo` module from the [Quick Start guide](../getting-started/index.md#quick-start) to make the `name` field in the `Rocket` smart contract configurable with a parameter: + +::::tabsgroup{options="TypeScript,JavaScript"} + +:::tab{value="TypeScript"} + +**ignition/modules/Apollo.ts** + +```typescript +import { buildModule } from "@nomicfoundation/hardhat-ignition/modules"; + +export default buildModule("Apollo", (m) => { + const apollo = m.contract("Rocket", [m.getParameter("name", "Saturn V")]); + + m.call(apollo, "launch", []); + + return { apollo }; +}); +``` + +::: + +:::tab{value="JavaScript"} + +**ignition/modules/Apollo.js** + +```javascript +const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules"); + +module.exports = buildModule("Apollo", (m) => { + const apollo = m.contract("Rocket", [m.getParameter("name", "Saturn V")]); + + m.call(apollo, "launch", []); + + return { apollo }; +}); +``` + +::: + +:::: + +The above module code will deploy `Rocket` with the name provided in the parameters. + +Learn more about how to provide a deployment with parameters in the [Defining parameters during deployment](./deploy.md#defining-parameters-during-deployment) section. + +## Creating a module hierarchy using submodules + +You can organize your deployment into different Ignition Modules, which makes it easier to build the setup and reason about the deployment big picture. + +When you are defining a module, you can access other modules as submodules and use their resulting `Future` objects. To do this you need to call `m.useModule` with a module object as returned by `buildModule` as an argument: + +```js +const TokenModule = buildModule("TokenModule", (m) => { + const token = m.contract("Token", ["My Token", "TKN2", 18]); + + return { token }; +}); + +const TokenOwnerModule = buildModule("TokenOwnerModule", (m) => { + const { token } = m.useModule(TokenModule); + + const owner = m.contract("TokenOwner", [token]); + m.call(token, "transferOwnership", [owner]); + + return { owner }; +}); +``` + +If you use a `Future` called `A` that you retrieved from a submodule `Sub` to create another `Future` called `B`, then `B` will depend on `A`, but it will also have an implicit dependency on every `Future` within `Sub`. This means `B` will only be executed after `Sub` is fully executed. + +Calling `m.useModule` multiple times with the same Ignition Module as a parameter doesn't lead to multiple deployments. Hardhat Ignition only executes `Future` objects once. + +## Deploying and calling contracts from different accounts + +If you need to change the sender of a deployment, call, or another `Future`, you can do it by providing the `from` field in an options object. + +For example, to deploy a contract from a specific account: + +```js +const token = m.contract("Token", ["My Token", "TKN2", 18], { from: "0x...." }); +``` + +You can also define a module that uses the accounts that Hardhat has available during the deployment. To access the Hardhat accounts use `m.getAccount(index)`: + +```js +const account1 = m.getAccount(1); +const token = m.contract("Token", ["My Token", "TKN2", 18], { from: account1 }); +``` + +## Using existing artifacts + +If you need to deploy or interact with a contract that isn't part of your Hardhat project, you can provide your own artifacts. + +All the methods that create `Future` objects for contracts also accept artifacts in the second argument through overloads. Here are examples for each of them: + +```js +const token = m.contract("Token", TokenArtifact, ["My Token", "TKN2", 18]); + +const myLib = m.library("MyLib", MyLibArtifact); + +const token2 = m.contractAt("Token", TokenArtifact, token2Address); +``` + +In this case, the name of the contract is only used to generate [`Future` IDs](#future-ids), and not to load any artifact. + +## Linking libraries + +To link a library when deploying a contract, you can use the `libraries` field in an options object when calling `m.contract` or `m.library`: + +```js +const myLib = m.library("MyLib"); +const myContract = m.contract("MyContract", [], { + libraries: { + MyLib: myLib, + }, +}); +``` diff --git a/docs/src/content/ignition/docs/guides/deploy.md b/docs/src/content/ignition/docs/guides/deploy.md new file mode 100644 index 0000000000..4a43752b18 --- /dev/null +++ b/docs/src/content/ignition/docs/guides/deploy.md @@ -0,0 +1,85 @@ +# Deploying a module + +To execute your deployments, you need to use the `ignition deploy` task. It takes a path to a module file as an argument: + +```sh +npx hardhat ignition deploy ignition/modules/MyModule.js +``` + +Hardhat Ignition will load the Ignition Module exported by the file you provided, and deploy it. + +## Deployment artifact folders + +Before starting to run the deployment, Hardhat Ignition will create a deployment folder under `ignition/deployments/`. By default, the folder will be named `chain-`, where `` depends on which network Hardhat is connected to. + +You can customize the deployment folder name by providing an explicit deployment ID with `--deployment-id `. + +This folder will contain all the deployment results, and a journal file which records every deployment action executed, enabling recovery from errors and resuming deployments. + +Read the [Deployment artifacts section](./../advanced/deployment-artifacts.md) to learn more about the files in your deployment folder. + +## Extending an existing deployment + +If you've previously executed a deployment and need to make adjustments, you can continue from where you left off by reusing the current deployment artifacts. Simply reconnect to the same network and keep the same deployment ID (either manually or by keeping the default). + +You can add new `Future` objects to your existing Ignition Modules, and you can also add entirely new modules. All of the additions can make use of the previously existing `Future` objects and modules. + +Hardhat Ignition will figure out how to pick up from where it left off last time, and continue with executing the new modifications. + +## Defining parameters during deployment + +Ignition Modules can define [Module Parameters](./creating-modules.md#module-parameters) and use them programmatically. When you deploy a module using the `ingition deploy` task you can provide a JSON file with their values. This section will focus on providing the parameters, while the [Module Parameters section](./creating-modules.md#module-parameters) explains how to retrieve them within a module. + +An example file could be called `./ignition/parameters.json` and contain the following: + +```json +{ + "Apollo": { + "name": "Saturn V" + } +} +``` + +This makes the `name` parameter for the `Apollo` module be `"Saturn V"`. + +To execute a deployment using parameters, you need to use the `--parameters` argument, like this: + +::::tabsgroup{options="TypeScript,JavaScript"} + +:::tab{value="TypeScript"} + +```sh +npx hardhat ignition deploy ignition/modules/Apollo.ts --parameters ignition/parameters.json +``` + +::: + +:::tab{value="JavaScript"} + +```sh +npx hardhat ignition deploy ignition/modules/Apollo.js --parameters ignition/parameters.json +``` + +::: + +:::: + +## Inspecting an existing deployment + +To check on the current status of a deployment, run: + +```sh +npx hardhat ignition status DeploymentId +``` + +If you run it on the [Quick Start guide](../getting-started/index.md#quick-start) project after executing the deploying, you'd see something like this: + +``` +$ npx hardhat ignition status chain-31337 + +[ chain-31337 ] successfully deployed 🚀 + +Deployed Addresses + +Apollo#Rocket - 0x5fbdb2315678afecb367f032d93f642f64180aa3 +``` diff --git a/docs/src/content/ignition/docs/guides/error-handling.md b/docs/src/content/ignition/docs/guides/error-handling.md new file mode 100644 index 0000000000..a2b4ee67d5 --- /dev/null +++ b/docs/src/content/ignition/docs/guides/error-handling.md @@ -0,0 +1,27 @@ +# Handling errors + +There are many reasons that con lead to a failure when operating a smart contract. Hardhat Ignition uses different approaches for error handling depending on the error type. This guide explains these methods thoroughly. + +## Contract errors + +When interacting with a smart contract, there are always some chances that it might fail and revert. Hardhat Ignition handles these situations using two strategies. + +When it comes to catching errors and reverts, Hardhat Ignition starts by running a simulation of every transaction. If this simulation doesn't succeed, the execution stops. All you need to do to continue your deployment in this case is rerunning Hardhat Ignition. If the simulation failure persists, you might want to consider [deleting a previous execution](#wiping-a-previous-execution) from the journal, and trying again. + +While simulations catch most errors, sometimes a transaction simulation can be successful, and the contract execution still reverts. Hardhat Ignition won't send a new transaction automatically in those cases. Instead, you need to [wipe the previous execution](#wiping-a-previous-execution) and rerun the deployment. + +### Wiping a previous execution + +Hardhat Ignition uses a journal to record every execution step it performs, as well as the results of each of them. This allows it to resume a previous execution when needed. As soon as a `Future` starts its execution, it will be recoreded into the journal. + +If your deployment is failing due to a `Future`, and you need to change its definition to fix it, you will need to wipe the `Future` object's previous execution from the journal, since its definition changed. You can use the `ignition wipe` task for this, by providing it with a deployment ID **and** a future ID. + +```sh +npx hardhat ignition wipe deploymentId futureId +``` + +## Network-related errors + +Hardhat Ignition tries its best to be robust in the face of network-related errors. It manages tricky situations like resending transactions that need updated gas prices, or when nonces don't match between Hardhat Ignition and the network. + +However, sometimes Hardhat Ignition might face an error it can't manage. If this happens, you can just run the same command again to pick up where you left off with your deployment. diff --git a/docs/src/content/ignition/docs/guides/modifications.md b/docs/src/content/ignition/docs/guides/modifications.md new file mode 100644 index 0000000000..153a108b8a --- /dev/null +++ b/docs/src/content/ignition/docs/guides/modifications.md @@ -0,0 +1,99 @@ +# Modifying an existing module + +It's possible to make changes to modules after having deployed them. + +For example, if we wanted to add a new `Rocket` contract instance to the module we deployed in the [Quick Start guide](../getting-started/index.md#quick-start), this is what we would do: + +::::tabsgroup{options="TypeScript,JavaScript"} + +:::tab{value="TypeScript"} + +**ignition/modules/Apollo.ts** + +```typescript{8,10,12} +import { buildModule } from "@nomicfoundation/hardhat-ignition/modules"; + +export default buildModule("Apollo", (m) => { + const apollo = m.contract("Rocket", ["Saturn V"]); + + m.call(apollo, "launch", []); + + const artemis = m.contract("Rocket", ["Artemis 2"], { id: "artemis" }); + + m.call(artemis, "launch", []); + + return { apollo, artemis }; +}); +``` + +::: + +:::tab{value="JavaScript"} + +**ignition/modules/Apollo.js** + +```javascript{8,10,12} +const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules"); + +module.exports = buildModule("Apollo", (m) => { + const apollo = m.contract("Rocket", ["Saturn V"]); + + m.call(apollo, "launch", []); + + const artemis = m.contract("Rocket", ["Artemis 2"], { id: "artemis" }); + + m.call(artemis, "launch", []); + + return { apollo, artemis }; +}); +``` + +::: + +:::: + +Then run it again. Hardhat Ignition will continue from where it left off, and execute the new parts of the module. + +::::tabsgroup{options="TypeScript,JavaScript"} + +:::tab{value="TypeScript"} + +```sh +npx hardhat ignition deploy ignition/modules/Apollo.ts --network localhost +``` + +::: + +:::tab{value="JavaScript"} + +```sh +npx hardhat ignition deploy ignition/modules/Apollo.js --network localhost +``` + +::: + +:::: + +This is what the output would look like: + +``` +Batch #1 + Executed Apollo#artemis + +Batch #2 + Executed Apollo#Apollo.artemis.launch + + +[ Apollo ] successfully deployed 🚀 + +Deployed Addresses + +Apollo#Rocket - 0x5fbdb2315678afecb367f032d93f642f64180aa3 +Apollo#artemis - 0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0 +``` + +We can see two new batches that execute the new parts of the module, while keeping the previous already deployed parts intact. + +## Incompatible modifications + +There are certain modifications one can make to a `Future` definition that would make the new version incompatible with the previous one _if_ the previous one has already been partially or completely executed. This would lead to Hardhat Ignition being unable to continue your deployment from where it was left off. Read the [Reconciliation](../advanced/reconciliation.md) guide to learn more about this. diff --git a/docs/src/content/ignition/docs/guides/tests.md b/docs/src/content/ignition/docs/guides/tests.md new file mode 100644 index 0000000000..ad9d96afa8 --- /dev/null +++ b/docs/src/content/ignition/docs/guides/tests.md @@ -0,0 +1,82 @@ +# Using Hardhat Ignition in your tests + +If you want to test that your deployment was correctly defined, or if you want to use your Ignition Modules to simplify your test setup, continue reading this guide. + +:::tip + +If you prefer to use **Viem** instead of **ethers**, check out the [Viem guide](../../../ignition/docs/guides/viem.md) for more details. + +::: + +## The Ignition object + +Requiring Hardhat Ignition within your Hardhat config will automatically add an `ignition` object to the [Hardhat Runtime Environment](../../../hardhat-runner/docs/advanced/hardhat-runtime-environment.md). + +The `ignition` object exposes a `deploy` method, that takes an Ignition Module as the first argument. + +```js +// We define a module in the test file here, but you can also `require`/`import` it. +const CounterModule = buildModule("Counter", (m) => { + const startCount = m.getParameter("startCount", 0); + + const counter = m.contract("Counter", [startCount]); + + return { counter }; +}); + +it("should set the start count to 0 by default", async function () { + const { counter } = await ignition.deploy(CounterModule); + + assert.equal(await counter.count(), 42); +}); +``` + +The `ignition.deploy` method returns an object with an `ethers` contract per contract `Future` returned in your module. + +## Using module parameters + +The `ignition.deploy` receives an options object as second argument which can be used to provide [Module parameters](./creating-modules.md#module-parameters) under the `parameters` field of the object. You should provide an object mapping module ID to parameters, like this: + +```js +it("should allow setting the start count for new counters", async function () { + const { counter } = await ignition.deploy(CounterModule, { + parameters: { + Counter: { + startCount: 42, + }, + }, + }); + + assert.equal(await counter.count(), 42); +}); +``` + +## Using Ignition Modules as fixtures + +You can combine Hardhat Ignition with [Hardhat Network Helper's `loadFixture`](../../../hardhat-network-helpers/docs/reference.md#loadfixture) to use them to easily define your fixtures by calling `ignition.deploy` within them. + +```js +async function deployCounterModuleFixture() { + return ignition.deploy(CounterModule); +} + +it("should set the start count to 0 by default", async function () { + const counter = await loadFixture(deployCounterModuleFixture); + + return { counter }; +}); +``` + +## Sending transactions with a different account + +The `ignition.deploy` method will default to using the first account in Hardhat network's `accounts` array as the sender for all transactions. + +You can change this by passing a `defaultSender` within the options object as a second argument to the `deploy` method: + +```typescript +const [first, second] = await hre.ethers.getSigners(); + +const result = await hre.ignition.deploy(CounterModule, { + defaultSender: second.address, +}); +``` diff --git a/docs/src/content/ignition/docs/guides/verify.md b/docs/src/content/ignition/docs/guides/verify.md new file mode 100644 index 0000000000..b7852399e9 --- /dev/null +++ b/docs/src/content/ignition/docs/guides/verify.md @@ -0,0 +1,174 @@ +# Verifying your deployment + +Once your Ignition module is tested and ready, the next step is to deploy it to a live network and verify the source code of each of its contracts. + +Verifying a contract means making its source code public, along with the compiler settings you used, which allows anyone to compile it and compare the generated bytecode with the one that is deployed on-chain. Doing this is extremely important in an open platform like Ethereum. + +In this guide we'll explain how to do this with the [Etherscan](https://etherscan.io/) explorer. + +## Getting an API key from Etherscan + +The first thing you need is an API key from Etherscan. To get one, go to [their site](https://etherscan.io/login), sign in (or create an account if you don't have one) and open the "API Keys" tab. Then click the "Add" button and give a name to the API key you are creating (e.g. "Hardhat"). After that you'll see the newly created key in the list. + +Open your Hardhat config and add the API key you just created: + +::::tabsgroup{options=TypeScript,JavaScript} + +:::tab{value=TypeScript} + +```ts +export default { + // ...rest of the config... + etherscan: { + apiKey: "ABCDE12345ABCDE12345ABCDE123456789", + }, +}; +``` + +::: + +:::tab{value=JavaScript} + +```js +module.exports = { + // ...rest of the config... + etherscan: { + apiKey: "ABCDE12345ABCDE12345ABCDE123456789", + }, +}; +``` + +::: + +:::: + +## Deploying and verifying on the Sepolia testnet + +We are going to use the [Sepolia testnet](https://ethereum.org/en/developers/docs/networks/#sepolia) to deploy and verify our Ignition module, so you need to add this network in your Hardhat config. Here we are using [Alchemy](https://alchemy.com/) to connect to the network. + +:::tip + +For more information on `vars` and configuration variables, please see our [configuration variables guide](../../../hardhat-runner/docs/guides/configuration-variables.md). + +::: + +::::tabsgroup{options=TypeScript,JavaScript} + +:::tab{value=TypeScript} + +```ts +// Go to https://alchemy.com, sign up, create a new App in +// its dashboard, and set the Hardhat configuration variable +// ALCHEMY_API_KEY to the key +const ALCHEMY_API_KEY = vars.get("ALCHEMY_API_KEY"); + +// Replace this private key with your Sepolia test account private key +// To export your private key from Coinbase Wallet, go to +// Settings > Developer Settings > Show private key +// To export your private key from Metamask, open Metamask and +// go to Account Details > Export Private Key +// Beware: NEVER put real Ether into testing accounts +const SEPOLIA_PRIVATE_KEY = vars.get("SEPOLIA_PRIVATE_KEY"); + +export default { + // ...rest of your config... + networks: { + sepolia: { + url: `https://eth-sepolia.g.alchemy.com/v2/${ALCHEMY_API_KEY}`, + accounts: [SEPOLIA_PRIVATE_KEY], + }, + }, +}; +``` + +::: + +:::tab{value=JavaScript} + +```js +// Go to https://alchemy.com, sign up, create a new App in +// its dashboard, and set the Hardhat configuration variable +// ALCHEMY_API_KEY to the key +const ALCHEMY_API_KEY = vars.get("ALCHEMY_API_KEY"); + +// Replace this private key with your Sepolia test account private key +// To export your private key from Coinbase Wallet, go to +// Settings > Developer Settings > Show private key +// To export your private key from Metamask, open Metamask and +// go to Account Details > Export Private Key +// Beware: NEVER put real Ether into testing accounts +const SEPOLIA_PRIVATE_KEY = vars.get("SEPOLIA_PRIVATE_KEY"); + +module.exports = { + // ...rest of your config... + networks: { + sepolia: { + url: `https://eth-sepolia.g.alchemy.com/v2/${ALCHEMY_API_KEY}`, + accounts: [SEPOLIA_PRIVATE_KEY], + }, + }, +}; +``` + +::: + +:::: + +To deploy on Sepolia you need to send some Sepolia ether to the address that's going to be making the deployment. You can get testnet ether from a faucet, a service that distributes testing-ETH for free. Here is one for Sepolia: + +- [Alchemy Sepolia Faucet](https://sepoliafaucet.com/) + +:::tip + +This guide assumes you are using the contracts and Ignition module from the [quick start guide](/ignition/docs/getting-started#quick-start), but the steps are the same for any deployment. + +::: + +Now you are ready to deploy your module to the testnet, but first we are going to make the source code of our contract unique. The reason we need to do this is that the sample code from the quick start guide is already verified in Sepolia, so if you try to verify it you'll get an error. If you are using your own contracts, you can likely skip this step. + +Open your contract and add a comment with something unique, like your GitHub's username. Keep in mind that whatever you include here will be, like the rest of the code, publicly available on Etherscan: + +```solidity +// Author: @janedoe +contract Rocket { +``` + +You can now run the deployment using the newly added Sepolia network: + +::::tabsgroup{options="TypeScript,JavaScript"} + +:::tab{value="TypeScript"} + +```sh +npx hardhat ignition deploy ignition/modules/Apollo.ts --network sepolia --verify +``` + +::: + +:::tab{value="JavaScript"} + +```sh +npx hardhat ignition deploy ignition/modules/Apollo.js --network sepolia --verify +``` + +::: + +:::: + +The `--verify` flag is optional, but it tells Hardhat Ignition to verify the contracts after a successful deployment. + +If you have an existing deployment and want to verify it, you can also run the `verify` task directly by passing the deployment ID: + +```sh +npx hardhat ignition verify chain-11155111 +``` + +:::tip + +If you get an error saying that the address does not have bytecode, it probably means that Etherscan has not indexed your contract yet. In that case, wait for a minute and then try again. + +::: + +After the task has successfully executed, for each deployed contract you'll see a link to its publicly verified code. + +To learn more about verifying, read the [hardhat-verify](/hardhat-runner/plugins/nomicfoundation-hardhat-verify) documentation. diff --git a/docs/src/content/ignition/docs/guides/viem.md b/docs/src/content/ignition/docs/guides/viem.md new file mode 100644 index 0000000000..bae604be3d --- /dev/null +++ b/docs/src/content/ignition/docs/guides/viem.md @@ -0,0 +1,149 @@ +# Using Viem + +Hardhat Ignition provides a variant based on using [Viem](https://viem.sh) as your connection library. Viem is a lightweight alternative to [ethers](https://docs.ethers.org) with a focus on type safety. + +The Viem support in Hardhat Ignition includes a helper function, for use in Hardhat tests and scripts, that allows you to deploy Ignition modules and get back the deployed contracts as fully typed Viem contract instances. + +## Installation + +To install Hardhat Ignition with Viem support in an existing Hardhat project, you will need: + +- Hardhat version 2.18.0 or higher +- Viem version 1.18.0 or higher + +You can also follow [Hardhat's Viem Quick Start](../../../hardhat-runner/docs/advanced/using-viem#quick-start) to create a new Hardhat Viem project from scratch. + +From the root directory of your Hardhat project run: + +::::tabsgroup{options="npm 7+,npm 6,yarn"} + +:::tab{value="npm 7+"} + +```shell +npm install --save-dev @nomicfoundation/hardhat-ignition-viem +``` + +::: + +:::tab{value="npm 6"} + +```shell +npm install --save-dev @nomicfoundation/hardhat-ignition-viem @nomicfoundation/hardhat-ignition @nomicfoundation/hardhat-verify @nomicfoundation/hardhat-viem @nomicfoundation/ignition-core typescript viem +``` + +::: + +:::tab{value=yarn} + +```shell +yarn add --dev @nomicfoundation/hardhat-ignition-viem @nomicfoundation/hardhat-ignition @nomicfoundation/hardhat-verify @nomicfoundation/hardhat-viem @nomicfoundation/ignition-core typescript viem +``` + +::: + +:::: + +Then [enable the plugin](../../../hardhat-runner/docs/guides/project-setup.md#plugins-and-dependencies) in your config file: + +::::tabsgroup{options="TypeScript,JavaScript"} + +:::tab{value="TypeScript"} + +```typescript +import "@nomicfoundation/hardhat-ignition-viem"; +``` + +::: + +:::tab{value="JavaScript"} + +```javascript +require("@nomicfoundation/hardhat-ignition-viem"); +``` + +::: + +:::: + +:::tip + +Only **one** Hardhat Ignition package should be imported within your Hardhat config file. Viem and ethers support cannot both be enabled at the same time. + +::: + +## The Ignition object + +The `@nomicfoundation/hardhat-plugin-viem` plugin adds an `ignition` object to the [Hardhat Runtime Environment](../../../hardhat-runner/docs/advanced/hardhat-runtime-environment.md). + +The `ignition` object exposes a `deploy` method, which takes an Ignition module, deploys it against the current network, like Hardhat Network, and returns the results of the module as typed Viem contract instances. + +The `deploy` method takes the Module as its first argument: + +```typescript +const ApolloModule = buildModule("Apollo", (m) => { + const apollo = m.contract("Rocket", ["Saturn V"]); + + return { apollo }; +}); + +it("should have named the rocket Saturn V", async function () { + const { apollo } = await hre.ignition.deploy(ApolloModule); + + assert.equal(await apollo.read.name(), "Saturn V"); +}); +``` + +The `ignition.deploy` method returns an object with a Viem contract instance per `Future` returned as a result in the module. + +## Usage with Artifacts + +To infer the type of a Viem contract instance, the full type of the ABI must be available when initializing a `Future` within a module. + +For named Hardhat contracts, the ABI and type information will be retrieved automatically using [hardhat-viem's type generation](https://hardhat.org/hardhat-runner/docs/advanced/using-viem#contract-type-generation). + +If you are passing an artifact object to initialize a `Future` within a module, you will need to ensure the artifact's ABI is either declared with [const assertions](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#const-assertions) or defined inline: + +```typescript +const counterArtifact = { + // ... + abi: [...] as const, // <--- const assertion +} + +const CounterModule = buildModule("Counter", (m) => { + const counter = m.contract("Counter", CounterArtifact, [42]); + + return { counter }; +}); +``` + +If type inference isn't working for the returned contract, it is likely that the ABI type needs a `const` assertion or to be defined inline. + +This is because the ABI type must be as narrow as possible for Viem to infer the correct type for the contract, and by default Typescript will broaden the types within object literals. + +:::tip + +Typescript doesn't support importing JSON as const, it will instead automatically broaden the type, breaking Viem's inference. The artifact must be defined inline within Typescript. + +::: + +See [Viem's type inference requirements](https://viem.sh/docs/typescript.html#type-inference) for more details. + +## Sending transactions with a different account + +The `ignition.deploy` method will default to using the first account in Hardhat network's `accounts` array as the sender for all transactions. + +You can change this by passing a `defaultSender` within the options object as a second argument to the `deploy` method: + +```typescript +const [first, second] = await hre.viem.getWalletClients(); + +const result = await hre.ignition.deploy(ApolloModule, { + defaultSender: second.account.address, +}); +``` + +## Hardhat Ignition and Hardhat Viem + +Hardhat Ignition leverages the [hardhat-viem](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-viem) plugin for its type generation support, and inherits the same approach to [managing types and version stability](https://hardhat.org/hardhat-runner/docs/advanced/using-viem#managing-types-and-version-stability). + +Read the documentation on [hardhat-viem](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-viem) to learn more about Hardhat's Viem capabilities. diff --git a/docs/src/content/ignition/docs/guides/visualize.md b/docs/src/content/ignition/docs/guides/visualize.md new file mode 100644 index 0000000000..f398789972 --- /dev/null +++ b/docs/src/content/ignition/docs/guides/visualize.md @@ -0,0 +1,19 @@ +# Visualizing your module + +Hardhat Ignition comes built-in with a `visualize` task that generates an HTML report, illustrating visually the module's deployment process execution. This can be helpful for debugging and verifying that your perception of your modules aligns with Hardhat Ignition's execution plan. + +The `visualize` task takes the path to the module to visualize as an argument: + +```bash +npx hardhat ignition visualize ./ignition/modules/Apollo.js +``` + +Running `visualize` will generate the report and open it in your system's default browser. + +The report includes: + +- A summary of the contracts that will be deployed +- A summary of the contract calls that will be made +- A dependency graph of featuring modules and `Future` objects + +Check out the [visualize report of a module to deploy the ENS protocol](/static/ignition-visualize-example.html). diff --git a/docs/src/content/ignition/docs/other-components/_dirinfo.yaml b/docs/src/content/ignition/docs/other-components/_dirinfo.yaml new file mode 100644 index 0000000000..4122ddc4d6 --- /dev/null +++ b/docs/src/content/ignition/docs/other-components/_dirinfo.yaml @@ -0,0 +1,13 @@ +section-type: group +section-title: Other Hardhat components +order: + - href: /../../../hardhat-runner/docs + title: Hardhat Runner + - href: /../../../hardhat-network/docs + title: Hardhat Network + - href: /../../../hardhat-vscode/docs + title: Hardhat VSCode + - href: /../../../hardhat-chai-matchers/docs + title: Hardhat Chai Matchers + - href: /../../../hardhat-network-helpers/docs + title: Hardhat Network Helpers diff --git a/docs/src/content/layouts.yaml b/docs/src/content/layouts.yaml index c984269661..e7bfdde512 100644 --- a/docs/src/content/layouts.yaml +++ b/docs/src/content/layouts.yaml @@ -46,6 +46,17 @@ hardhat-network-helpers: - hardhat-network-helpers/docs - hardhat-network-helpers/docs/other-components +ignition: + title: Hardhat Ignition + folders: + - ignition + - ignition/docs + - ignition/docs/getting-started + - ignition/docs/config + - ignition/docs/guides + - ignition/docs/advanced + - ignition/docs/other-components + hidden: title: hidden folders: diff --git a/docs/src/content/tutorial/creating-a-new-hardhat-project.md b/docs/src/content/tutorial/creating-a-new-hardhat-project.md index 8f6d0d39a5..e835e8e41b 100644 --- a/docs/src/content/tutorial/creating-a-new-hardhat-project.md +++ b/docs/src/content/tutorial/creating-a-new-hardhat-project.md @@ -80,13 +80,13 @@ yarn add --dev hardhat In the same directory where you installed Hardhat run: ``` -npx hardhat +npx hardhat init ``` Select `Create an empty hardhat.config.js` with your keyboard and hit enter. ```markup{16} -$ npx hardhat +$ npx hardhat init 888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 @@ -96,11 +96,12 @@ $ npx hardhat 888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. 888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 -👷 Welcome to Hardhat v2.9.9 👷‍ +👷 Welcome to Hardhat v{HARDHAT_VERSION} 👷‍ ? What do you want to do? … Create a JavaScript project Create a TypeScript project + Create a TypeScript project (with Viem) ❯ Create an empty hardhat.config.js Quit ``` @@ -142,7 +143,7 @@ npm install --save-dev @nomicfoundation/hardhat-toolbox :::tab{value="npm 6"} ``` -npm install --save-dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers +npm install --save-dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomicfoundation/hardhat-ethers @nomicfoundation/hardhat-verify chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v6 ``` ::: @@ -150,7 +151,7 @@ npm install --save-dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat :::tab{value=yarn} ``` -yarn add --dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers +yarn add --dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomicfoundation/hardhat-ethers @nomicfoundation/hardhat-verify chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v6 ``` ::: @@ -164,6 +165,6 @@ require("@nomicfoundation/hardhat-toolbox"); /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { - solidity: "0.8.18", + solidity: "{RECOMMENDED_SOLC_VERSION}", }; ``` diff --git a/docs/src/content/tutorial/debugging-with-hardhat-network.md b/docs/src/content/tutorial/debugging-with-hardhat-network.md index 3e2f3c13e2..879a85b86a 100644 --- a/docs/src/content/tutorial/debugging-with-hardhat-network.md +++ b/docs/src/content/tutorial/debugging-with-hardhat-network.md @@ -9,7 +9,7 @@ When running your contracts and tests on Hardhat Network you can print logging m This is what it looks like: ```solidity{3} -pragma solidity ^0.8.9; +pragma solidity {LATEST_PRAGMA}; import "hardhat/console.sol"; diff --git a/docs/src/content/tutorial/deploying-to-a-live-network.md b/docs/src/content/tutorial/deploying-to-a-live-network.md index 088f044b51..80d6f61b32 100644 --- a/docs/src/content/tutorial/deploying-to-a-live-network.md +++ b/docs/src/content/tutorial/deploying-to-a-live-network.md @@ -1,12 +1,18 @@ # 7. Deploying to a live network +:::tip + +Try [Hardhat Ignition](/ignition) for your deployments! Our new declarative system for deploying smart contracts without getting caught up in execution details. + +::: + Once you're ready to share your dApp with other people, you may want to deploy it to a live network. This way others can access an instance that's not running locally on your system. The "mainnet" Ethereum network deals with real money, but there are separate "testnet" networks that do not. These testnets provide shared staging environments that do a good job of mimicking the real world scenario without putting real money at stake, and [Ethereum has several](https://ethereum.org/en/developers/docs/networks/#ethereum-testnets), like _Sepolia_ and _Goerli_. We recommend you deploy your contracts to the _Sepolia_ testnet. At the software level, deploying to a testnet is the same as deploying to mainnet. The only difference is which network you connect to. Let's look into what the code to deploy your contracts using ethers.js would look like. -The main concepts used are `Signer`, `ContractFactory` and `Contract` which we explained back in the [testing](testing-contracts.md) section. There's nothing new that needs to be done when compared to testing, given that when you're testing your contracts you're _actually_ making a deployment to your development network. This makes the code very similar, or even the same. +The main concepts used are `Signer` and `Contract` which we explained back in the [testing](testing-contracts.md) section. There's nothing new that needs to be done when compared to testing, given that when you're testing your contracts you're _actually_ making a deployment to your development network. This makes the code very similar, or even the same. Let's create a new directory `scripts` inside the project root's directory, and paste the following into a `deploy.js` file in that directory: @@ -16,12 +22,9 @@ async function main() { console.log("Deploying contracts with the account:", deployer.address); - console.log("Account balance:", (await deployer.getBalance()).toString()); - - const Token = await ethers.getContractFactory("Token"); - const token = await Token.deploy(); + const token = await ethers.deployContract("Token"); - console.log("Token address:", token.address); + console.log("Token address:", await token.getAddress()); } main() @@ -43,7 +46,6 @@ With our current configuration, running it without the `--network` parameter wou ``` $ npx hardhat run scripts/deploy.js Deploying contracts with the account: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 -Account balance: 10000000000000000000000 Token address: 0x5FbDB2315678afecb367f032d93F642f64180aa3 ``` @@ -71,7 +73,7 @@ const INFURA_API_KEY = "KEY"; const SEPOLIA_PRIVATE_KEY = "YOUR SEPOLIA PRIVATE KEY"; module.exports = { - solidity: "0.8.9", + solidity: "{RECOMMENDED_SOLC_VERSION}", networks: { sepolia: { url: `https://sepolia.infura.io/v3/${INFURA_API_KEY}`, @@ -101,7 +103,7 @@ const ALCHEMY_API_KEY = "KEY"; const SEPOLIA_PRIVATE_KEY = "YOUR SEPOLIA PRIVATE KEY"; module.exports = { - solidity: "0.8.9", + solidity: "{RECOMMENDED_SOLC_VERSION}", networks: { sepolia: { url: `https://eth-sepolia.g.alchemy.com/v2/${ALCHEMY_API_KEY}`, @@ -117,10 +119,12 @@ module.exports = { We're using [Infura](https://infura.io) or [Alchemy](https://alchemy.com/), but pointing `url` to any Ethereum node or gateway. Go grab your API key and come back. -To deploy on Sepolia you need to send some Sepolia ether to the address that's going to be making the deployment. You can get testnet ether from a faucet, a service that distributes testing-ETH for free. Here is one for Sepolia: +To deploy on Sepolia you need to send some Sepolia ether to the address that's going to be making the deployment. You can get testnet ether from a faucet, a service that distributes testing-ETH for free. Here are a few for Sepolia: - [Alchemy Sepolia Faucet](https://sepoliafaucet.com/) - [Coinbase Sepolia Faucet](https://coinbase.com/faucets/ethereum-sepolia-faucet) (only works if you are using the Coinbase Wallet) +- [Infura Sepolia Faucet](https://www.infura.io/faucet/sepolia) +- [Chainstack Sepolia Faucet](https://faucet.chainstack.com/sepolia-faucet) You'll have to change your wallet's network to Sepolia before transacting. diff --git a/docs/src/content/tutorial/final-thoughts.md b/docs/src/content/tutorial/final-thoughts.md index 419b85a365..bda100dde5 100644 --- a/docs/src/content/tutorial/final-thoughts.md +++ b/docs/src/content/tutorial/final-thoughts.md @@ -8,7 +8,7 @@ Here are some links you might find useful throughout your journey: - [Hardhat's documentation site](/docs/) - [Hardhat Toolbox's documentation](/hardhat-runner/plugins/nomicfoundation-hardhat-toolbox) - [Hardhat Support Discord server](/discord) -- [Ethers.js Documentation](https://docs.ethers.io/) +- [Ethers.js Documentation](https://docs.ethers.org/v6/) - [Mocha Documentation](https://mochajs.org/) - [Chai Documentation](https://www.chaijs.com/) - [Alchemy's smart contract tutorial](https://docs.alchemy.com/docs/hello-world-smart-contract) to also learn how to use Metamask and Solidity as well as an RPC endpoint like the one that Alchemy provides. diff --git a/docs/src/content/tutorial/setting-up-the-environment.md b/docs/src/content/tutorial/setting-up-the-environment.md index 50854bb22a..93fd128e18 100644 --- a/docs/src/content/tutorial/setting-up-the-environment.md +++ b/docs/src/content/tutorial/setting-up-the-environment.md @@ -21,7 +21,7 @@ Copy and paste these commands in a terminal: ``` sudo apt update sudo apt install curl git -curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - +curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs ``` @@ -33,9 +33,9 @@ There are multiple ways of installing Node.js on MacOS. We will be using [Node V ``` curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash -nvm install 18 -nvm use 18 -nvm alias default 18 +nvm install 20 +nvm use 20 +nvm alias default 20 npm install npm --global # Upgrade npm to the latest version ``` @@ -61,12 +61,12 @@ If your version of Node.js is older and [not supported by Hardhat](../hardhat-ru ### MacOS -You can change your Node.js version using [nvm](http://github.com/creationix/nvm). To upgrade to Node.js `18.x` run these in a terminal: +You can change your Node.js version using [nvm](http://github.com/creationix/nvm). To upgrade to Node.js `20.x` run these in a terminal: ``` -nvm install 18 -nvm use 18 -nvm alias default 18 +nvm install 20 +nvm use 20 +nvm alias default 20 npm install npm --global # Upgrade npm to the latest version ``` diff --git a/docs/src/content/tutorial/testing-contracts.md b/docs/src/content/tutorial/testing-contracts.md index 4d87502e75..e6d421e1ee 100644 --- a/docs/src/content/tutorial/testing-contracts.md +++ b/docs/src/content/tutorial/testing-contracts.md @@ -4,7 +4,7 @@ Writing automated tests when building smart contracts is of crucial importance, To test our contract, we are going to use Hardhat Network, a local Ethereum network designed for development. It comes built-in with Hardhat, and it's used as the default network. You don't need to setup anything to use it. -In our tests we're going to use [ethers.js](https://docs.ethers.io/v5/) to interact with the Ethereum contract we built in the previous section, and we'll use [Mocha](https://mochajs.org/) as our test runner. +In our tests we're going to use [ethers.js](https://docs.ethers.org/v6/) to interact with the Ethereum contract we built in the previous section, and we'll use [Mocha](https://mochajs.org/) as our test runner. ## Writing tests @@ -19,9 +19,7 @@ describe("Token contract", function () { it("Deployment should assign the total supply of tokens to the owner", async function () { const [owner] = await ethers.getSigners(); - const Token = await ethers.getContractFactory("Token"); - - const hardhatToken = await Token.deploy(); + const hardhatToken = await ethers.deployContract("Token"); const ownerBalance = await hardhatToken.balanceOf(owner.address); expect(await hardhatToken.totalSupply()).to.equal(ownerBalance); @@ -57,21 +55,15 @@ const { ethers } = require("hardhat"); :::tip -To learn more about `Signer`, you can look at the [Signers documentation](https://docs.ethers.io/v5/api/signer/). +To learn more about `Signer`, you can look at the [Signers documentation](https://docs.ethers.org/v6/api/providers/#Signer). ::: ```js -const Token = await ethers.getContractFactory("Token"); -``` - -A `ContractFactory` in ethers.js is an abstraction used to deploy new smart contracts, so `Token` here is a factory for instances of our token contract. - -```js -const hardhatToken = await Token.deploy(); +const hardhatToken = await ethers.deployContract("Token"); ``` -Calling `deploy()` on a `ContractFactory` will start the deployment, and return a `Promise` that resolves to a `Contract`. This is the object that has a method for each of your smart contract functions. +Calling `ethers.deployContract("Token")` will start the deployment of our token contract, and return a `Promise` that resolves to a `Contract`. This is the object that has a method for each of your smart contract functions. ```js const ownerBalance = await hardhatToken.balanceOf(owner.address); @@ -79,7 +71,7 @@ const ownerBalance = await hardhatToken.balanceOf(owner.address); Once the contract is deployed, we can call our contract methods on `hardhatToken`. Here we get the balance of the owner account by calling the contract's `balanceOf()` method. -Recall that the account that deploys the token gets its entire supply. By default, `ContractFactory` and `Contract` instances are connected to the first signer. This means that the account in the `owner` variable executed the deployment, and `balanceOf()` should return the entire supply amount. +Recall that the account that deploys the token gets its entire supply. By default, `Contract` instances are connected to the first signer. This means that the account in the `owner` variable executed the deployment, and `balanceOf()` should return the entire supply amount. ```js expect(await hardhatToken.totalSupply()).to.equal(ownerBalance); @@ -93,7 +85,7 @@ To do this we're using [Chai](https://www.chaijs.com/) which is a popular JavaSc If you need to test your code by sending a transaction from an account (or `Signer` in ethers.js terminology) other than the default one, you can use the `connect()` method on your ethers.js `Contract` object to connect it to a different account, like this: -```js{18} +```js{16} const { expect } = require("chai"); describe("Token contract", function () { @@ -102,9 +94,7 @@ describe("Token contract", function () { it("Should transfer tokens between accounts", async function() { const [owner, addr1, addr2] = await ethers.getSigners(); - const Token = await ethers.getContractFactory("Token"); - - const hardhatToken = await Token.deploy(); + const hardhatToken = await ethers.deployContract("Token"); // Transfer 50 tokens from owner to addr1 await hardhatToken.transfer(addr1.address, 50); @@ -124,20 +114,19 @@ The two tests that we wrote begin with their setup, which in this case means dep You can avoid code duplication and improve the performance of your test suite by using **fixtures**. A fixture is a setup function that is run only the first time it's invoked. On subsequent invocations, instead of re-running it, Hardhat will reset the state of the network to what it was at the point after the fixture was initially executed. ```js -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); +const { + loadFixture, +} = require("@nomicfoundation/hardhat-toolbox/network-helpers"); const { expect } = require("chai"); describe("Token contract", function () { async function deployTokenFixture() { - const Token = await ethers.getContractFactory("Token"); const [owner, addr1, addr2] = await ethers.getSigners(); - const hardhatToken = await Token.deploy(); - - await hardhatToken.deployed(); + const hardhatToken = await ethers.deployContract("Token"); // Fixtures can return anything you consider useful for your tests - return { Token, hardhatToken, owner, addr1, addr2 }; + return { hardhatToken, owner, addr1, addr2 }; } it("Should assign the total supply of tokens to the owner", async function () { @@ -184,7 +173,9 @@ const { expect } = require("chai"); // We use `loadFixture` to share common setups (or fixtures) between tests. // Using this simplifies your tests and makes them run faster, by taking // advantage of Hardhat Network's snapshot functionality. -const { loadFixture } = require("@nomicfoundation/hardhat-network-helpers"); +const { + loadFixture, +} = require("@nomicfoundation/hardhat-toolbox/network-helpers"); // `describe` is a Mocha function that allows you to organize your tests. // Having your tests organized makes debugging them easier. All Mocha @@ -198,19 +189,18 @@ describe("Token contract", function () { // loadFixture to run this setup once, snapshot that state, and reset Hardhat // Network to that snapshot in every test. async function deployTokenFixture() { - // Get the ContractFactory and Signers here. - const Token = await ethers.getContractFactory("Token"); + // Get the Signers here. const [owner, addr1, addr2] = await ethers.getSigners(); - // To deploy our contract, we just have to call Token.deploy() and await - // its deployed() method, which happens once its transaction has been + // To deploy our contract, we just have to call ethers.deployContract and await + // its waitForDeployment() method, which happens once its transaction has been // mined. - const hardhatToken = await Token.deploy(); + const hardhatToken = await ethers.deployContract("Token"); - await hardhatToken.deployed(); + await hardhatToken.waitForDeployment(); // Fixtures can return anything you consider useful for your tests - return { Token, hardhatToken, owner, addr1, addr2 }; + return { hardhatToken, owner, addr1, addr2 }; } // You can nest describe calls to create subsections. @@ -299,14 +289,14 @@ This is what the output of `npx hardhat test` should look like against the full ``` $ npx hardhat test - Token contract + Token contract Deployment - ✓ Should set the right owner - ✓ Should assign the total supply of tokens to the owner + ✔ Should set the right owner (889ms) + ✔ Should assign the total supply of tokens to the owner Transactions - ✓ Should transfer tokens between accounts (199ms) - ✓ Should fail if sender doesn’t have enough tokens - ✓ Should update balances after transfers (111ms) + ✔ Should transfer tokens between accounts (121ms) + ✔ Should emit Transfer events + ✔ Should fail if sender doesn't have enough tokens (74ms) 5 passing (1s) diff --git a/docs/src/content/tutorial/writing-and-compiling-contracts.md b/docs/src/content/tutorial/writing-and-compiling-contracts.md index 4c8c2da679..3f73b986c9 100644 --- a/docs/src/content/tutorial/writing-and-compiling-contracts.md +++ b/docs/src/content/tutorial/writing-and-compiling-contracts.md @@ -31,7 +31,7 @@ To get syntax highlighting and editing assistance for Solidity in Visual Studio // Solidity files have to start with this pragma. // It will be used by the Solidity compiler to validate its version. -pragma solidity ^0.8.9; +pragma solidity {LATEST_PRAGMA}; // This is the main building block for smart contracts. @@ -107,8 +107,7 @@ To compile the contract run `npx hardhat compile` in your terminal. The `compile ``` $ npx hardhat compile -Compiling 1 file with 0.8.9 -Compilation finished successfully +Compiled 1 Solidity file successfully (evm target: paris). ``` The contract has been successfully compiled and it's ready to be used. diff --git a/docs/src/model/markdown.tsx b/docs/src/model/markdown.tsx index 935ff15812..f0946c54c2 100644 --- a/docs/src/model/markdown.tsx +++ b/docs/src/model/markdown.tsx @@ -103,6 +103,31 @@ export const withoutComments = (content: string) => { return content.replace(//gm, ""); }; +export const replacePlaceholders = (content: string) => { + const recommendedSolcVersion = "0.8.23"; + const latestPragma = "^0.8.0"; + const hardhatPackageJson = fs + .readFileSync( + path.resolve( + __dirname, + "..", + "..", + "..", + "..", + "packages", + "hardhat-core", + "package.json" + ) + ) + .toString(); + const hardhatVersion = JSON.parse(hardhatPackageJson).version; + + return content + .replaceAll("{RECOMMENDED_SOLC_VERSION}", recommendedSolcVersion) + .replaceAll("{LATEST_PRAGMA}", latestPragma) + .replaceAll("{HARDHAT_VERSION}", hardhatVersion); +}; + export const readMDFileFromPathOrIndex = ( fileName: string ): { source: string; fileName: string } => { @@ -201,7 +226,9 @@ export const generateTitleFromContent = (content: string) => { export const parseMdFile = (source: string) => { const { content, data } = matter(source); - const formattedContent = withoutComments(withInsertedCodeFromLinks(content)); + const formattedContent = replacePlaceholders( + withoutComments(withInsertedCodeFromLinks(content)) + ); const tocTitle = data.title ?? generateTitleFromContent(formattedContent); const seoTitle = tocTitle || "Hardhat"; diff --git a/e2e/.gitignore b/e2e/.gitignore new file mode 100644 index 0000000000..2e7f802583 --- /dev/null +++ b/e2e/.gitignore @@ -0,0 +1,3 @@ +# All e2e test temporary folders +projects-initialization-tests-* +fixture-projects-run-* diff --git a/e2e/README.md b/e2e/README.md new file mode 100644 index 0000000000..fb7e8f3c17 --- /dev/null +++ b/e2e/README.md @@ -0,0 +1,23 @@ +### Hardhat initialization tests + +To run the "hardhat init" tests, use the command: + +``` +./test-project-initialization.sh +``` + +### All other Hardhat scenario tests + +To run all the fixture tests, use the command: + +``` +./run-fixture-projects.sh +``` + +You can run a single project's tests by passing the project folder name as a parameter. + +Example: to run only the tests inside the `vars` folder, use: + +``` +./run-fixture-projects.sh vars +``` diff --git a/e2e/clean.sh b/e2e/clean.sh new file mode 100644 index 0000000000..a8780dbe85 --- /dev/null +++ b/e2e/clean.sh @@ -0,0 +1,3 @@ +#! /usr/bin/env bash +rm -fr fixture-projects-run-* +rm -fr projects-initialization-tests-* diff --git a/e2e/fixture-projects/clean/contracts/Lock.sol b/e2e/fixture-projects/clean/contracts/Lock.sol new file mode 100644 index 0000000000..e1e7231625 --- /dev/null +++ b/e2e/fixture-projects/clean/contracts/Lock.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.19; + +// Uncomment this line to use console.log +// import "hardhat/console.sol"; + +contract Lock { + uint public unlockTime; + address payable public owner; + + event Withdrawal(uint amount, uint when); + + constructor(uint _unlockTime) payable { + require( + block.timestamp < _unlockTime, + "Unlock time should be in the future" + ); + + unlockTime = _unlockTime; + owner = payable(msg.sender); + } + + function withdraw() public { + // Uncomment this line, and the import of "hardhat/console.sol", to print a log in your terminal + // console.log("Unlock time is %o and block timestamp is %o", unlockTime, block.timestamp); + + require(block.timestamp >= unlockTime, "You can't withdraw yet"); + require(msg.sender == owner, "You aren't the owner"); + + emit Withdrawal(address(this).balance, block.timestamp); + + owner.transfer(address(this).balance); + } +} diff --git a/e2e/fixture-projects/clean/hardhat.config.js b/e2e/fixture-projects/clean/hardhat.config.js new file mode 100644 index 0000000000..aa3527a6b0 --- /dev/null +++ b/e2e/fixture-projects/clean/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.8.19", +}; diff --git a/e2e/fixture-projects/clean/package.json b/e2e/fixture-projects/clean/package.json new file mode 100644 index 0000000000..065fd51235 --- /dev/null +++ b/e2e/fixture-projects/clean/package.json @@ -0,0 +1,3 @@ +{ + "name": "clean" +} diff --git a/e2e/fixture-projects/clean/test.sh b/e2e/fixture-projects/clean/test.sh new file mode 100644 index 0000000000..7c295314fe --- /dev/null +++ b/e2e/fixture-projects/clean/test.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env sh + +# fail if any commands fails +set -e + +# import helpers functions +. ../../helpers.sh + +echo "Running tests: $(basename "$(pwd)")" + +run_test_and_handle_failure "npx hardhat compile" 0 + +echo "assert that the artifacts and cache directory exist and are not empty" +assert_directory_exists "artifacts" +assert_directory_not_empty "artifacts" +assert_directory_exists "cache" +assert_directory_not_empty "cache" + +echo "it should run the command clean successfully" +run_test_and_handle_failure "npx hardhat clean" 0 + +echo "it should have deleted the artifacts directory and emptied the cache directory" +assert_directory_doesnt_exist "artifacts" +assert_directory_exists "cache" +assert_directory_empty "cache" diff --git a/e2e/fixture-projects/compile-fail/contracts/Foo.sol b/e2e/fixture-projects/compile-fail/contracts/Foo.sol new file mode 100644 index 0000000000..8db6e06588 --- /dev/null +++ b/e2e/fixture-projects/compile-fail/contracts/Foo.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Foo { + uint public x; + + function inc() public { + x++; + error + } +} diff --git a/e2e/fixture-projects/compile-fail/hardhat.config.js b/e2e/fixture-projects/compile-fail/hardhat.config.js new file mode 100644 index 0000000000..50373a2a35 --- /dev/null +++ b/e2e/fixture-projects/compile-fail/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.8.20" +} diff --git a/e2e/fixture-projects/compile-fail/package.json b/e2e/fixture-projects/compile-fail/package.json new file mode 100644 index 0000000000..57059e81f7 --- /dev/null +++ b/e2e/fixture-projects/compile-fail/package.json @@ -0,0 +1,3 @@ +{ + "name": "compile-fail" +} diff --git a/e2e/fixture-projects/compile-fail/test.sh b/e2e/fixture-projects/compile-fail/test.sh new file mode 100644 index 0000000000..2784044fe6 --- /dev/null +++ b/e2e/fixture-projects/compile-fail/test.sh @@ -0,0 +1,12 @@ +#! /usr/bin/env sh + +# fail if any commands fails +set -e + +# import helpers functions +. ../../helpers.sh + +echo "Running tests: $(basename "$(pwd)")" + +echo "it should fail the compilation" +run_test_and_handle_failure "npx hardhat compile" 1 diff --git a/e2e/fixture-projects/compile/contracts/Foo.sol b/e2e/fixture-projects/compile/contracts/Foo.sol new file mode 100644 index 0000000000..7675b30d64 --- /dev/null +++ b/e2e/fixture-projects/compile/contracts/Foo.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Foo { + uint public x; + + function inc() public { + x++; + } +} diff --git a/e2e/fixture-projects/compile/hardhat.config.js b/e2e/fixture-projects/compile/hardhat.config.js new file mode 100644 index 0000000000..50373a2a35 --- /dev/null +++ b/e2e/fixture-projects/compile/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.8.20" +} diff --git a/e2e/fixture-projects/compile/package.json b/e2e/fixture-projects/compile/package.json new file mode 100644 index 0000000000..008bd78a1f --- /dev/null +++ b/e2e/fixture-projects/compile/package.json @@ -0,0 +1,3 @@ +{ + "name": "compile" +} diff --git a/e2e/fixture-projects/compile/test.sh b/e2e/fixture-projects/compile/test.sh new file mode 100644 index 0000000000..2720786b85 --- /dev/null +++ b/e2e/fixture-projects/compile/test.sh @@ -0,0 +1,12 @@ +#! /usr/bin/env sh + +# fail if any commands fails +set -e + +# import helpers functions +. ../../helpers.sh + +echo "Running tests: $(basename "$(pwd)")" + +echo "it should compile the contracts in the default project folder" +run_test_and_handle_failure "npx hardhat compile" 0 diff --git a/e2e/fixture-projects/flatten/contracts/A.sol b/e2e/fixture-projects/flatten/contracts/A.sol new file mode 100644 index 0000000000..508a7148de --- /dev/null +++ b/e2e/fixture-projects/flatten/contracts/A.sol @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: MIT */ + +pragma abicoder v2; +pragma solidity ^0.8.19; + +import "./B.sol"; + +contract A { + uint256 private storedData; + + function set(uint256 value) public { + storedData = value; + } + + function get() public view returns (uint256) { + return storedData; + } +} diff --git a/e2e/fixture-projects/flatten/contracts/B.sol b/e2e/fixture-projects/flatten/contracts/B.sol new file mode 100644 index 0000000000..c9d01f6261 --- /dev/null +++ b/e2e/fixture-projects/flatten/contracts/B.sol @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: MPL-2.0 + +pragma solidity ^0.8.19; + +import "./C.sol"; + +contract B { + uint public x; + + function inc() public { + x++; + } +} diff --git a/e2e/fixture-projects/flatten/contracts/C.sol b/e2e/fixture-projects/flatten/contracts/C.sol new file mode 100644 index 0000000000..f687e1a3bd --- /dev/null +++ b/e2e/fixture-projects/flatten/contracts/C.sol @@ -0,0 +1,3 @@ +pragma solidity ^0.8.19; + +contract C {} diff --git a/e2e/fixture-projects/flatten/contracts/Lock.sol b/e2e/fixture-projects/flatten/contracts/Lock.sol new file mode 100644 index 0000000000..e1e7231625 --- /dev/null +++ b/e2e/fixture-projects/flatten/contracts/Lock.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.19; + +// Uncomment this line to use console.log +// import "hardhat/console.sol"; + +contract Lock { + uint public unlockTime; + address payable public owner; + + event Withdrawal(uint amount, uint when); + + constructor(uint _unlockTime) payable { + require( + block.timestamp < _unlockTime, + "Unlock time should be in the future" + ); + + unlockTime = _unlockTime; + owner = payable(msg.sender); + } + + function withdraw() public { + // Uncomment this line, and the import of "hardhat/console.sol", to print a log in your terminal + // console.log("Unlock time is %o and block timestamp is %o", unlockTime, block.timestamp); + + require(block.timestamp >= unlockTime, "You can't withdraw yet"); + require(msg.sender == owner, "You aren't the owner"); + + emit Withdrawal(address(this).balance, block.timestamp); + + owner.transfer(address(this).balance); + } +} diff --git a/e2e/fixture-projects/flatten/hardhat.config.js b/e2e/fixture-projects/flatten/hardhat.config.js new file mode 100644 index 0000000000..aa3527a6b0 --- /dev/null +++ b/e2e/fixture-projects/flatten/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.8.19", +}; diff --git a/e2e/fixture-projects/flatten/package.json b/e2e/fixture-projects/flatten/package.json new file mode 100644 index 0000000000..5f25ae1f07 --- /dev/null +++ b/e2e/fixture-projects/flatten/package.json @@ -0,0 +1,3 @@ +{ + "name": "flatten" +} diff --git a/e2e/fixture-projects/flatten/test.sh b/e2e/fixture-projects/flatten/test.sh new file mode 100644 index 0000000000..013c104ab8 --- /dev/null +++ b/e2e/fixture-projects/flatten/test.sh @@ -0,0 +1,15 @@ +#! /usr/bin/env sh + +# fail if any commands fails +set -e + +# import helpers functions +. ../../helpers.sh + +echo "Running tests: $(basename "$(pwd)")" + +echo "it should flatten all the files in the folder because no file names are passed" +run_test_and_handle_failure "npx hardhat flatten" 0 + +echo "it should flatten only the 'Lock.sol' file because it is passed as an argument" +run_test_and_handle_failure "npx hardhat flatten contracts/Lock.sol" 0 diff --git a/e2e/fixture-projects/gas-reporter/contracts/Foo.sol b/e2e/fixture-projects/gas-reporter/contracts/Foo.sol new file mode 100644 index 0000000000..7675b30d64 --- /dev/null +++ b/e2e/fixture-projects/gas-reporter/contracts/Foo.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Foo { + uint public x; + + function inc() public { + x++; + } +} diff --git a/e2e/fixture-projects/gas-reporter/hardhat.config.js b/e2e/fixture-projects/gas-reporter/hardhat.config.js new file mode 100644 index 0000000000..842536aa68 --- /dev/null +++ b/e2e/fixture-projects/gas-reporter/hardhat.config.js @@ -0,0 +1,5 @@ +require("@nomicfoundation/hardhat-toolbox"); + +module.exports = { + solidity: "0.8.20", +}; diff --git a/e2e/fixture-projects/gas-reporter/package.json b/e2e/fixture-projects/gas-reporter/package.json new file mode 100644 index 0000000000..3cd8dcbaee --- /dev/null +++ b/e2e/fixture-projects/gas-reporter/package.json @@ -0,0 +1,6 @@ +{ + "name": "gas-reporter", + "devDependencies": { + "@nomicfoundation/hardhat-toolbox": "^4.0.0" + } +} diff --git a/e2e/fixture-projects/gas-reporter/stderr b/e2e/fixture-projects/gas-reporter/stderr new file mode 100644 index 0000000000..de9376cfbd --- /dev/null +++ b/e2e/fixture-projects/gas-reporter/stderr @@ -0,0 +1,12 @@ +An unexpected error occurred: +TypeError: Cannot read properties of undefined (reading 'createFixture') + at Object. (C:\Users\apich\test\SimpleERC20.test.ts:6:27) + at Module._compile (node:internal/modules/cjs/loader:1105:14) + at Module.m._compile (C:\Users\apich\hardhat\node_modules\.pnpm\ts-node@10.9.1_@types+node@16.18.40_typescript@5.0.4\node_modules\ts-node\src\index.ts:1618:23) + at Module._extensions..js (node:internal/modules/cjs/loader:1159:10) + at Object.require.extensions. [as .ts] (C:\Users\apich\hardhat\node_modules\.pnpm\ts-node@10.9.1_@types+node@16.18.40_typescript@5.0.4\node_modules\ts-node\src\index.ts:1621:12) + at Module.load (node:internal/modules/cjs/loader:981:32) + at Function.Module._load (node:internal/modules/cjs/loader:827:12) + at Module.require (node:internal/modules/cjs/loader:1005:19) + at require (node:internal/modules/cjs/helpers:102:18) + at C:\Users\apich\hardhat\node_modules\.pnpm\mocha@10.2.0\node_modules\mocha\lib\mocha.js:414:36 diff --git a/e2e/fixture-projects/gas-reporter/stdout b/e2e/fixture-projects/gas-reporter/stdout new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/e2e/fixture-projects/gas-reporter/stdout @@ -0,0 +1 @@ + diff --git a/e2e/fixture-projects/gas-reporter/test.sh b/e2e/fixture-projects/gas-reporter/test.sh new file mode 100644 index 0000000000..b665899682 --- /dev/null +++ b/e2e/fixture-projects/gas-reporter/test.sh @@ -0,0 +1,13 @@ +#! /usr/bin/env sh + +# fail if any commands fails +set -e + +# import helpers functions +. ../../helpers.sh + +echo "Running tests: $(basename "$(pwd)")" + +echo "it should run the gas reporter while running the tests" +export "REPORT_GAS='true'" +run_test_and_handle_failure "npx hardhat test" 0 diff --git a/e2e/fixture-projects/gas-reporter/test/test.js b/e2e/fixture-projects/gas-reporter/test/test.js new file mode 100644 index 0000000000..df274bd5e1 --- /dev/null +++ b/e2e/fixture-projects/gas-reporter/test/test.js @@ -0,0 +1,3 @@ +it("provider should be available", async function () { + await hre.network.provider.send("eth_accounts"); +}); diff --git a/e2e/fixture-projects/help/hardhat.config.js b/e2e/fixture-projects/help/hardhat.config.js new file mode 100644 index 0000000000..aa3527a6b0 --- /dev/null +++ b/e2e/fixture-projects/help/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.8.19", +}; diff --git a/e2e/fixture-projects/help/package.json b/e2e/fixture-projects/help/package.json new file mode 100644 index 0000000000..084a60b1ec --- /dev/null +++ b/e2e/fixture-projects/help/package.json @@ -0,0 +1,3 @@ +{ + "name": "help" +} diff --git a/e2e/fixture-projects/help/stderr b/e2e/fixture-projects/help/stderr new file mode 100644 index 0000000000..a1c9572e12 --- /dev/null +++ b/e2e/fixture-projects/help/stderr @@ -0,0 +1,3 @@ +Error HH12: Trying to use a non-local installation of Hardhat, which is not supported. +Please install Hardhat locally using npm or Yarn, and try again. +For more info go to https://hardhat.org/HH12 or run Hardhat with --show-stack-traces diff --git a/e2e/fixture-projects/help/stdout b/e2e/fixture-projects/help/stdout new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/e2e/fixture-projects/help/stdout @@ -0,0 +1 @@ + diff --git a/e2e/fixture-projects/help/test.sh b/e2e/fixture-projects/help/test.sh new file mode 100644 index 0000000000..eb8309b426 --- /dev/null +++ b/e2e/fixture-projects/help/test.sh @@ -0,0 +1,15 @@ +#! /usr/bin/env sh + +# fail if any commands fails +set -e + +# import helpers functions +. ../../helpers.sh + +echo "Running tests: $(basename "$(pwd)")" + +echo "it should show the help information when no argument is passed" +run_test_and_handle_failure "npx hardhat" 0 + +echo "it should show the help information when the 'help' argument is passed" +run_test_and_handle_failure "npx hardhat help" 0 diff --git a/e2e/fixture-projects/solidity-coverage/contracts/Foo.sol b/e2e/fixture-projects/solidity-coverage/contracts/Foo.sol new file mode 100644 index 0000000000..7675b30d64 --- /dev/null +++ b/e2e/fixture-projects/solidity-coverage/contracts/Foo.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Foo { + uint public x; + + function inc() public { + x++; + } +} diff --git a/e2e/fixture-projects/solidity-coverage/hardhat.config.js b/e2e/fixture-projects/solidity-coverage/hardhat.config.js new file mode 100644 index 0000000000..842536aa68 --- /dev/null +++ b/e2e/fixture-projects/solidity-coverage/hardhat.config.js @@ -0,0 +1,5 @@ +require("@nomicfoundation/hardhat-toolbox"); + +module.exports = { + solidity: "0.8.20", +}; diff --git a/e2e/fixture-projects/solidity-coverage/package.json b/e2e/fixture-projects/solidity-coverage/package.json new file mode 100644 index 0000000000..12efd8efe5 --- /dev/null +++ b/e2e/fixture-projects/solidity-coverage/package.json @@ -0,0 +1,6 @@ +{ + "name": "solidity-coverage", + "devDependencies": { + "@nomicfoundation/hardhat-toolbox": "^4.0.0" + } +} diff --git a/e2e/fixture-projects/solidity-coverage/stderr b/e2e/fixture-projects/solidity-coverage/stderr new file mode 100644 index 0000000000..a1c9572e12 --- /dev/null +++ b/e2e/fixture-projects/solidity-coverage/stderr @@ -0,0 +1,3 @@ +Error HH12: Trying to use a non-local installation of Hardhat, which is not supported. +Please install Hardhat locally using npm or Yarn, and try again. +For more info go to https://hardhat.org/HH12 or run Hardhat with --show-stack-traces diff --git a/e2e/fixture-projects/solidity-coverage/stdout b/e2e/fixture-projects/solidity-coverage/stdout new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/e2e/fixture-projects/solidity-coverage/stdout @@ -0,0 +1 @@ + diff --git a/e2e/fixture-projects/solidity-coverage/test.sh b/e2e/fixture-projects/solidity-coverage/test.sh new file mode 100644 index 0000000000..b6def9d305 --- /dev/null +++ b/e2e/fixture-projects/solidity-coverage/test.sh @@ -0,0 +1,12 @@ +#! /usr/bin/env sh + +# fail if any commands fails +set -e + +# import helpers functions +. ../../helpers.sh + +echo "Running tests: $(basename "$(pwd)")" + +echo "it should run the tests and show the code coverage" +run_test_and_handle_failure "npx hardhat coverage" 0 diff --git a/e2e/fixture-projects/solidity-coverage/test/test.js b/e2e/fixture-projects/solidity-coverage/test/test.js new file mode 100644 index 0000000000..df274bd5e1 --- /dev/null +++ b/e2e/fixture-projects/solidity-coverage/test/test.js @@ -0,0 +1,3 @@ +it("provider should be available", async function () { + await hre.network.provider.send("eth_accounts"); +}); diff --git a/e2e/fixture-projects/test/contracts/Foo.sol b/e2e/fixture-projects/test/contracts/Foo.sol new file mode 100644 index 0000000000..7675b30d64 --- /dev/null +++ b/e2e/fixture-projects/test/contracts/Foo.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Foo { + uint public x; + + function inc() public { + x++; + } +} diff --git a/e2e/fixture-projects/test/hardhat.config.js b/e2e/fixture-projects/test/hardhat.config.js new file mode 100644 index 0000000000..50373a2a35 --- /dev/null +++ b/e2e/fixture-projects/test/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.8.20" +} diff --git a/e2e/fixture-projects/test/package.json b/e2e/fixture-projects/test/package.json new file mode 100644 index 0000000000..600e5f1a72 --- /dev/null +++ b/e2e/fixture-projects/test/package.json @@ -0,0 +1,3 @@ +{ + "name": "test" +} diff --git a/e2e/fixture-projects/test/stderr b/e2e/fixture-projects/test/stderr new file mode 100644 index 0000000000..de9376cfbd --- /dev/null +++ b/e2e/fixture-projects/test/stderr @@ -0,0 +1,12 @@ +An unexpected error occurred: +TypeError: Cannot read properties of undefined (reading 'createFixture') + at Object. (C:\Users\apich\test\SimpleERC20.test.ts:6:27) + at Module._compile (node:internal/modules/cjs/loader:1105:14) + at Module.m._compile (C:\Users\apich\hardhat\node_modules\.pnpm\ts-node@10.9.1_@types+node@16.18.40_typescript@5.0.4\node_modules\ts-node\src\index.ts:1618:23) + at Module._extensions..js (node:internal/modules/cjs/loader:1159:10) + at Object.require.extensions. [as .ts] (C:\Users\apich\hardhat\node_modules\.pnpm\ts-node@10.9.1_@types+node@16.18.40_typescript@5.0.4\node_modules\ts-node\src\index.ts:1621:12) + at Module.load (node:internal/modules/cjs/loader:981:32) + at Function.Module._load (node:internal/modules/cjs/loader:827:12) + at Module.require (node:internal/modules/cjs/loader:1005:19) + at require (node:internal/modules/cjs/helpers:102:18) + at C:\Users\apich\hardhat\node_modules\.pnpm\mocha@10.2.0\node_modules\mocha\lib\mocha.js:414:36 diff --git a/e2e/fixture-projects/test/stdout b/e2e/fixture-projects/test/stdout new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/e2e/fixture-projects/test/stdout @@ -0,0 +1 @@ + diff --git a/e2e/fixture-projects/test/test.sh b/e2e/fixture-projects/test/test.sh new file mode 100644 index 0000000000..fa8b4e6478 --- /dev/null +++ b/e2e/fixture-projects/test/test.sh @@ -0,0 +1,12 @@ +#! /usr/bin/env sh + +# fail if any commands fails +set -e + +# import helpers functions +. ../../helpers.sh + +echo "Running tests: $(basename "$(pwd)")" + +echo "it should run the tests in the project folder" +run_test_and_handle_failure "npx hardhat test" 0 diff --git a/e2e/fixture-projects/test/test/test.js b/e2e/fixture-projects/test/test/test.js new file mode 100644 index 0000000000..df274bd5e1 --- /dev/null +++ b/e2e/fixture-projects/test/test/test.js @@ -0,0 +1,3 @@ +it("provider should be available", async function () { + await hre.network.provider.send("eth_accounts"); +}); diff --git a/e2e/fixture-projects/vars/hardhat.config.js b/e2e/fixture-projects/vars/hardhat.config.js new file mode 100644 index 0000000000..0a244b12bc --- /dev/null +++ b/e2e/fixture-projects/vars/hardhat.config.js @@ -0,0 +1,8 @@ +vars.get("HH_E2E_TESTS_KEY_1"); +vars.get("HH_E2E_TESTS_KEY_2", "default value"); + +vars.has("HH_E2E_TESTS_KEY_3"); + +module.exports = { + solidity: "0.8.19", +}; diff --git a/e2e/fixture-projects/vars/package.json b/e2e/fixture-projects/vars/package.json new file mode 100644 index 0000000000..5ae0cc817a --- /dev/null +++ b/e2e/fixture-projects/vars/package.json @@ -0,0 +1,3 @@ +{ + "name": "vars" +} diff --git a/e2e/fixture-projects/vars/stderr b/e2e/fixture-projects/vars/stderr new file mode 100644 index 0000000000..e69de29bb2 diff --git a/e2e/fixture-projects/vars/stdout b/e2e/fixture-projects/vars/stdout new file mode 100644 index 0000000000..3cc61d9518 --- /dev/null +++ b/e2e/fixture-projects/vars/stdout @@ -0,0 +1,43 @@ +Hardhat version 2.20.1 + +Usage: hardhat [GLOBAL OPTIONS] [SCOPE] [TASK OPTIONS] + +GLOBAL OPTIONS: + + --config A Hardhat config file. + --emoji Use emoji in messages. + --flamegraph Generate a flamegraph of your Hardhat tasks + --help Shows this message, or a task's help if its name is provided + --max-memory The maximum amount of memory that Hardhat can use. + --network The network to connect to. + --show-stack-traces Show stack traces (always enabled on CI servers). + --tsconfig A TypeScript config file. + --typecheck Enable TypeScript type-checking of your scripts/tests + --verbose Enables Hardhat verbose logging + --version Shows hardhat's version. + + +AVAILABLE TASKS: + + check Check whatever you need + clean Clears the cache and deletes all artifacts + compile Compiles the entire project, building all artifacts + console Opens a hardhat console + coverage Generates a code coverage report for tests + flatten Flattens and prints contracts and their dependencies. If no file is passed, all the contracts in the project will be flattened. + gas-reporter:merge + help Prints this message + node Starts a JSON-RPC server on top of Hardhat Network + run Runs a user-defined script after compiling the project + test Runs mocha tests + typechain Generate Typechain typings for compiled contracts + verify Verifies a contract on Etherscan + + +AVAILABLE TASK SCOPES: + + ignition Deploy your smart contracts using Hardhat Ignition + vars Manage your configuration variables + +To get help for a specific task run: npx hardhat help [SCOPE] + diff --git a/e2e/fixture-projects/vars/test.sh b/e2e/fixture-projects/vars/test.sh new file mode 100644 index 0000000000..e399c83807 --- /dev/null +++ b/e2e/fixture-projects/vars/test.sh @@ -0,0 +1,26 @@ +#! /usr/bin/env sh + +# fail if any commands fails +set -e + +# import helpers functions +. ../../helpers.sh + +echo "Running tests: $(basename "$(pwd)")" + +echo "it should print an error saying that the configuration variables are not set" +run_test_and_handle_failure "npx hardhat" 1 + +echo "it should list the configuartion variables that need to be set" +run_test_and_handle_failure "npx hardhat vars setup" 0 + +echo "it should list the keys without failing (even if there are no keys)" +run_test_and_handle_failure "npx hardhat vars list" 0 + +echo "it should fail because the key does not exist" +# random key to be sure that it does not exist if this test is ran locally +run_test_and_handle_failure "npx hardhat vars get HH_KEY_DO_NOT_EXIST_3468267" 1 + +# +# Do not DELETE or SET keys to avoid modifing the configuration variables of the user running these tests +# diff --git a/e2e/helpers.sh b/e2e/helpers.sh new file mode 100644 index 0000000000..7bd8a6b2f9 --- /dev/null +++ b/e2e/helpers.sh @@ -0,0 +1,60 @@ +#! /usr/bin/env sh + +# fail if any commands fails +set -e + +print_error_msg() { + echo "\033[31mERROR: $1\033[0m" +} + +run_test_and_handle_failure() { + # $1 command to execute + # $2 expected exit code + # $3 additional error message + + command_to_execute="$1" + expected_exit_code="$2" + additional_error_message="$3" + + if [ "$expected_exit_code" -eq "0" ]; then + # the command should be executed successfully + if ! $command_to_execute >stdout 2>stderr; then + print_error_msg "The command failed.\nOutput:'$(cat stdout)'\nError: '$(cat stderr)'\n$additional_error_message" + exit 1 + fi + else + # the command should fail + if $command_to_execute >stdout 2>stderr; then + print_error_msg "The command should have failed.\nOutput:'$(cat stdout)'\nError: '$(cat stderr)'\n$additional_error_message" + exit 1 + fi + fi +} + +assert_directory_exists() { + if [ ! -d "$1" ]; then + echo "Expected directory $1 to exist, but it doesn't" + exit 1 + fi +} + +assert_directory_doesnt_exist() { + if [ -d "$1" ]; then + echo "Expected directory $1 to not exist, but it does" + exit 1 + fi +} + +assert_directory_empty() { + if [ "$(ls -A $1)" ]; then + echo "Expected directory $1 to be empty, but it isn't" + exit 1 + fi +} + +assert_directory_not_empty() { + if [ ! "$(ls -A $1)" ]; then + echo "Expected directory $1 to not be empty, but it is" + exit 1 + fi +} diff --git a/e2e/run-fixture-projects.sh b/e2e/run-fixture-projects.sh new file mode 100644 index 0000000000..d99048fd6f --- /dev/null +++ b/e2e/run-fixture-projects.sh @@ -0,0 +1,57 @@ +# !/usr/bin/env bash + +# +# NOTE: you can pass the name of a single fixture-projects folder to this script to execute a single test project. +# E.g.: ./run-fixture-projects.sh vars +# + +# fail if any commands fails +set -e + +# build hardhat-core +echo "[e2e] Building and packing hardhat-core" +cd ../packages/hardhat-core +pnpm install +pnpm build +HARDHAT_TGZ_FILE=$(pnpm pack) +echo "[e2e] Built $HARDHAT_TGZ_FILE" +cd - >/dev/null + +# create a temporary directory to run the tests +FIXTURE_PROJECTS_DIR=fixture-projects-run-$(date +%Y-%m-%d-%H-%M-%S) +cp -r fixture-projects $FIXTURE_PROJECTS_DIR + +# run all the e2e tests in the temporary directory +echo "[e2e] Running tests in $FIXTURE_PROJECTS_DIR\n\n" + +# log version of each package manager +echo "[e2e] Package manager version: npm version $(npm --version)\n\n" + +for dir in ${FIXTURE_PROJECTS_DIR}/*; do + if [ -d "$dir" ]; then + + if [ -n "$1" ] && [ "$(basename "$dir")" != "$1" ]; then + # only execute the tests for the project passed as argument to this script, if any + continue + fi + + echo "[e2e] Running tests in $dir" + cd "$dir" + + echo "[e2e] Installing modules in $dir" + npm add ../../../packages/hardhat-core/$HARDHAT_TGZ_FILE >/dev/null 2>&1 + npm install >/dev/null 2>&1 # install moduled specified in the package.json + echo "[e2e] All modules have been installed in $dir" + + echo "[e2e] Starting test in $dir" + ./test.sh + cd - + + echo "[e2e] Finished test in $dir\n\n" + fi +done + +echo "\n[e2e] All tests passed\n" + +# remove the temporary directory +rm -fr $FIXTURE_PROJECTS_DIR diff --git a/e2e/test-project-initialization.sh b/e2e/test-project-initialization.sh new file mode 100644 index 0000000000..7c70bfa410 --- /dev/null +++ b/e2e/test-project-initialization.sh @@ -0,0 +1,133 @@ +# !/usr/bin/env bash +# fail if any commands fails +set -e + +# Use this function because yarn init -y throws a warning, and the whole script will fail +# because of "set -e" +create_package_json() { + cat >package.json </dev/null + +# create a temporary directory to run the tests +TESTS_DIR=projects-initialization-tests-$(date +%Y-%m-%d-%H-%M-%S) +mkdir $TESTS_DIR + +echo "[e2e] Starting e2e initialization tests in $TESTS_DIR\n\n" + +pkg_managers="npm pnpm yarn" + +# log version of each package manager +echo "[e2e] Package managers versions:" +for pkg_manager in $pkg_managers; do + echo "[e2e] $pkg_manager version: $($pkg_manager --version)" +done + +for pkg_manager in $pkg_managers; do + echo "\n\n[e2e] Running tests with package manager: $pkg_manager" + + # pkg_manager, javascript, cjs + echo "[e2e] Testing: $pkg_manager, javascript, cjs" + mkdir ${TESTS_DIR}/${pkg_manager}-javascript-cjs + cd ${TESTS_DIR}/${pkg_manager}-javascript-cjs + create_package_json + $pkg_manager add ../../../packages/hardhat-core/$HARDHAT_TGZ_FILE >/dev/null 2>&1 + HARDHAT_CREATE_JAVASCRIPT_PROJECT_WITH_DEFAULTS=true npx hardhat init + npx hardhat compile + npx hardhat test + cd - + + # pkg_manager, javascript, esm + echo "[e2e] Testing: $pkg_manager, javascript, esm" + mkdir ${TESTS_DIR}/${pkg_manager}-javascript-esm + cd ${TESTS_DIR}/${pkg_manager}-javascript-esm + create_package_json + jq '. += {"type": "module"}' package.json >esm-package.json + mv esm-package.json package.json + $pkg_manager add ../../../packages/hardhat-core/$HARDHAT_TGZ_FILE >/dev/null 2>&1 + HARDHAT_CREATE_JAVASCRIPT_PROJECT_WITH_DEFAULTS=true npx hardhat init + npx hardhat compile + npx hardhat test + cd - + + # pkg_manager, typescript, cjs + echo "[e2e] Testing: $pkg_manager, typescript, cjs" + mkdir ${TESTS_DIR}/${pkg_manager}-typescript-cjs + cd ${TESTS_DIR}/${pkg_manager}-typescript-cjs + create_package_json + $pkg_manager add ../../../packages/hardhat-core/$HARDHAT_TGZ_FILE >/dev/null 2>&1 + HARDHAT_CREATE_TYPESCRIPT_PROJECT_WITH_DEFAULTS=true npx hardhat init + npx hardhat compile + npx hardhat test + cd - + + # pkg_manager, typescript, esm + echo "[e2e] Testing: $pkg_manager, typescript, esm" + mkdir ${TESTS_DIR}/${pkg_manager}-typescript-esm + cd ${TESTS_DIR}/${pkg_manager}-typescript-esm + create_package_json + jq '. += {"type": "module"}' package.json >esm-package.json + mv esm-package.json package.json + $pkg_manager add ../../../packages/hardhat-core/$HARDHAT_TGZ_FILE >/dev/null 2>&1 + if HARDHAT_CREATE_TYPESCRIPT_PROJECT_WITH_DEFAULTS=true npx hardhat init; then + echo "[e2e] Initialization should have failed" + exit 1 + else + echo "[e2e] Initialization failed as expected" + fi + cd - + + # pkg_manager, typescript-viem, cjs + echo "[e2e] Testing: $pkg_manager, typescript-viem, cjs" + mkdir ${TESTS_DIR}/${pkg_manager}-typescript-viem-cjs + cd ${TESTS_DIR}/${pkg_manager}-typescript-viem-cjs + create_package_json + $pkg_manager add ../../../packages/hardhat-core/$HARDHAT_TGZ_FILE >/dev/null 2>&1 + HARDHAT_CREATE_TYPESCRIPT_VIEM_PROJECT_WITH_DEFAULTS=true npx hardhat init + npx hardhat compile + npx hardhat test + cd - + + # pkg_manager, typescript-viem, esm + echo "[e2e] Testing: $pkg_manager, typescript-viem, esm" + mkdir ${TESTS_DIR}/${pkg_manager}-typescript-viem-esm + cd ${TESTS_DIR}/${pkg_manager}-typescript-viem-esm + create_package_json + jq '. += {"type": "module"}' package.json >esm-package.json + mv esm-package.json package.json + $pkg_manager add ../../../packages/hardhat-core/$HARDHAT_TGZ_FILE >/dev/null 2>&1 + if HARDHAT_CREATE_TYPESCRIPT_VIEM_PROJECT_WITH_DEFAULTS=true npx hardhat init; then + echo "[e2e] Initialization should have failed" + exit 1 + else + echo "[e2e] Initialization failed as expected" + fi + cd - + +done + +echo "\n[e2e] All tests passed\n" + +# remove the temporary directory +rm -fr $TESTS_DIR diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..ea6f817637 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,21521 @@ +{ + "name": "root", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "root", + "version": "0.0.0", + "license": "SEE LICENSE IN EACH PACKAGE'S LICENSE FILE", + "devDependencies": { + "@changesets/cli": "^2.16.0", + "hardhat": "^2.14.0", + "prettier": "2.4.1", + "shelljs": "^0.8.5", + "typescript": "~4.7.4", + "wsrun": "^5.2.2" + }, + "workspaces": { + "packages": [ + "packages/*" + ], + "nohoist": [ + "**/find-up", + "**/find-up/**" + ] + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", + "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", + "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.4", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.4", + "@babel/types": "^7.21.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", + "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.4", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", + "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.21.4", + "@babel/helper-validator-option": "^7.21.0", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", + "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", + "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", + "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.21.4", + "@babel/types": "^7.21.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@chainsafe/as-sha256": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", + "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==" + }, + "node_modules/@chainsafe/persistent-merkle-tree": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", + "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "node_modules/@chainsafe/ssz": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", + "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.4.2", + "case": "^1.6.3" + } + }, + "node_modules/@changesets/apply-release-plan": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-6.1.3.tgz", + "integrity": "sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/config": "^2.3.0", + "@changesets/get-version-range-type": "^0.3.2", + "@changesets/git": "^2.0.0", + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3", + "detect-indent": "^6.0.0", + "fs-extra": "^7.0.1", + "lodash.startcase": "^4.4.0", + "outdent": "^0.5.0", + "prettier": "^2.7.1", + "resolve-from": "^5.0.0", + "semver": "^5.4.1" + } + }, + "node_modules/@changesets/apply-release-plan/node_modules/prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@changesets/assemble-release-plan": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.3.tgz", + "integrity": "sha512-g7EVZCmnWz3zMBAdrcKhid4hkHT+Ft1n0mLussFMcB1dE2zCuwcvGoy9ec3yOgPGF4hoMtgHaMIk3T3TBdvU9g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/errors": "^0.1.4", + "@changesets/get-dependents-graph": "^1.3.5", + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3", + "semver": "^5.4.1" + } + }, + "node_modules/@changesets/changelog-git": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.1.14.tgz", + "integrity": "sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==", + "dev": true, + "dependencies": { + "@changesets/types": "^5.2.1" + } + }, + "node_modules/@changesets/cli": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.26.0.tgz", + "integrity": "sha512-0cbTiDms+ICTVtEwAFLNW0jBNex9f5+fFv3I771nBvdnV/mOjd1QJ4+f8KtVSOrwD9SJkk9xbDkWFb0oXd8d1Q==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/apply-release-plan": "^6.1.3", + "@changesets/assemble-release-plan": "^5.2.3", + "@changesets/changelog-git": "^0.1.14", + "@changesets/config": "^2.3.0", + "@changesets/errors": "^0.1.4", + "@changesets/get-dependents-graph": "^1.3.5", + "@changesets/get-release-plan": "^3.0.16", + "@changesets/git": "^2.0.0", + "@changesets/logger": "^0.0.5", + "@changesets/pre": "^1.0.14", + "@changesets/read": "^0.5.9", + "@changesets/types": "^5.2.1", + "@changesets/write": "^0.2.3", + "@manypkg/get-packages": "^1.1.3", + "@types/is-ci": "^3.0.0", + "@types/semver": "^6.0.0", + "ansi-colors": "^4.1.3", + "chalk": "^2.1.0", + "enquirer": "^2.3.0", + "external-editor": "^3.1.0", + "fs-extra": "^7.0.1", + "human-id": "^1.0.2", + "is-ci": "^3.0.1", + "meow": "^6.0.0", + "outdent": "^0.5.0", + "p-limit": "^2.2.0", + "preferred-pm": "^3.0.0", + "resolve-from": "^5.0.0", + "semver": "^5.4.1", + "spawndamnit": "^2.0.0", + "term-size": "^2.1.0", + "tty-table": "^4.1.5" + }, + "bin": { + "changeset": "bin.js" + } + }, + "node_modules/@changesets/config": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-2.3.0.tgz", + "integrity": "sha512-EgP/px6mhCx8QeaMAvWtRrgyxW08k/Bx2tpGT+M84jEdX37v3VKfh4Cz1BkwrYKuMV2HZKeHOh8sHvja/HcXfQ==", + "dev": true, + "dependencies": { + "@changesets/errors": "^0.1.4", + "@changesets/get-dependents-graph": "^1.3.5", + "@changesets/logger": "^0.0.5", + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1", + "micromatch": "^4.0.2" + } + }, + "node_modules/@changesets/errors": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.1.4.tgz", + "integrity": "sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==", + "dev": true, + "dependencies": { + "extendable-error": "^0.1.5" + } + }, + "node_modules/@changesets/get-dependents-graph": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.5.tgz", + "integrity": "sha512-w1eEvnWlbVDIY8mWXqWuYE9oKhvIaBhzqzo4ITSJY9hgoqQ3RoBqwlcAzg11qHxv/b8ReDWnMrpjpKrW6m1ZTA==", + "dev": true, + "dependencies": { + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3", + "chalk": "^2.1.0", + "fs-extra": "^7.0.1", + "semver": "^5.4.1" + } + }, + "node_modules/@changesets/get-release-plan": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-3.0.16.tgz", + "integrity": "sha512-OpP9QILpBp1bY2YNIKFzwigKh7Qe9KizRsZomzLe6pK8IUo8onkAAVUD8+JRKSr8R7d4+JRuQrfSSNlEwKyPYg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/assemble-release-plan": "^5.2.3", + "@changesets/config": "^2.3.0", + "@changesets/pre": "^1.0.14", + "@changesets/read": "^0.5.9", + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3" + } + }, + "node_modules/@changesets/get-version-range-type": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.3.2.tgz", + "integrity": "sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==", + "dev": true + }, + "node_modules/@changesets/git": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-2.0.0.tgz", + "integrity": "sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/errors": "^0.1.4", + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3", + "is-subdir": "^1.1.1", + "micromatch": "^4.0.2", + "spawndamnit": "^2.0.0" + } + }, + "node_modules/@changesets/logger": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.0.5.tgz", + "integrity": "sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==", + "dev": true, + "dependencies": { + "chalk": "^2.1.0" + } + }, + "node_modules/@changesets/parse": { + "version": "0.3.16", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.3.16.tgz", + "integrity": "sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==", + "dev": true, + "dependencies": { + "@changesets/types": "^5.2.1", + "js-yaml": "^3.13.1" + } + }, + "node_modules/@changesets/pre": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-1.0.14.tgz", + "integrity": "sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/errors": "^0.1.4", + "@changesets/types": "^5.2.1", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1" + } + }, + "node_modules/@changesets/read": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.5.9.tgz", + "integrity": "sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/git": "^2.0.0", + "@changesets/logger": "^0.0.5", + "@changesets/parse": "^0.3.16", + "@changesets/types": "^5.2.1", + "chalk": "^2.1.0", + "fs-extra": "^7.0.1", + "p-filter": "^2.1.0" + } + }, + "node_modules/@changesets/types": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-5.2.1.tgz", + "integrity": "sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==", + "dev": true + }, + "node_modules/@changesets/write": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.2.3.tgz", + "integrity": "sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/types": "^5.2.1", + "fs-extra": "^7.0.1", + "human-id": "^1.0.2", + "prettier": "^2.7.1" + } + }, + "node_modules/@changesets/write/node_modules/prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@ensdomains/address-encoder": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz", + "integrity": "sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==", + "dependencies": { + "bech32": "^1.1.3", + "blakejs": "^1.1.0", + "bn.js": "^4.11.8", + "bs58": "^4.0.1", + "crypto-addr-codec": "^0.1.7", + "nano-base32": "^1.0.1", + "ripemd160": "^2.0.2" + } + }, + "node_modules/@ensdomains/address-encoder/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/@ensdomains/ens": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", + "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", + "deprecated": "Please use @ensdomains/ens-contracts", + "dependencies": { + "bluebird": "^3.5.2", + "eth-ens-namehash": "^2.0.8", + "solc": "^0.4.20", + "testrpc": "0.0.1", + "web3-utils": "^1.0.0-beta.31" + } + }, + "node_modules/@ensdomains/ens/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/@ensdomains/ens/node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "node_modules/@ensdomains/ens/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@ensdomains/ens/node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@ensdomains/ens/node_modules/solc": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", + "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", + "dependencies": { + "fs-extra": "^0.30.0", + "memorystream": "^0.3.1", + "require-from-string": "^1.1.0", + "semver": "^5.3.0", + "yargs": "^4.7.1" + }, + "bin": { + "solcjs": "solcjs" + } + }, + "node_modules/@ensdomains/ens/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" + }, + "node_modules/@ensdomains/ens/node_modules/yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", + "dependencies": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" + } + }, + "node_modules/@ensdomains/ens/node_modules/yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", + "dependencies": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + } + }, + "node_modules/@ensdomains/ensjs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@ensdomains/ensjs/-/ensjs-2.1.0.tgz", + "integrity": "sha512-GRbGPT8Z/OJMDuxs75U/jUNEC0tbL0aj7/L/QQznGYKm/tiasp+ndLOaoULy9kKJFC0TBByqfFliEHDgoLhyog==", + "dependencies": { + "@babel/runtime": "^7.4.4", + "@ensdomains/address-encoder": "^0.1.7", + "@ensdomains/ens": "0.4.5", + "@ensdomains/resolver": "0.2.4", + "content-hash": "^2.5.2", + "eth-ens-namehash": "^2.0.8", + "ethers": "^5.0.13", + "js-sha3": "^0.8.0" + } + }, + "node_modules/@ensdomains/resolver": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", + "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", + "deprecated": "Please use @ensdomains/ens-contracts" + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@ethereumjs/common": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", + "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.1" + } + }, + "node_modules/@ethereumjs/common/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@ethereumjs/common/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/tx": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", + "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", + "dependencies": { + "@ethereumjs/common": "^2.5.0", + "ethereumjs-util": "^7.1.2" + } + }, + "node_modules/@ethereumjs/tx/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@ethereumjs/tx/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "dependencies": { + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz", + "integrity": "sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==", + "dependencies": { + "@noble/curves": "1.1.0", + "@noble/hashes": "1.3.1", + "@scure/bip32": "1.3.1", + "@scure/bip39": "1.2.1" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@fvictorio/tabtab": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@fvictorio/tabtab/-/tabtab-0.0.3.tgz", + "integrity": "sha512-bT/BSy8MJThrTebqTCjXRnGSgZWthHLigZ4k2AvfNtC79vPyBS1myaxw8gRU6RxIcdDD3HBtm7pOsOoyC086Zg==", + "dependencies": { + "debug": "^4.1.1", + "enquirer": "^2.3.4", + "minimist": "^1.2.0", + "mkdirp": "^1.0.3", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@manypkg/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" + } + }, + "node_modules/@manypkg/find-root/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, + "node_modules/@manypkg/find-root/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/get-packages": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" + } + }, + "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", + "dev": true + }, + "node_modules/@manypkg/get-packages/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dependencies": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@morgan-stanley/ts-mocking-bird": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@morgan-stanley/ts-mocking-bird/-/ts-mocking-bird-0.6.4.tgz", + "integrity": "sha512-57VJIflP8eR2xXa9cD1LUawh+Gh+BVQfVu0n6GALyg/AqV/Nz25kDRvws3i9kIe1PTrbsZZOYpsYp6bXPd6nVA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.16", + "uuid": "^7.0.3" + }, + "peerDependencies": { + "jasmine": "2.x || 3.x || 4.x", + "jest": "26.x || 27.x || 28.x", + "typescript": ">=4.2" + }, + "peerDependenciesMeta": { + "jasmine": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/@morgan-stanley/ts-mocking-bird/node_modules/uuid": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", + "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@noble/curves": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "dependencies": { + "@noble/hashes": "1.3.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nomicfoundation/ethereumjs-block": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz", + "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==", + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "ethereum-cryptography": "0.1.3", + "ethers": "^5.7.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-block/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-blockchain": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz", + "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==", + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-ethash": "3.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "abstract-level": "^1.0.3", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "level": "^8.0.0", + "lru-cache": "^5.1.1", + "memory-level": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-blockchain/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz", + "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==", + "dependencies": { + "@nomicfoundation/ethereumjs-util": "9.0.1", + "crc-32": "^1.2.0" + } + }, + "node_modules/@nomicfoundation/ethereumjs-ethash": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz", + "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==", + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "abstract-level": "^1.0.3", + "bigint-crypto-utils": "^3.0.23", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-ethash/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-evm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz", + "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==", + "dependencies": { + "@ethersproject/providers": "^5.7.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-evm/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz", + "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-statemanager": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz", + "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==", + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "ethers": "^5.7.1", + "js-sdsl": "^4.1.4" + } + }, + "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-trie": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz", + "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==", + "dependencies": { + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@types/readable-stream": "^2.3.13", + "ethereum-cryptography": "0.1.3", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-trie/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-tx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz", + "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==", + "dependencies": { + "@chainsafe/ssz": "^0.9.2", + "@ethersproject/providers": "^5.7.2", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-tx/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-util": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz", + "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==", + "dependencies": { + "@chainsafe/ssz": "^0.10.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/persistent-merkle-tree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz", + "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==", + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/ssz": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz", + "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==", + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.5.0" + } + }, + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/ethereumjs-vm": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz", + "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==", + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-vm/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "resolved": "packages/hardhat-chai-matchers", + "link": true + }, + "node_modules/@nomicfoundation/hardhat-foundry": { + "resolved": "packages/hardhat-foundry", + "link": true + }, + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "resolved": "packages/hardhat-network-helpers", + "link": true + }, + "node_modules/@nomicfoundation/hardhat-toolbox": { + "resolved": "packages/hardhat-toolbox", + "link": true + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "resolved": "packages/hardhat-verify", + "link": true + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz", + "integrity": "sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg==", + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.0", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.0", + "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.0", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.0", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.0", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.0", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.0", + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.0", + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.0", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.0" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz", + "integrity": "sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz", + "integrity": "sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.0.tgz", + "integrity": "sha512-WFCZYMv86WowDA4GiJKnebMQRt3kCcFqHeIomW6NMyqiKqhK1kIZCxSLDYsxqlx396kKLPN1713Q1S8tu68GKg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.0.tgz", + "integrity": "sha512-DTw6MNQWWlCgc71Pq7CEhEqkb7fZnS7oly13pujs4cMH1sR0JzNk90Mp1zpSCsCs4oKan2ClhMlLKtNat/XRKQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.0.tgz", + "integrity": "sha512-wUpUnR/3GV5Da88MhrxXh/lhb9kxh9V3Jya2NpBEhKDIRCDmtXMSqPMXHZmOR9DfCwCvG6vLFPr/+YrPCnUN0w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz", + "integrity": "sha512-lR0AxK1x/MeKQ/3Pt923kPvwigmGX3OxeU5qNtQ9pj9iucgk4PzhbS3ruUeSpYhUxG50jN4RkIGwUMoev5lguw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.0.tgz", + "integrity": "sha512-A1he/8gy/JeBD3FKvmI6WUJrGrI5uWJNr5Xb9WdV+DK0F8msuOqpEByLlnTdLkXMwW7nSl3awvLezOs9xBHJEg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.0.tgz", + "integrity": "sha512-7x5SXZ9R9H4SluJZZP8XPN+ju7Mx+XeUMWZw7ZAqkdhP5mK19I4vz3x0zIWygmfE8RT7uQ5xMap0/9NPsO+ykw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.0.tgz", + "integrity": "sha512-m7w3xf+hnE774YRXu+2mGV7RiF3QJtUoiYU61FascCkQhX3QMQavh7saH/vzb2jN5D24nT/jwvaHYX/MAM9zUw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.0.tgz", + "integrity": "sha512-xCuybjY0sLJQnJhupiFAXaek2EqF0AP0eBjgzaalPXSNvCEN6ZYHvUzdA50ENDVeSYFXcUsYf3+FsD3XKaeptA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomiclabs/common": { + "resolved": "packages/common", + "link": true + }, + "node_modules/@nomiclabs/eslint-plugin-hardhat-internal-rules": { + "resolved": "packages/eslint-plugin", + "link": true + }, + "node_modules/@nomiclabs/hardhat-ethers": { + "resolved": "packages/hardhat-ethers", + "link": true + }, + "node_modules/@nomiclabs/hardhat-etherscan": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz", + "integrity": "sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==", + "deprecated": "The @nomiclabs/hardhat-etherscan package is deprecated, please use @nomicfoundation/hardhat-verify instead", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@nomiclabs/hardhat-solhint": { + "resolved": "packages/hardhat-solhint", + "link": true + }, + "node_modules/@nomiclabs/hardhat-solpp": { + "resolved": "packages/hardhat-solpp", + "link": true + }, + "node_modules/@nomiclabs/hardhat-truffle4": { + "resolved": "packages/hardhat-truffle4", + "link": true + }, + "node_modules/@nomiclabs/hardhat-truffle5": { + "resolved": "packages/hardhat-truffle5", + "link": true + }, + "node_modules/@nomiclabs/hardhat-vyper": { + "resolved": "packages/hardhat-vyper", + "link": true + }, + "node_modules/@nomiclabs/hardhat-web3": { + "resolved": "packages/hardhat-web3", + "link": true + }, + "node_modules/@nomiclabs/hardhat-web3-legacy": { + "resolved": "packages/hardhat-web3-legacy", + "link": true + }, + "node_modules/@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz", + "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", + "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", + "dev": true + }, + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "dev": true, + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@truffle/abi-utils": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.3.7.tgz", + "integrity": "sha512-IhX+Hxu9fTEOxR+34r3Tt/AJS1gkqdEBZDzERG/9X43bLGzu5pLWzDgDBpNDqYM3lTICIg3UHfqLdUzSC7g4pg==", + "dependencies": { + "change-case": "3.0.2", + "fast-check": "3.1.1", + "web3-utils": "1.8.2" + } + }, + "node_modules/@truffle/abi-utils/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@truffle/abi-utils/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@truffle/abi-utils/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/@truffle/abi-utils/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/blockchain-utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.1.6.tgz", + "integrity": "sha512-SldoNRIFSm3+HMBnSc2jFsu5TWDkCN4X6vL3wrd0t6DIeF7nD6EoPPjxwbFSoqCnkkRxMuZeL6sUx7UMJS/wSA==" + }, + "node_modules/@truffle/codec": { + "version": "0.14.14", + "resolved": "https://registry.npmjs.org/@truffle/codec/-/codec-0.14.14.tgz", + "integrity": "sha512-EP+iTGowElaJJgQI4Ztizmb+hYOHwOv4OiX09sjqX/v/GdmnvyWoS8RGHtERze8DoBi5cs4ZY8vlM3nVDbRv5A==", + "dependencies": { + "@truffle/abi-utils": "^0.3.7", + "@truffle/compile-common": "^0.9.2", + "big.js": "^6.0.3", + "bn.js": "^5.1.3", + "cbor": "^5.2.0", + "debug": "^4.3.1", + "lodash": "^4.17.21", + "semver": "7.3.7", + "utf8": "^3.0.0", + "web3-utils": "1.8.2" + } + }, + "node_modules/@truffle/codec/node_modules/cbor": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", + "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", + "dependencies": { + "bignumber.js": "^9.0.1", + "nofilter": "^1.0.4" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@truffle/codec/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@truffle/codec/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@truffle/codec/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@truffle/codec/node_modules/nofilter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", + "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@truffle/codec/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@truffle/codec/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/@truffle/codec/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/codec/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/@truffle/compile-common": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.9.2.tgz", + "integrity": "sha512-n7MF/4/dntccj44RGe3PRMD8Vk46PU8dJtzd1VLAfgokK2Y2N+SjAzDskBnmAydZVWAM315nZIUQsgnY8xoATw==", + "dependencies": { + "@truffle/error": "^0.2.0", + "colors": "1.4.0" + } + }, + "node_modules/@truffle/compile-common/node_modules/@truffle/error": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.2.0.tgz", + "integrity": "sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ==" + }, + "node_modules/@truffle/contract-schema": { + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.11.tgz", + "integrity": "sha512-wReyVZUPyU9Zy5PSCugBLG1nnruBmRAJ/gmoirQiJ9N2n+s1iGBTY49tkDqFMz3XUUE0kplfdb9YKZJlLkTWzQ==", + "dependencies": { + "ajv": "^6.10.0", + "debug": "^4.3.1" + } + }, + "node_modules/@truffle/debug-utils": { + "version": "6.0.45", + "resolved": "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.45.tgz", + "integrity": "sha512-yrEM8znplrVzxczzsvRlFrA56S3KSLD0XZpAQ8nDRd82Omn4Y7AaJtkAoOILjkPHeuBS1bvHm7FjKhszgOe3mg==", + "dependencies": { + "@truffle/codec": "^0.14.14", + "@trufflesuite/chromafi": "^3.0.0", + "bn.js": "^5.1.3", + "chalk": "^2.4.2", + "debug": "^4.3.1", + "highlightjs-solidity": "^2.0.6" + } + }, + "node_modules/@truffle/error": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.1.1.tgz", + "integrity": "sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA==" + }, + "node_modules/@truffle/interface-adapter": { + "version": "0.5.28", + "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.28.tgz", + "integrity": "sha512-xnjWXiOihApI+XLrs0xpw9s+av6Qvrc2lkXAfrBluuKgaJOQIdLVz6vi2Bt6oiTQAoWUkUGa0hne78mxFI2J1w==", + "dependencies": { + "bn.js": "^5.1.3", + "ethers": "^4.0.32", + "web3": "1.8.2" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/ethereum-cryptography/node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/ethereum-cryptography/node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "node_modules/@truffle/interface-adapter/node_modules/ethereum-cryptography/node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/@truffle/interface-adapter/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/ethers": { + "version": "4.0.49", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", + "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", + "dependencies": { + "aes-js": "3.0.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/ethers/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/@truffle/interface-adapter/node_modules/hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + }, + "node_modules/@truffle/interface-adapter/node_modules/scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" + }, + "node_modules/@truffle/interface-adapter/node_modules/setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" + }, + "node_modules/@truffle/interface-adapter/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/@truffle/interface-adapter/node_modules/uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details." + }, + "node_modules/@truffle/interface-adapter/node_modules/web3": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.8.2.tgz", + "integrity": "sha512-92h0GdEHW9wqDICQQKyG4foZBYi0OQkyg4CRml2F7XBl/NG+fu9o6J19kzfFXzSBoA4DnJXbyRgj/RHZv5LRiw==", + "hasInstallScript": true, + "dependencies": { + "web3-bzz": "1.8.2", + "web3-core": "1.8.2", + "web3-eth": "1.8.2", + "web3-eth-personal": "1.8.2", + "web3-net": "1.8.2", + "web3-shh": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/interface-adapter/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@trufflesuite/chromafi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@trufflesuite/chromafi/-/chromafi-3.0.0.tgz", + "integrity": "sha512-oqWcOqn8nT1bwlPPfidfzS55vqcIDdpfzo3HbU9EnUmcSTX+I8z0UyUFI3tZQjByVJulbzxHxUGS3ZJPwK/GPQ==", + "dependencies": { + "camelcase": "^4.1.0", + "chalk": "^2.3.2", + "cheerio": "^1.0.0-rc.2", + "detect-indent": "^5.0.0", + "highlight.js": "^10.4.1", + "lodash.merge": "^4.6.2", + "strip-ansi": "^4.0.0", + "strip-indent": "^2.0.0" + } + }, + "node_modules/@trufflesuite/chromafi/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@trufflesuite/chromafi/node_modules/camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@trufflesuite/chromafi/node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@trufflesuite/chromafi/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@trufflesuite/chromafi/node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true + }, + "node_modules/@typechain/ethers-v5": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.0.tgz", + "integrity": "sha512-ikaq0N/w9fABM+G01OFmU3U3dNnyRwEahkdvi9mqy1a3XwKiPZaF/lu54OcNaEWnpvEYyhhS0N7buCtLQqC92w==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/bytes": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^8.1.1", + "typescript": ">=4.3.0" + } + }, + "node_modules/@typechain/hardhat": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.5.tgz", + "integrity": "sha512-lg7LW4qDZpxFMknp3Xool61Fg6Lays8F8TXdFGBG+MxyYcYU5795P1U2XdStuzGq9S2Dzdgh+1jGww9wvZ6r4Q==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@typechain/ethers-v5": "^10.2.0", + "ethers": "^5.4.7", + "hardhat": "^2.9.9", + "typechain": "^8.1.1" + } + }, + "node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typechain/hardhat/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@typechain/hardhat/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@types/async-eventemitter": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", + "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==", + "dev": true + }, + "node_modules/@types/bignumber.js": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", + "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==", + "deprecated": "This is a stub types definition for bignumber.js (https://github.com/MikeMcl/bignumber.js/). bignumber.js provides its own type definitions, so you don't need @types/bignumber.js installed!", + "dependencies": { + "bignumber.js": "*" + } + }, + "node_modules/@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==" + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5R2/MHILQLDCzTuhs1j4Qqq8AaKUf7Ma4KSSkCtc12+fMs47zfa34qhto9goxpyX00tQK1zxB885VCiawZ5Qhg==", + "dev": true + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/find-up": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/find-up/-/find-up-2.1.1.tgz", + "integrity": "sha512-60LC501bQRN9/3yfVaEEMd7IndaufffL56PBRAejPpUrY304Ps1jfnjNqPw5jmM5R8JHWiKBAe5IHzNcPV41AA==", + "dev": true + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.1.0.tgz", + "integrity": "sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + }, + "node_modules/@types/is-ci": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/is-ci/-/is-ci-3.0.0.tgz", + "integrity": "sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.1.0" + } + }, + "node_modules/@types/is-ci/node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/keccak": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/keccak/-/keccak-3.0.1.tgz", + "integrity": "sha512-/MxAVmtyyeOvZ6dGf3ciLwFRuV5M8DRIyYNFGHYI6UyBW4/XqyO0LZw+JFMvaeY3cHItQAkELclBU1x5ank6mg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", + "dev": true + }, + "node_modules/@types/lodash.clonedeep": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.7.tgz", + "integrity": "sha512-ccNqkPptFIXrpVqUECi60/DFxjNKsfoQxSQsgcBJCX/fuX1wgyQieojkcWH/KpE3xzLoWN/2k+ZeGqIN3paSvw==", + "dev": true, + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.18.36", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.36.tgz", + "integrity": "sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ==" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", + "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/semver": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.2.3.tgz", + "integrity": "sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==", + "dev": true + }, + "node_modules/@types/sinon": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.11.tgz", + "integrity": "sha512-PwP4UY33SeeVKodNE37ZlOsR9cReypbMJOhZ7BVE0lB+Hix3efCOxiJWiE5Ia+yL9Cn2Ch72EjFTRze8RZsNtg==", + "dev": true, + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "node_modules/@types/sinon-chai": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.9.tgz", + "integrity": "sha512-/19t63pFYU0ikrdbXKBWj9PCdnKyTd0Qkz0X91Ta081cYsq90OxYdcWwK/dwEoDa6dtXgj2HJfmzgq+QZTHdmQ==", + "dev": true, + "dependencies": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", + "integrity": "sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/type-utils": "5.53.0", + "@typescript-eslint/utils": "5.53.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.29.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.2.tgz", + "integrity": "sha512-P6mn4pqObhftBBPAv4GQtEK7Yos1fz/MlpT7+YjH9fTxZcALbiiPKuSIfYP/j13CeOjfq8/fr9Thr2glM9ub7A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.29.2", + "@typescript-eslint/types": "4.29.2", + "@typescript-eslint/typescript-estree": "4.29.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "4.29.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.2.tgz", + "integrity": "sha512-mfHmvlQxmfkU8D55CkZO2sQOueTxLqGvzV+mG6S/6fIunDiD2ouwsAoiYCZYDDK73QCibYjIZmGhpvKwAB5BOA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.29.2", + "@typescript-eslint/visitor-keys": "4.29.2" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { + "version": "4.29.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.2.tgz", + "integrity": "sha512-K6ApnEXId+WTGxqnda8z4LhNMa/pZmbTFkDxEBLQAbhLZL50DjeY0VIDCml/0Y3FlcbqXZrABqrcKxq+n0LwzQ==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "4.29.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.2.tgz", + "integrity": "sha512-TJ0/hEnYxapYn9SGn3dCnETO0r+MjaxtlWZ2xU+EvytF0g4CqTpZL48SqSNn2hXsPolnewF30pdzR9a5Lj3DNg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.29.2", + "@typescript-eslint/visitor-keys": "4.29.2", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "4.29.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.2.tgz", + "integrity": "sha512-bDgJLQ86oWHJoZ1ai4TZdgXzJxsea3Ee9u9wsTAvjChdj2WLcVsgWYAPeY7RQMn16tKrlQaBnpKv7KBfs4EQag==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.29.2", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.53.0.tgz", + "integrity": "sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", + "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz", + "integrity": "sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.53.0", + "@typescript-eslint/utils": "5.53.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", + "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", + "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz", + "integrity": "sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", + "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==" + }, + "node_modules/abstract-level": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", + "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "dependencies": { + "buffer": "^6.0.3", + "catering": "^2.1.0", + "is-buffer": "^2.0.5", + "level-supports": "^4.0.0", + "level-transcoder": "^1.0.1", + "module-error": "^1.0.1", + "queue-microtask": "^1.2.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/antlr4": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.7.1.tgz", + "integrity": "sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ==" + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "engines": { + "node": "*" + } + }, + "node_modules/ast-parents": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz", + "integrity": "sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "node_modules/better-path-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "dev": true, + "dependencies": { + "is-windows": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/big-integer": { + "version": "1.6.36", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz", + "integrity": "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/big.js": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz", + "integrity": "sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==", + "engines": { + "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bigjs" + } + }, + "node_modules/bigint-crypto-utils": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.8.tgz", + "integrity": "sha512-+VMV9Laq8pXLBKKKK49nOoq9bfR3j7NNQAtbA617a4nw9bVLo8rsqkKMBgM2AJWlNX9fEIyYaYX+d0laqYV4tw==", + "dependencies": { + "bigint-mod-arith": "^3.1.0" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/bigint-mod-arith": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", + "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/bn-str-256": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/bn-str-256/-/bn-str-256-1.9.1.tgz", + "integrity": "sha512-u3muv3WO5sYv9nUQsPnDGLg731yNt/MOlKPK5pmBVqClcl7tY97tyfKxw8ed44HVrpi+7dkgJgQpbXP47a3GoQ==", + "dependencies": { + "decimal.js-light": "^2.5.0", + "lodash": "^4.17.11" + } + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/breakword": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/breakword/-/breakword-1.0.5.tgz", + "integrity": "sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg==", + "dev": true, + "dependencies": { + "wcwidth": "^1.0.1" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/browser-level": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", + "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", + "dependencies": { + "abstract-level": "^1.0.2", + "catering": "^2.1.1", + "module-error": "^1.0.2", + "run-parallel-limit": "^1.1.0" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "node_modules/bufferutil": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", + "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", + "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001480", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz", + "integrity": "sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/case": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", + "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "node_modules/catering": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/chai": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 5" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/change-case": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", + "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", + "dependencies": { + "camel-case": "^3.0.0", + "constant-case": "^2.0.0", + "dot-case": "^2.1.0", + "header-case": "^1.0.0", + "is-lower-case": "^1.1.0", + "is-upper-case": "^1.1.0", + "lower-case": "^1.1.1", + "lower-case-first": "^1.0.0", + "no-case": "^2.3.2", + "param-case": "^2.1.0", + "pascal-case": "^2.0.0", + "path-case": "^2.1.0", + "sentence-case": "^2.1.0", + "snake-case": "^2.1.0", + "swap-case": "^1.1.0", + "title-case": "^2.1.0", + "upper-case": "^1.1.1", + "upper-case-first": "^1.1.0" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "engines": { + "node": "*" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/cids": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "engines": { + "node": ">=4.0.0", + "npm": ">=3.0.0" + } + }, + "node_modules/cids/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/cids/node_modules/multicodec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-is": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" + }, + "node_modules/classic-level": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", + "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", + "hasInstallScript": true, + "dependencies": { + "abstract-level": "^1.0.2", + "catering": "^2.1.0", + "module-error": "^1.0.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "colors": "^1.1.2" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", + "dependencies": { + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/content-hash": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", + "dependencies": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.0.tgz", + "integrity": "sha512-0tLZ9URlPGU7JsKq0DQOQ3FoRsYX8xDZ7xMiATQfaiGMz7EHowNkbU9u1coAOmnh9p/1ySpm0RB3JNWRXM5GCg==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/crypto-addr-codec": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz", + "integrity": "sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg==", + "dependencies": { + "base-x": "^3.0.8", + "big-integer": "1.6.36", + "blakejs": "^1.1.0", + "bs58": "^4.0.1", + "ripemd160-min": "0.0.6", + "safe-buffer": "^5.2.0", + "sha3": "^2.1.1" + } + }, + "node_modules/crypto-addr-codec/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/crypto-js": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", + "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csv": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz", + "integrity": "sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==", + "dev": true, + "dependencies": { + "csv-generate": "^3.4.3", + "csv-parse": "^4.16.3", + "csv-stringify": "^5.6.5", + "stream-transform": "^2.1.3" + }, + "engines": { + "node": ">= 0.1.90" + } + }, + "node_modules/csv-generate": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz", + "integrity": "sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==", + "dev": true + }, + "node_modules/csv-parse": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", + "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==", + "dev": true + }, + "node_modules/csv-stringify": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", + "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==", + "dev": true + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-time": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/date-time/-/date-time-0.1.1.tgz", + "integrity": "sha512-p4psdkgdNA6x0600SKbfWiOomNb33ADBMRHf49GMhYVgJsPefZlMSLXXVWWUpbqSxB3DL5/cxKa6a8i3XPK5Xg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/default-require-extensions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "dev": true, + "dependencies": { + "heap": ">= 0.2.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.367", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.367.tgz", + "integrity": "sha512-mNuDxb+HpLhPGUKrg0hSxbTjHWw8EziwkwlJNkFUj3W60ypigLDRVz04vU+VRsJPi8Gub+FDhYUpuTm9xiEwRQ==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/escodegen/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.24.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.1.tgz", + "integrity": "sha512-KSFWhNxPH8OGJwpRJJs+Z7I0a13E2iFQZJIvSnCu6KUs4qmgAm3xN9GYBCSoiGWmwA7gERZPXqYQjcoCROnYhQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.3", + "array.prototype.flat": "^1.2.4", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.6.2", + "find-up": "^2.0.0", + "has": "^1.0.3", + "is-core-module": "^2.6.0", + "minimatch": "^3.0.4", + "object.values": "^1.1.4", + "pkg-up": "^2.0.0", + "read-pkg-up": "^3.0.0", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.10.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/eslint-plugin-import/node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-no-only-tests": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.0.0.tgz", + "integrity": "sha512-I0PeXMs1vu21ap45hey4HQCJRqpcoIvGcNTPJe+UhUm8TwjQ6//mCrDqF8q0WS6LgmRDwQ4ovQej0AQsAHb5yg==", + "dev": true, + "engines": { + "node": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", + "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", + "dependencies": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + } + }, + "node_modules/eth-ens-namehash/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + }, + "node_modules/eth-gas-reporter": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz", + "integrity": "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.0.0-beta.146", + "@solidity-parser/parser": "^0.14.0", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^4.0.40", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^7.1.1", + "req-cwd": "^2.0.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" + }, + "peerDependencies": { + "@codechecks/client": "^0.1.0" + }, + "peerDependenciesMeta": { + "@codechecks/client": { + "optional": true + } + } + }, + "node_modules/eth-gas-reporter/node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/ethers": { + "version": "4.0.49", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", + "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", + "dev": true, + "dependencies": { + "aes-js": "3.0.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/eth-gas-reporter/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eth-gas-reporter/node_modules/hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eth-gas-reporter/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eth-gas-reporter/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eth-gas-reporter/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/eth-gas-reporter/node_modules/mocha": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", + "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/eth-gas-reporter/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eth-gas-reporter/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eth-gas-reporter/node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/eth-gas-reporter/node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/eth-gas-reporter/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-lib": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/eth-lib/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/eth-lib/node_modules/ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dependencies": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/ethereum-ens": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/ethereum-ens/-/ethereum-ens-0.8.0.tgz", + "integrity": "sha512-a8cBTF4AWw1Q1Y37V1LSCS9pRY4Mh3f8vCg5cbXCCEJ3eno1hbI/+Ccv9SZLISYpqQhaglP3Bxb/34lS4Qf7Bg==", + "dependencies": { + "bluebird": "^3.4.7", + "eth-ens-namehash": "^2.0.0", + "js-sha3": "^0.5.7", + "pako": "^1.0.4", + "underscore": "^1.8.3", + "web3": "^1.0.0-beta.34" + } + }, + "node_modules/ethereum-ens/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereum-ens/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethereum-ens/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + }, + "node_modules/ethereum-ens/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/ethereum-ens/node_modules/web3": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.8.2.tgz", + "integrity": "sha512-92h0GdEHW9wqDICQQKyG4foZBYi0OQkyg4CRml2F7XBl/NG+fu9o6J19kzfFXzSBoA4DnJXbyRgj/RHZv5LRiw==", + "hasInstallScript": true, + "dependencies": { + "web3-bzz": "1.8.2", + "web3-core": "1.8.2", + "web3-eth": "1.8.2", + "web3-eth-personal": "1.8.2", + "web3-net": "1.8.2", + "web3-shh": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ethereum-ens/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-util/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-util/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/ethjs-abi": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.1.8.tgz", + "integrity": "sha512-3SIJpF+LCVJrNht9OjSJ7+3B9ABZf6dEATMj1PaslL0BW547Cz6/kGyuDvvrcEBlSsbGpCWYrJX5B8OjhcAMFQ==", + "dependencies": { + "bn.js": "4.11.6", + "js-sha3": "0.5.5", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-abi/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/ethjs-abi/node_modules/js-sha3": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.5.tgz", + "integrity": "sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA==" + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extendable-error": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", + "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-check": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.1.1.tgz", + "integrity": "sha512-3vtXinVyuUKCKFKYcwXhGE6NtGWkqF8Yh3rvMZNzmwz8EPrgoc/v4pDdLHyLnCyCI5MZpZZkDEwFyXyEONOxpA==", + "dependencies": { + "pure-rand": "^5.0.1" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/find-yarn-workspace-root2": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", + "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.2", + "pkg-dir": "^4.2.0" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-cli": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz", + "integrity": "sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw==", + "bundleDependencies": [ + "source-map-support", + "yargs", + "ethereumjs-util" + ], + "deprecated": "ganache-cli is now ganache; visit https://trfl.io/g7 for details", + "dev": true, + "dependencies": { + "ethereumjs-util": "6.2.1", + "source-map-support": "0.5.12", + "yargs": "13.2.4" + }, + "bin": { + "ganache-cli": "cli.js" + } + }, + "node_modules/ganache-cli/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ganache-cli/node_modules/@types/node": { + "version": "14.11.2", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ganache-cli/node_modules/@types/secp256k1": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ganache-cli/node_modules/ansi-regex": { + "version": "4.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/base-x": { + "version": "3.0.8", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache-cli/node_modules/blakejs": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/ganache-cli/node_modules/bn.js": { + "version": "4.11.9", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/brorand": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache-cli/node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/ganache-cli/node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache-cli/node_modules/buffer-from": { + "version": "1.1.1", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ganache-cli/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/ganache-cli/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ganache-cli/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/ganache-cli/node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/ganache-cli/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/ganache-cli/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/elliptic": { + "version": "6.5.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "node_modules/ganache-cli/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/ganache-cli/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ganache-cli/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "inBundle": true, + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ganache-cli/node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-cli/node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-cli/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/ganache-cli/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/ganache-cli/node_modules/hmac-drbg": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/ganache-cli/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-cli/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/keccak": { + "version": "3.0.1", + "dev": true, + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ganache-cli/node_modules/lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "invert-kv": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/ganache-cli/node_modules/mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/node-gyp-build": { + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/ganache-cli/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/ganache-cli/node_modules/os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ganache-cli/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-cli/node_modules/pbkdf2": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/ganache-cli/node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/ganache-cli/node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/ganache-cli/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ganache-cli/node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/ganache-cli/node_modules/rlp": { + "version": "2.2.6", + "dev": true, + "inBundle": true, + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.1" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/ganache-cli/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/secp256k1": { + "version": "4.0.2", + "dev": true, + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.2", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ganache-cli/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-cli/node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "inBundle": true, + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/ganache-cli/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/signal-exit": { + "version": "3.0.3", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/source-map-support": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/ganache-cli/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/ganache-cli/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-cli/node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ganache-cli/node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-cli/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/ganache-cli/node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-cli/node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/y18n": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC" + }, + "node_modules/ganache-cli/node_modules/yargs": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + } + }, + "node_modules/ganache-cli/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/ghost-testrpc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", + "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, + "bin": { + "testrpc-sc": "index.js" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", + "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/hardhat": { + "resolved": "packages/hardhat-core", + "link": true + }, + "node_modules/hardhat-gas-reporter": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", + "integrity": "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==", + "dev": true, + "dependencies": { + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" + }, + "peerDependencies": { + "hardhat": "^2.0.2" + } + }, + "node_modules/hardhat-shorthand": { + "resolved": "packages/hardhat-shorthand", + "link": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha512-kaNz5OTAYYmt646Hkqw50/qyxP2vFnTVu5AQ1Zmk22Kk5+4Qx6BpO8+u7IKsML5fOsFk0ZT0AcCJNYwcvaLBvw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.3" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "engines": { + "node": "*" + } + }, + "node_modules/highlightjs-solidity": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-2.0.6.tgz", + "integrity": "sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg==" + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" + } + }, + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http2-wrapper": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", + "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-id": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz", + "integrity": "sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==", + "dev": true + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "dependencies": { + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/idna-uts46-hx/node_modules/punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz", + "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", + "dependencies": { + "lower-case": "^1.1.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-subdir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", + "dev": true, + "dependencies": { + "better-path-resolve": "1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", + "dependencies": { + "upper-case": "^1.1.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0", + "execa": "^1.0.0", + "throat": "^4.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonschema": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true + }, + "node_modules/keccak": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", + "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/level": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", + "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", + "dependencies": { + "browser-level": "^1.0.1", + "classic-level": "^1.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/level" + } + }, + "node_modules/level-supports": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/level-transcoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "dependencies": { + "buffer": "^6.0.3", + "module-error": "^1.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-yaml-file": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz", + "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.5", + "js-yaml": "^3.13.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/load-yaml-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/load-yaml-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "deprecated": "Please upgrade to 2.3.7 which fixes GHSA-4q6p-r6v2-jvc5", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==" + }, + "node_modules/lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", + "dependencies": { + "lower-case": "^1.1.2" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true + }, + "node_modules/mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-level": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", + "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", + "dependencies": { + "abstract-level": "^1.0.0", + "functional-red-black-tree": "^1.0.1", + "module-error": "^1.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/meow": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", + "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "^4.0.2", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.13.1", + "yargs-parser": "^18.1.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/mixme": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mixme/-/mixme-0.5.5.tgz", + "integrity": "sha512-/6IupbRx32s7jjEwHcycXikJwFD5UujbVNuJFkeKLYje+92OvtuPniF6JhnFm5JCTDUhS+kYK3W/4BWYQYXz7w==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", + "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", + "dependencies": { + "mkdirp": "*" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mock-fs": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" + }, + "node_modules/module-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multibase": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/multibase/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/multicodec": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "varint": "^5.0.0" + } + }, + "node_modules/multihashes": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", + "dependencies": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + } + }, + "node_modules/multihashes/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/multihashes/node_modules/multibase": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nano-base32": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz", + "integrity": "sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw==" + }, + "node_modules/nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" + }, + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/nise": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz", + "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^6.0.0", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + } + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "engines": { + "node": ">=12.19" + } + }, + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/nyc/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/nyc/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", + "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", + "dev": true, + "dependencies": { + "array.prototype.reduce": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" + }, + "node_modules/oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "dependencies": { + "http-https": "^1.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==" + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/outdent": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", + "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", + "dev": true + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dev": true, + "dependencies": { + "p-map": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-filter/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-ms": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-0.1.2.tgz", + "integrity": "sha512-VwMglE9412ifMHcRFEVJePEpreQh90wjIiOdP0UQQGKV4l+QprdKI+p5noXTkmGjznBMb40s+VymcclATAVvYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", + "dependencies": { + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" + } + }, + "node_modules/path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha512-fjAPuiws93rm7mPUu21RdBnkeZNrbfCFCwfAhPWY+rR3zG0ubpe5cEReHOw5fIbfmsxEV/g2kSxGTATY3Bpnwg==", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/preferred-pm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.0.3.tgz", + "integrity": "sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0", + "find-yarn-workspace-root2": "1.2.16", + "path-exists": "^4.0.0", + "which-pm": "2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/preferred-pm/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/preferred-pm/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/preferred-pm/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/preferred-pm/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/preferred-pm/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-ms": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-0.2.2.tgz", + "integrity": "sha512-ah/vWDJAT0arxQwVcSGp6etaLTZr4IsrXTy/khfjimzdYgSxYWzTMByrtpJUWinAnVY8szDg+qQhsE5MUMz3lQ==", + "dev": true, + "dependencies": { + "parse-ms": "^0.1.0" + }, + "bin": { + "pretty-ms": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dev": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-5.0.5.tgz", + "integrity": "sha512-BwQpbqxSCBJVpamI6ydzcKqyFmnd5msMWUGvzXLm1aXvusbbgkbOto/EUPM00hjveJEaJtdbhUjKSzWRhQVkaw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-yaml-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", + "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.5", + "js-yaml": "^3.6.1", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-yaml-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-yaml-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", + "dev": true, + "dependencies": { + "req-from": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/req-from/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==" + }, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/responselike/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/ripemd160-min": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", + "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-parallel-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sc-istanbul": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", + "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "dev": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/sc-istanbul/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sc-istanbul/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/sc-istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "node_modules/sc-istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/sc-istanbul/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", + "dependencies": { + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "dependencies": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", + "dev": true, + "dependencies": { + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sha3": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz", + "integrity": "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==", + "dependencies": { + "buffer": "6.0.3" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sinon": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", + "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==", + "deprecated": "16.1.1", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.8.1", + "@sinonjs/fake-timers": "^6.0.1", + "@sinonjs/samsam": "^5.3.1", + "diff": "^4.0.2", + "nise": "^4.0.4", + "supports-color": "^7.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon-chai": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.7.0.tgz", + "integrity": "sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==", + "dev": true, + "peerDependencies": { + "chai": "^4.0.0", + "sinon": ">=4.0.0" + } + }, + "node_modules/sinon/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/sinon/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/smartwrap/-/smartwrap-2.0.2.tgz", + "integrity": "sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==", + "dev": true, + "dependencies": { + "array.prototype.flat": "^1.2.3", + "breakword": "^1.0.5", + "grapheme-splitter": "^1.0.4", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1", + "yargs": "^15.1.0" + }, + "bin": { + "smartwrap": "src/terminal-adapter.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/smartwrap/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/smartwrap/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/smartwrap/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/smartwrap/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/smartwrap/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/smartwrap/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, + "node_modules/smartwrap/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/smartwrap/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solcjs" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/solc/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solc/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/solhint": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/solhint/-/solhint-3.4.0.tgz", + "integrity": "sha512-FYEs/LoTxMsWFP/OGsEqR1CBDn3Bn7hrTWsgtjai17MzxITgearIdlo374KKZjjIycu8E2xBcJ+RSWeoBvQmkw==", + "dependencies": { + "@solidity-parser/parser": "^0.15.0", + "ajv": "^6.12.6", + "antlr4": "^4.11.0", + "ast-parents": "^0.0.1", + "chalk": "^4.1.2", + "commander": "^10.0.0", + "cosmiconfig": "^8.0.0", + "fast-diff": "^1.2.0", + "glob": "^8.0.3", + "ignore": "^5.2.4", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "pluralize": "^8.0.0", + "semver": "^6.3.0", + "strip-ansi": "^6.0.1", + "table": "^6.8.1", + "text-table": "^0.2.0" + }, + "bin": { + "solhint": "solhint.js" + }, + "optionalDependencies": { + "prettier": "^2.8.3" + } + }, + "node_modules/solhint/node_modules/@solidity-parser/parser": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.15.0.tgz", + "integrity": "sha512-5UFJJTzWi1hgFk6aGCZ5rxG2DJkCJOzJ74qg7UkWSNCDSigW+CJLoYUb5bLiKrtI34Nr9rpFSUNHfkqtlL+N/w==", + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/solhint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/solhint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/solhint/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/solhint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/solhint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/solhint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/solhint/node_modules/commander": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", + "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", + "engines": { + "node": ">=14" + } + }, + "node_modules/solhint/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "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" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/solhint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/solhint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/solhint/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solhint/node_modules/prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/solhint/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/solhint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/solidity-coverage": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.2.tgz", + "integrity": "sha512-cv2bWb7lOXPE9/SSleDO6czkFiMHgP4NXPj+iW9W7iEKLBk7Cj0AGBiNmGX3V1totl9wjPrT0gHmABZKZt65rQ==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.14.1", + "chalk": "^2.4.2", + "death": "^1.1.0", + "detect-port": "^1.3.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.15", + "mocha": "7.1.2", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" + }, + "bin": { + "solidity-coverage": "plugins/bin.js" + }, + "peerDependencies": { + "hardhat": "^2.11.0" + } + }, + "node_modules/solidity-coverage/node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.1" + } + }, + "node_modules/solidity-coverage/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/solidity-coverage/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/solidity-coverage/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/solidity-coverage/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/solidity-coverage/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/solidity-coverage/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/solidity-coverage/node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/solidity-coverage/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/solidity-coverage/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/solidity-coverage/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/solidity-coverage/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/solidity-coverage/node_modules/mocha": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.2.tgz", + "integrity": "sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/solidity-coverage/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/solidity-coverage/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/solidity-coverage/node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/solidity-coverage/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/solidity-coverage/node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/solidity-coverage/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/solidity-coverage/node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solpp": { + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/solpp/-/solpp-0.11.5.tgz", + "integrity": "sha512-LjzCGMrTDXtera2C4mbQGZSpBznP+o3/82L2CneAAMNbm+t4xPsvfrgJkIaY+IZ5YLrB8IXn7cYthwHMKvAWnQ==", + "dependencies": { + "antlr4": "~4.8.0", + "axios": "^0.21.1", + "bn-str-256": "^1.9.1", + "commander": "^2.19.0", + "ethereumjs-util": "^6.0.0", + "lodash": "^4.17.11", + "mz": "^2.7.0", + "resolve": "^1.10.0", + "semver": "^5.6.0" + }, + "bin": { + "solpp": "src/solpp.js" + }, + "engines": { + "node": ">=8.15.1" + } + }, + "node_modules/solpp/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawndamnit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-2.0.0.tgz", + "integrity": "sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==", + "dev": true, + "dependencies": { + "cross-spawn": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/spawndamnit/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/spawndamnit/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/spawndamnit/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawndamnit/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawndamnit/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/spawndamnit/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-transform": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz", + "integrity": "sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==", + "dev": true, + "dependencies": { + "mixme": "^0.5.1" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", + "dependencies": { + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" + } + }, + "node_modules/swarm-js": { + "version": "0.1.42", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", + "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^11.8.5", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + } + }, + "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/swarm-js/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/swarm-js/node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/swarm-js/node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/swarm-js/node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/swarm-js/node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/swarm-js/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/swarm-js/node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/swarm-js/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/table/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/tar/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/testrpc": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", + "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", + "deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on." + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "dependencies": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/time-require": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/time-require/-/time-require-0.1.2.tgz", + "integrity": "sha512-IqcSpa1sVNleRbC9eHnN7p7vwEHNmsjsXUDqjlnvo4+2VLJ7/gIY2XACTBuRhMB4weYbDYKsR3av2ySykRhDIA==", + "dev": true, + "dependencies": { + "chalk": "^0.4.0", + "date-time": "^0.1.1", + "pretty-ms": "^0.2.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/time-require/node_modules/ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha512-3iF4FIKdxaVYT3JqQuY3Wat/T2t7TRbbQ94Fu50ZUCbLy4TFbTzr90NOHQodQkNqmeEGCw8WbeP78WNi6SKYUA==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/time-require/node_modules/chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha512-sQfYDlfv2DGVtjdoQqxS0cEZDroyG8h6TamA6rvxwlrU5BaSLDx9xhatBYl2pxZ7gmpNaPFVwBtdGdu5rQ+tYQ==", + "dev": true, + "dependencies": { + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/time-require/node_modules/strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha512-behete+3uqxecWlDAm5lmskaSaISA+ThQ4oNNBDTBJt0x2ppR6IPqfZNuj6BLaLJ/Sji4TPZlcRyOis8wXQTLg==", + "dev": true, + "bin": { + "strip-ansi": "cli.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.0.3" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/truffle-blockchain-utils": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.5.tgz", + "integrity": "sha512-eCCV8FbYOuKagRY5NiqJCZrrh9GjWX2573ahqZPvUrzxYGIvCpSsHpGCub2e00YefpMfBqwscbsDTK7WNVfwoA==", + "deprecated": "WARNING: This package has been renamed to @truffle/blockchain-utils." + }, + "node_modules/truffle-contract": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/truffle-contract/-/truffle-contract-3.0.8.tgz", + "integrity": "sha512-uhXb/G4dORU4RjFlwZZbFT0n5BS8akify+MaRsnWWs4SA/bo6x4/bQs1xtdO3b5Cl9nXiOX88wdQzRj3xtPVUg==", + "deprecated": "WARNING: This package has been renamed to @truffle/contract.", + "dependencies": { + "ethjs-abi": "0.1.8", + "truffle-blockchain-utils": "^0.0.5", + "truffle-contract-schema": "^2.0.3", + "truffle-error": "^0.0.3", + "web3": "0.20.6" + } + }, + "node_modules/truffle-contract-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/truffle-contract-schema/-/truffle-contract-schema-2.0.3.tgz", + "integrity": "sha512-eI5cFifbB3zpcO4RsXSnjN9JMSlJ4M50GQPdrfbrIXRTXHsyQ433SkgFjIATUwfq++TXWkCRfKMjN8eA7YQ3+Q==", + "deprecated": "WARNING: This package has been renamed to @truffle/contract-schema.", + "dependencies": { + "ajv": "^5.1.1", + "crypto-js": "^3.1.9-1", + "debug": "^3.1.0" + } + }, + "node_modules/truffle-contract-schema/node_modules/ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", + "dependencies": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "node_modules/truffle-contract-schema/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/truffle-contract-schema/node_modules/fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==" + }, + "node_modules/truffle-contract-schema/node_modules/json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==" + }, + "node_modules/truffle-contract/node_modules/bignumber.js": { + "version": "2.0.7", + "resolved": "git+ssh://git@github.com/frozeman/bignumber.js-nolookahead.git", + "integrity": "sha512-iDWOljwm6dBLAiFrlz2dn/XtjjjYtUL56CW8OpqhbjFzNAgfelX5AaDH1OA0iZ8JBe0y+/Ew4dzrOedvJfUPmg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/truffle-contract/node_modules/web3": { + "version": "0.20.6", + "resolved": "https://registry.npmjs.org/web3/-/web3-0.20.6.tgz", + "integrity": "sha512-diON1+Y8sPQ33htuTMZfyo+qlsmCBSYwi+MVTRneS8anqZUaTrGaBkTpPkPUvfX1X+NK+Y2spLaaei3HfXeSuw==", + "dependencies": { + "bignumber.js": "git+https://github.com/frozeman/bignumber.js-nolookahead.git", + "crypto-js": "^3.1.4", + "utf8": "^2.1.1", + "xhr2": "*", + "xmlhttprequest": "*" + } + }, + "node_modules/truffle-error": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/truffle-error/-/truffle-error-0.0.3.tgz", + "integrity": "sha512-9gxs1z6BUn7MqrE4NPm/jcYe8rLok3Z57aweGIh1+CoRJSttzYqwcXCqaPRSNrTFnsTeZMBukkYr/PUcADoihw==", + "deprecated": "WARNING: This package has been renamed to @truffle/error." + }, + "node_modules/ts-command-line-args": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.4.2.tgz", + "integrity": "sha512-mJLQQBOdyD4XI/ZWQY44PIdYde47JhV2xl380O7twPkTQ+Y5vFDHsk8LOeXKuz7dVY5aDCfAzRarNfSqtKOkQQ==", + "dev": true, + "dependencies": { + "@morgan-stanley/ts-mocking-bird": "^0.6.2", + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-command-line-args/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-command-line-args/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-command-line-args/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-command-line-args/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ts-command-line-args/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-command-line-args/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true, + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tty-table": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/tty-table/-/tty-table-4.1.6.tgz", + "integrity": "sha512-kRj5CBzOrakV4VRRY5kUWbNYvo/FpOsz65DzI5op9P+cHov3+IqPbo1JE1ZnQGkHdZgNFDsrEjrfqqy/Ply9fw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "csv": "^5.5.0", + "kleur": "^4.1.4", + "smartwrap": "^2.0.2", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1", + "yargs": "^17.1.1" + }, + "bin": { + "tty-table": "adapters/terminal-adapter.js" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/tty-table/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tty-table/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tty-table/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tty-table/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tty-table/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/tty-table/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tty-table/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tty-table/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tty-table/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tty-table/node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tty-table/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typechain": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz", + "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==", + "dev": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } + }, + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, + "node_modules/undici": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.18.0.tgz", + "integrity": "sha512-1iVwbhonhFytNdg0P4PqyIAXbdlVZVebtPDvuM36m66mRw4OGrCm2MYynJv/UENFLdP13J1nPVQzVE2zTs1OeA==", + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==" + }, + "node_modules/upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", + "dependencies": { + "upper-case": "^1.1.1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/utf8": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha512-QXo+O/QkLP/x1nyi54uQiG0XrODxdysuQvE5dtVqv7F5K2Qb6FsN+qbr6KhF5wQ20tfcV3VQp0/2x1e1MRSPWg==" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web3": { + "version": "0.20.7", + "resolved": "https://registry.npmjs.org/web3/-/web3-0.20.7.tgz", + "integrity": "sha512-VU6/DSUX93d1fCzBz7WP/SGCQizO1rKZi4Px9j/3yRyfssHyFcZamMw2/sj4E8TlfMXONvZLoforR8B4bRoyTQ==", + "dev": true, + "dependencies": { + "bignumber.js": "git+https://github.com/frozeman/bignumber.js-nolookahead.git", + "crypto-js": "^3.1.4", + "utf8": "^2.1.1", + "xhr2-cookies": "^1.1.0", + "xmlhttprequest": "*" + } + }, + "node_modules/web3-bzz": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.8.2.tgz", + "integrity": "sha512-1EEnxjPnFnvNWw3XeeKuTR8PBxYd0+XWzvaLK7OJC/Go9O8llLGxrxICbKV+8cgIE0sDRBxiYx02X+6OhoAQ9w==", + "hasInstallScript": true, + "dependencies": { + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/web3-core": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.8.2.tgz", + "integrity": "sha512-DJTVEAYcNqxkqruJE+Rxp3CIv0y5AZMwPHQmOkz/cz+MM75SIzMTc0AUdXzGyTS8xMF8h3YWMQGgGEy8SBf1PQ==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-core-requestmanager": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-helpers": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.3.tgz", + "integrity": "sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA==", + "peer": true, + "dependencies": { + "web3-eth-iban": "1.10.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.2.tgz", + "integrity": "sha512-1qnr5mw5wVyULzLOrk4B+ryO3gfGjGd/fx8NR+J2xCGLf1e6OSjxT9vbfuQ3fErk/NjSTWWreieYWLMhaogcRA==", + "dependencies": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.8.2", + "web3-core-promievent": "1.8.2", + "web3-core-subscriptions": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-core-method/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-core-method/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3-core-method/node_modules/web3-core-helpers": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dependencies": { + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method/node_modules/web3-core-promievent": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.2.tgz", + "integrity": "sha512-nvkJWDVgoOSsolJldN33tKW6bKKRJX3MCPDYMwP5SUFOA/mCzDEoI88N0JFofDTXkh1k7gOqp1pvwi9heuaxGg==", + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method/node_modules/web3-eth-iban": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-promievent": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.3.tgz", + "integrity": "sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ==", + "peer": true, + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-requestmanager": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.2.tgz", + "integrity": "sha512-p1d090RYs5Mu7DK1yyc3GCBVZB/03rBtFhYFoS2EruGzOWs/5Q0grgtpwS/DScdRAm8wB8mYEBhY/RKJWF6B2g==", + "dependencies": { + "util": "^0.12.5", + "web3-core-helpers": "1.8.2", + "web3-providers-http": "1.8.2", + "web3-providers-ipc": "1.8.2", + "web3-providers-ws": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-requestmanager/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-core-requestmanager/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-core-requestmanager/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3-core-requestmanager/node_modules/web3-core-helpers": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dependencies": { + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-requestmanager/node_modules/web3-eth-iban": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-requestmanager/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.2.tgz", + "integrity": "sha512-vXQogHDmAIQcKpXvGiMddBUeP9lnKgYF64+yQJhPNE5PnWr1sAibXuIPV7mIPihpFr/n/DORRj6Wh1pUv9zaTw==", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-core-subscriptions/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-core-subscriptions/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3-core-subscriptions/node_modules/web3-core-helpers": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dependencies": { + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions/node_modules/web3-eth-iban": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/web3-core/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-core/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-core/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3-core/node_modules/web3-core-helpers": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dependencies": { + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core/node_modules/web3-eth-iban": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.8.2.tgz", + "integrity": "sha512-JoTiWWc4F4TInpbvDUGb0WgDYJsFhuIjJlinc5ByjWD88Gvh+GKLsRjjFdbqe5YtwIGT4NymwoC5LQd1K6u/QQ==", + "dependencies": { + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-core-subscriptions": "1.8.2", + "web3-eth-abi": "1.8.2", + "web3-eth-accounts": "1.8.2", + "web3-eth-contract": "1.8.2", + "web3-eth-ens": "1.8.2", + "web3-eth-iban": "1.8.2", + "web3-eth-personal": "1.8.2", + "web3-net": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.3.tgz", + "integrity": "sha512-O8EvV67uhq0OiCMekqYsDtb6FzfYzMXT7VMHowF8HV6qLZXCGTdB/NH4nJrEh2mFtEwVdS6AmLFJAQd2kVyoMQ==", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.8.2.tgz", + "integrity": "sha512-c367Ij63VCz9YdyjiHHWLFtN85l6QghgwMQH2B1eM/p9Y5lTlTX7t/Eg/8+f1yoIStXbk2w/PYM2lk+IkbqdLA==", + "dependencies": { + "@ethereumjs/common": "2.5.0", + "@ethereumjs/tx": "3.3.2", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.1.5", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/web3-eth-accounts/node_modules/eth-lib/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/web3-eth-accounts/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-eth-accounts/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/web3-eth-accounts/node_modules/web3-core-helpers": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dependencies": { + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/web3-eth-iban": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.8.2.tgz", + "integrity": "sha512-ID5A25tHTSBNwOPjiXSVzxruz006ULRIDbzWTYIFTp7NJ7vXu/kynKK2ag/ObuTqBpMbobP8nXcA9b5EDkIdQA==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-core-promievent": "1.8.2", + "web3-core-subscriptions": "1.8.2", + "web3-eth-abi": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-eth-contract/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3-eth-contract/node_modules/web3-core-helpers": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dependencies": { + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/web3-core-promievent": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.2.tgz", + "integrity": "sha512-nvkJWDVgoOSsolJldN33tKW6bKKRJX3MCPDYMwP5SUFOA/mCzDEoI88N0JFofDTXkh1k7gOqp1pvwi9heuaxGg==", + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/web3-eth-abi": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.2.tgz", + "integrity": "sha512-Om9g3kaRNjqiNPAgKwGT16y+ZwtBzRe4ZJFGjLiSs6v5I7TPNF+rRMWuKnR6jq0azQZDj6rblvKFMA49/k48Og==", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/web3-eth-iban": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-contract/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.8.2.tgz", + "integrity": "sha512-PWph7C/CnqdWuu1+SH4U4zdrK4t2HNt0I4XzPYFdv9ugE8EuojselioPQXsVGvjql+Nt3jDLvQvggPqlMbvwRw==", + "dependencies": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-promievent": "1.8.2", + "web3-eth-abi": "1.8.2", + "web3-eth-contract": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-eth-ens/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3-eth-ens/node_modules/web3-core-helpers": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dependencies": { + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/web3-core-promievent": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.2.tgz", + "integrity": "sha512-nvkJWDVgoOSsolJldN33tKW6bKKRJX3MCPDYMwP5SUFOA/mCzDEoI88N0JFofDTXkh1k7gOqp1pvwi9heuaxGg==", + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/web3-eth-abi": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.2.tgz", + "integrity": "sha512-Om9g3kaRNjqiNPAgKwGT16y+ZwtBzRe4ZJFGjLiSs6v5I7TPNF+rRMWuKnR6jq0azQZDj6rblvKFMA49/k48Og==", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/web3-eth-iban": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.3.tgz", + "integrity": "sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA==", + "peer": true, + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.8.2.tgz", + "integrity": "sha512-Vg4HfwCr7doiUF/RC+Jz0wT4+cYaXcOWMAW2AHIjHX6Z7Xwa8nrURIeQgeEE62qcEHAzajyAdB1u6bJyTfuCXw==", + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.8.2", + "web3-core-helpers": "1.8.2", + "web3-core-method": "1.8.2", + "web3-net": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/web3-eth-personal/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-eth-personal/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-eth-personal/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3-eth-personal/node_modules/web3-core-helpers": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dependencies": { + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal/node_modules/web3-eth-iban": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-eth/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-eth/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3-eth/node_modules/web3-core-helpers": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dependencies": { + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth/node_modules/web3-eth-abi": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.8.2.tgz", + "integrity": "sha512-Om9g3kaRNjqiNPAgKwGT16y+ZwtBzRe4ZJFGjLiSs6v5I7TPNF+rRMWuKnR6jq0azQZDj6rblvKFMA49/k48Og==", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth/node_modules/web3-eth-iban": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-net": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.8.2.tgz", + "integrity": "sha512-1itkDMGmbgb83Dg9nporFes9/fxsU7smJ3oRXlFkg4ZHn8YJyP1MSQFPJWWwSc+GrcCFt4O5IrUTvEkHqE3xag==", + "dependencies": { + "web3-core": "1.8.2", + "web3-core-method": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-net/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-net/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-net/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3-net/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.2.tgz", + "integrity": "sha512-2xY94IIEQd16+b+vIBF4IC1p7GVaz9q4EUFscvMUjtEq4ru4Atdzjs9GP+jmcoo49p70II0UV3bqQcz0TQfVyQ==", + "dependencies": { + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-providers-http/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-providers-http/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3-providers-http/node_modules/web3-core-helpers": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dependencies": { + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http/node_modules/web3-eth-iban": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.2.tgz", + "integrity": "sha512-p6fqKVGFg+WiXGHWnB1hu43PbvPkDHTz4RgoEzbXugv5rtv5zfYLqm8Ba6lrJOS5ks9kGKR21a0y3NzE3u7V4w==", + "dependencies": { + "oboe": "2.1.5", + "web3-core-helpers": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-providers-ipc/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-providers-ipc/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3-providers-ipc/node_modules/web3-core-helpers": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dependencies": { + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc/node_modules/web3-eth-iban": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.2.tgz", + "integrity": "sha512-3s/4K+wHgbiN+Zrp9YjMq2eqAF6QGABw7wFftPdx+m5hWImV27/MoIx57c6HffNRqZXmCHnfWWFCNHHsi7wXnA==", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.8.2", + "websocket": "^1.0.32" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/web3-providers-ws/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/web3-providers-ws/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3-providers-ws/node_modules/web3-core-helpers": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz", + "integrity": "sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw==", + "dependencies": { + "web3-eth-iban": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws/node_modules/web3-eth-iban": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz", + "integrity": "sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-shh": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.8.2.tgz", + "integrity": "sha512-uZ+3MAoNcaJsXXNCDnizKJ5viBNeHOFYsCbFhV755Uu52FswzTOw6DtE7yK9nYXMtIhiSgi7nwl1RYzP8pystw==", + "hasInstallScript": true, + "dependencies": { + "web3-core": "1.8.2", + "web3-core-method": "1.8.2", + "web3-core-subscriptions": "1.8.2", + "web3-net": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.3.tgz", + "integrity": "sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@scure/bip32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "dependencies": { + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz", + "integrity": "sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==", + "dependencies": { + "@noble/curves": "1.1.0", + "@noble/hashes": "1.3.1", + "@scure/bip32": "1.3.1", + "@scure/bip39": "1.2.1" + } + }, + "node_modules/web3-utils/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/web3/node_modules/bignumber.js": { + "version": "2.0.7", + "resolved": "git+ssh://git@github.com/frozeman/bignumber.js-nolookahead.git", + "integrity": "sha512-iDWOljwm6dBLAiFrlz2dn/XtjjjYtUL56CW8OpqhbjFzNAgfelX5AaDH1OA0iZ8JBe0y+/Ew4dzrOedvJfUPmg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==" + }, + "node_modules/which-pm": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz", + "integrity": "sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==", + "dev": true, + "dependencies": { + "load-yaml-file": "^0.2.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8.15" + } + }, + "node_modules/which-pm/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", + "bin": { + "window-size": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsrun": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/wsrun/-/wsrun-5.2.4.tgz", + "integrity": "sha512-akv3WtKBohdHsD/5uqhYRHw6GXeCXe87FsSg28Szq+2cpoqRW2SY4yPfm1D0za1cS6MgNy5hPgzS5SqYJaGUxg==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.1", + "chalk": "^2.3.0", + "glob": "^7.1.2", + "jest-changed-files": "^24.9.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "split": "^1.0.1", + "throat": "^4.1.0", + "yargs": "^13.0.0" + }, + "bin": { + "wsrun": "bin/wsrun.js" + } + }, + "node_modules/wsrun/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/wsrun/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/wsrun/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/wsrun/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, + "node_modules/wsrun/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wsrun/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/wsrun/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/wsrun/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/xhr2": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", + "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", + "dev": true, + "dependencies": { + "cookiejar": "^2.1.1" + } + }, + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/common": { + "name": "@nomiclabs/common", + "version": "0.0.1", + "license": "MIT", + "devDependencies": { + "detect-port": "^1.3.0", + "ganache-cli": "^6.12.2", + "prettier": "2.4.1" + } + }, + "packages/eslint-plugin": { + "name": "@nomiclabs/eslint-plugin-hardhat-internal-rules", + "version": "1.0.2", + "license": "MIT" + }, + "packages/hardhat-chai-matchers": { + "name": "@nomicfoundation/hardhat-chai-matchers", + "version": "1.0.6", + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "devDependencies": { + "@nomiclabs/hardhat-ethers": "^2.0.0", + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "bignumber.js": "^9.0.2", + "bn.js": "^5.1.0", + "chai": "^4.2.0", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "ethers": "^5.0.0", + "get-port": "^5.1.1", + "hardhat": "^2.9.4", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "ts-node": "^10.8.0", + "typescript": "~4.7.4" + }, + "peerDependencies": { + "@nomiclabs/hardhat-ethers": "^2.0.0", + "chai": "^4.2.0", + "ethers": "^5.0.0", + "hardhat": "^2.9.4" + } + }, + "packages/hardhat-chai-matchers/node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/hardhat-core": { + "name": "hardhat", + "version": "2.14.0", + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-vm": "7.0.1", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "abort-controller": "^3.0.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "qs": "^6.7.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "devDependencies": { + "@nomiclabs/eslint-plugin-hardhat-internal-rules": "^1.0.0", + "@types/async-eventemitter": "^0.2.1", + "@types/bn.js": "^5.1.0", + "@types/chai": "^4.2.0", + "@types/chai-as-promised": "^7.1.3", + "@types/ci-info": "^2.0.0", + "@types/debug": "^4.1.4", + "@types/find-up": "^2.1.1", + "@types/fs-extra": "^5.1.0", + "@types/glob": "^7.1.1", + "@types/keccak": "^3.0.1", + "@types/lodash": "^4.14.123", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@types/qs": "^6.5.3", + "@types/resolve": "^1.17.1", + "@types/semver": "^6.0.2", + "@types/sinon": "^9.0.8", + "@types/uuid": "^8.3.1", + "@types/ws": "^7.2.1", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "bignumber.js": "^9.0.2", + "bn.js": "^5.1.0", + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "ethers": "^5.0.0", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "sinon": "^9.0.0", + "time-require": "^0.1.2", + "ts-node": "^10.8.0", + "typescript": "~4.7.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "packages/hardhat-core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/hardhat-ethers": { + "name": "@nomiclabs/hardhat-ethers", + "version": "2.2.3", + "license": "MIT", + "devDependencies": { + "@types/chai": "^4.2.0", + "@types/chai-as-promised": "^7.1.3", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "ethers": "^5.0.0", + "hardhat": "^2.0.0", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "ts-node": "^10.8.0", + "typescript": "~4.7.4" + }, + "peerDependencies": { + "ethers": "^5.0.0", + "hardhat": "^2.0.0" + } + }, + "packages/hardhat-foundry": { + "name": "@nomicfoundation/hardhat-foundry", + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2" + }, + "devDependencies": { + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "chai": "^4.2.0", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-prettier": "3.4.0", + "hardhat": "^2.12.6", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "ts-node": "^10.8.0", + "typescript": "~4.7.4" + }, + "peerDependencies": { + "hardhat": "^2.12.6" + } + }, + "packages/hardhat-network-helpers": { + "name": "@nomicfoundation/hardhat-network-helpers", + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "ethereumjs-util": "^7.1.4" + }, + "devDependencies": { + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "ethers": "^5.0.0", + "hardhat": "^2.9.5", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "ts-node": "^10.8.0", + "typescript": "~4.7.4" + }, + "peerDependencies": { + "hardhat": "^2.9.5" + } + }, + "packages/hardhat-network-helpers/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "packages/hardhat-network-helpers/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "packages/hardhat-shorthand": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@fvictorio/tabtab": "^0.0.3", + "debug": "^4.1.1", + "semver": "^6.3.0" + }, + "bin": { + "hardhat-completion": "dist/src/completion.js", + "hh": "dist/src/index.js" + }, + "devDependencies": { + "@types/chai": "^4.2.0", + "@types/fs-extra": "^5.1.0", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "chai": "^4.2.0", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "hardhat": "^2.0.0", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "ts-node": "^10.8.0", + "typescript": "~4.7.4" + } + }, + "packages/hardhat-shorthand/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/hardhat-solhint": { + "name": "@nomiclabs/hardhat-solhint", + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "solhint": "^3.4.0" + }, + "devDependencies": { + "@types/chai": "^4.2.0", + "@types/fs-extra": "^5.1.0", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "chai": "^4.2.0", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "fs-extra": "^7.0.1", + "hardhat": "^2.0.0", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "sinon": "^9.0.0", + "ts-node": "^10.8.0", + "typescript": "~4.7.4" + }, + "peerDependencies": { + "hardhat": "^2.0.0" + } + }, + "packages/hardhat-solpp": { + "name": "@nomiclabs/hardhat-solpp", + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "fs-extra": "^7.0.1", + "solpp": "^0.11.5" + }, + "devDependencies": { + "@types/chai": "^4.2.0", + "@types/fs-extra": "^5.1.0", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "chai": "^4.2.0", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "hardhat": "^2.0.0", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "ts-node": "^10.8.0", + "typescript": "~4.7.4" + }, + "peerDependencies": { + "hardhat": "^2.0.0" + } + }, + "packages/hardhat-toolbox": { + "name": "@nomicfoundation/hardhat-toolbox", + "version": "2.0.2", + "license": "MIT", + "devDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomiclabs/hardhat-ethers": "^2.0.0", + "@nomiclabs/hardhat-etherscan": "^3.0.0", + "@typechain/ethers-v5": "^10.1.0", + "@typechain/hardhat": "^6.1.2", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@typescript-eslint/eslint-plugin": "4.29.2", + "@typescript-eslint/parser": "4.29.2", + "chai": "^4.2.0", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "ethers": "^5.4.7", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "solidity-coverage": "^0.8.1", + "ts-node": "^10.8.0", + "typechain": "^8.1.0", + "typescript": "~4.7.4" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomiclabs/hardhat-ethers": "^2.0.0", + "@nomiclabs/hardhat-etherscan": "^3.0.0", + "@typechain/ethers-v5": "^10.1.0", + "@typechain/hardhat": "^6.1.2", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=12.0.0", + "chai": "^4.2.0", + "ethers": "^5.4.7", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.1.0", + "typescript": ">=4.5.0" + } + }, + "packages/hardhat-toolbox/node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.29.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.2.tgz", + "integrity": "sha512-x4EMgn4BTfVd9+Z+r+6rmWxoAzBaapt4QFqE+d8L8sUtYZYLDTK6VG/y/SMMWA5t1/BVU5Kf+20rX4PtWzUYZg==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "4.29.2", + "@typescript-eslint/scope-manager": "4.29.2", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/hardhat-toolbox/node_modules/@typescript-eslint/parser": { + "version": "4.29.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.2.tgz", + "integrity": "sha512-WQ6BPf+lNuwteUuyk1jD/aHKqMQ9jrdCn7Gxt9vvBnzbpj7aWEf+aZsJ1zvTjx5zFxGCt000lsbD9tQPEL8u6g==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "4.29.2", + "@typescript-eslint/types": "4.29.2", + "@typescript-eslint/typescript-estree": "4.29.2", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/hardhat-toolbox/node_modules/@typescript-eslint/scope-manager": { + "version": "4.29.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.2.tgz", + "integrity": "sha512-mfHmvlQxmfkU8D55CkZO2sQOueTxLqGvzV+mG6S/6fIunDiD2ouwsAoiYCZYDDK73QCibYjIZmGhpvKwAB5BOA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.29.2", + "@typescript-eslint/visitor-keys": "4.29.2" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/hardhat-toolbox/node_modules/@typescript-eslint/types": { + "version": "4.29.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.2.tgz", + "integrity": "sha512-K6ApnEXId+WTGxqnda8z4LhNMa/pZmbTFkDxEBLQAbhLZL50DjeY0VIDCml/0Y3FlcbqXZrABqrcKxq+n0LwzQ==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/hardhat-toolbox/node_modules/@typescript-eslint/typescript-estree": { + "version": "4.29.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.2.tgz", + "integrity": "sha512-TJ0/hEnYxapYn9SGn3dCnETO0r+MjaxtlWZ2xU+EvytF0g4CqTpZL48SqSNn2hXsPolnewF30pdzR9a5Lj3DNg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.29.2", + "@typescript-eslint/visitor-keys": "4.29.2", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "packages/hardhat-toolbox/node_modules/@typescript-eslint/visitor-keys": { + "version": "4.29.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.2.tgz", + "integrity": "sha512-bDgJLQ86oWHJoZ1ai4TZdgXzJxsea3Ee9u9wsTAvjChdj2WLcVsgWYAPeY7RQMn16tKrlQaBnpKv7KBfs4EQag==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.29.2", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "packages/hardhat-toolbox/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "packages/hardhat-toolbox/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "packages/hardhat-toolbox/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "packages/hardhat-toolbox/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "packages/hardhat-truffle4": { + "name": "@nomiclabs/hardhat-truffle4", + "version": "2.0.6", + "license": "MIT", + "dependencies": { + "@types/chai": "^4.2.0", + "chai": "^4.2.0", + "ethereumjs-util": "^7.1.4", + "fs-extra": "^7.0.1", + "truffle-contract": "^3.0.7" + }, + "devDependencies": { + "@nomiclabs/hardhat-web3-legacy": "^2.0.0", + "@types/fs-extra": "^5.1.0", + "@types/glob": "^7.1.1", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "chai": "^4.2.0", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "hardhat": "^2.6.4", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "ts-node": "^10.8.0", + "typescript": "~4.7.4", + "web3": "^0.20.0" + }, + "peerDependencies": { + "@nomiclabs/hardhat-web3-legacy": "^2.0.0", + "hardhat": "^2.6.4", + "web3": "^0.20.0" + } + }, + "packages/hardhat-truffle4/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "packages/hardhat-truffle4/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "packages/hardhat-truffle5": { + "name": "@nomiclabs/hardhat-truffle5", + "version": "2.0.7", + "license": "MIT", + "dependencies": { + "@nomiclabs/truffle-contract": "^4.2.23", + "@types/chai": "^4.2.0", + "chai": "^4.2.0", + "ethereumjs-util": "^7.1.4", + "fs-extra": "^7.0.1" + }, + "devDependencies": { + "@nomiclabs/hardhat-web3": "^2.0.0", + "@types/fs-extra": "^5.1.0", + "@types/glob": "^7.1.1", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "chai": "^4.2.0", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "hardhat": "^2.6.4", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "ts-node": "^10.8.0", + "typescript": "~4.7.4", + "web3": "^1.0.0-beta.36" + }, + "peerDependencies": { + "@nomiclabs/hardhat-web3": "^2.0.0", + "hardhat": "^2.6.4", + "web3": "^1.0.0-beta.36" + } + }, + "packages/hardhat-truffle5/node_modules/@nomiclabs/truffle-contract": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@nomiclabs/truffle-contract/-/truffle-contract-4.5.10.tgz", + "integrity": "sha512-nF/6InFV+0hUvutyFgsdOMCoYlr//2fJbRER4itxYtQtc4/O1biTwZIKRu+5l2J5Sq6LU2WX7vZHtDgQdhWxIQ==", + "dependencies": { + "@ensdomains/ensjs": "^2.0.1", + "@truffle/blockchain-utils": "^0.1.3", + "@truffle/contract-schema": "^3.4.7", + "@truffle/debug-utils": "^6.0.22", + "@truffle/error": "^0.1.0", + "@truffle/interface-adapter": "^0.5.16", + "bignumber.js": "^7.2.1", + "ethereum-ens": "^0.8.0", + "ethers": "^4.0.0-beta.1", + "source-map-support": "^0.5.19" + }, + "peerDependencies": { + "web3": "^1.2.1", + "web3-core-helpers": "^1.2.1", + "web3-core-promievent": "^1.2.1", + "web3-eth-abi": "^1.2.1", + "web3-utils": "^1.2.1" + } + }, + "packages/hardhat-truffle5/node_modules/bignumber.js": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", + "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", + "engines": { + "node": "*" + } + }, + "packages/hardhat-truffle5/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "packages/hardhat-truffle5/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "packages/hardhat-truffle5/node_modules/ethers": { + "version": "4.0.49", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", + "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", + "dependencies": { + "aes-js": "3.0.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + } + }, + "packages/hardhat-truffle5/node_modules/ethers/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "packages/hardhat-truffle5/node_modules/ethers/node_modules/hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + } + }, + "packages/hardhat-truffle5/node_modules/ethers/node_modules/scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" + }, + "packages/hardhat-truffle5/node_modules/ethers/node_modules/setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==" + }, + "packages/hardhat-truffle5/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + }, + "packages/hardhat-truffle5/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "packages/hardhat-truffle5/node_modules/uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details." + }, + "packages/hardhat-truffle5/node_modules/web3": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.8.2.tgz", + "integrity": "sha512-92h0GdEHW9wqDICQQKyG4foZBYi0OQkyg4CRml2F7XBl/NG+fu9o6J19kzfFXzSBoA4DnJXbyRgj/RHZv5LRiw==", + "hasInstallScript": true, + "dependencies": { + "web3-bzz": "1.8.2", + "web3-core": "1.8.2", + "web3-eth": "1.8.2", + "web3-eth-personal": "1.8.2", + "web3-net": "1.8.2", + "web3-shh": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "packages/hardhat-truffle5/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "packages/hardhat-verify": { + "name": "@nomicfoundation/hardhat-verify", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "devDependencies": { + "@nomiclabs/hardhat-ethers": "^2.0.0", + "@types/chai": "^4.2.0", + "@types/chai-as-promised": "^7.1.3", + "@types/lodash.clonedeep": "^4.5.7", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@types/semver": "^6.0.2", + "@types/sinon": "^9.0.8", + "@types/sinon-chai": "^3.2.9", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "ethers": "^5.0.0", + "hardhat": "^2.0.4", + "mocha": "^10.0.0", + "nyc": "^15.1.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "sinon": "^9.0.0", + "sinon-chai": "^3.7.0", + "ts-node": "^10.8.0", + "typescript": "~4.7.4" + }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "packages/hardhat-verify/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/hardhat-vyper": { + "name": "@nomiclabs/hardhat-vyper", + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "io-ts": "1.10.4", + "lodash": "^4.17.11", + "semver": "^6.3.0" + }, + "devDependencies": { + "@types/chai": "^4.2.0", + "@types/fs-extra": "^5.1.0", + "@types/lodash": "^4.14.123", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "chai": "^4.2.0", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "hardhat": "^2.8.3", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "ts-node": "^10.8.0", + "typescript": "~4.7.4" + }, + "peerDependencies": { + "hardhat": "^2.8.3" + } + }, + "packages/hardhat-vyper/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "packages/hardhat-web3": { + "name": "@nomiclabs/hardhat-web3", + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "@types/bignumber.js": "^5.0.0" + }, + "devDependencies": { + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "chai": "^4.2.0", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "hardhat": "^2.0.0", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "ts-node": "^10.8.0", + "typescript": "~4.7.4", + "web3": "^1.0.0-beta.36" + }, + "peerDependencies": { + "hardhat": "^2.0.0", + "web3": "^1.0.0-beta.36" + } + }, + "packages/hardhat-web3-legacy": { + "name": "@nomiclabs/hardhat-web3-legacy", + "version": "2.0.0", + "license": "MIT", + "devDependencies": { + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": "^14.0.0", + "@typescript-eslint/eslint-plugin": "5.53.0", + "@typescript-eslint/parser": "5.53.0", + "chai": "^4.2.0", + "eslint": "^7.29.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.24.1", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "hardhat": "^2.0.0", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "ts-node": "^10.8.0", + "typescript": "~4.7.4", + "web3": "^0.20.0" + }, + "peerDependencies": { + "hardhat": "^2.0.0", + "web3": "^0.20.0" + } + }, + "packages/hardhat-web3/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "packages/hardhat-web3/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "packages/hardhat-web3/node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true + }, + "packages/hardhat-web3/node_modules/web3": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.8.2.tgz", + "integrity": "sha512-92h0GdEHW9wqDICQQKyG4foZBYi0OQkyg4CRml2F7XBl/NG+fu9o6J19kzfFXzSBoA4DnJXbyRgj/RHZv5LRiw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "web3-bzz": "1.8.2", + "web3-core": "1.8.2", + "web3-eth": "1.8.2", + "web3-eth-personal": "1.8.2", + "web3-net": "1.8.2", + "web3-shh": "1.8.2", + "web3-utils": "1.8.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "packages/hardhat-web3/node_modules/web3-utils": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.2.tgz", + "integrity": "sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + } + } +} diff --git a/package.json b/package.json index 37b69e921e..f0eda622b0 100644 --- a/package.json +++ b/package.json @@ -4,33 +4,34 @@ "author": "Nomic Labs LLC", "license": "SEE LICENSE IN EACH PACKAGE'S LICENSE FILE", "private": true, - "workspaces": { - "packages": [ - "packages/*" - ], - "nohoist": [ - "**/find-up", - "**/find-up/**" - ] - }, "devDependencies": { "@changesets/cli": "^2.16.0", + "hardhat": "workspace:*", "prettier": "2.4.1", "shelljs": "^0.8.5", - "typescript": "~4.7.4", - "wsrun": "^5.2.2" + "typescript": "~5.0.0" }, "scripts": { - "build": "tsc --build packages/hardhat-core packages/hardhat-ethers packages/hardhat-verify packages/hardhat-solhint packages/hardhat-solpp packages/hardhat-truffle4 packages/hardhat-truffle5 packages/hardhat-vyper packages/hardhat-web3 packages/hardhat-web3-legacy packages/hardhat-chai-matchers packages/hardhat-network-helpers packages/hardhat-toolbox packages/hardhat-foundry", - "watch": "tsc --build --watch packages/hardhat-core/src packages/hardhat-ethers packages/hardhat-verify packages/hardhat-solhint packages/hardhat-solpp packages/hardhat-truffle4 packages/hardhat-truffle5 packages/hardhat-vyper packages/hardhat-web3 packages/hardhat-web3-legacy packages/hardhat-chai-matchers packages/hardhat-network-helpers packages/hardhat-toolbox packages/hardhat-foundry", - "clean": "wsrun --exclude-missing clean", + "build": "tsc --build packages/hardhat-core packages/hardhat-ethers packages/hardhat-verify packages/hardhat-solhint packages/hardhat-solpp packages/hardhat-truffle4 packages/hardhat-truffle5 packages/hardhat-vyper packages/hardhat-web3 packages/hardhat-web3-v4 packages/hardhat-web3-legacy packages/hardhat-chai-matchers packages/hardhat-network-helpers packages/hardhat-toolbox packages/hardhat-foundry packages/hardhat-ledger packages/hardhat-viem packages/hardhat-toolbox-viem", + "watch": "tsc --build --watch packages/hardhat-core/src packages/hardhat-ethers packages/hardhat-verify packages/hardhat-solhint packages/hardhat-solpp packages/hardhat-truffle4 packages/hardhat-truffle5 packages/hardhat-vyper packages/hardhat-web3 packages/hardhat-web3-v4 packages/hardhat-web3-legacy packages/hardhat-chai-matchers packages/hardhat-network-helpers packages/hardhat-toolbox packages/hardhat-foundry packages/hardhat-ledger packages/hardhat-viem packages/hardhat-toolbox-viem", + "clean": "pnpm run --recursive clean", "test": "node scripts/run-tests.js", - "lint": "wsrun --exclude-missing --stages lint && yarn prettier --check", - "lint:fix": "wsrun --exclude-missing --stages lint:fix && yarn prettier --write", - "prettier": "prettier *.md \"{docs,.github}/**/*.{md,yml,ts}\" \"scripts/**/*.js\"" + "lint": "pnpm run --recursive lint && pnpm prettier --check", + "lint:fix": "pnpm run --recursive lint:fix && pnpm prettier --write", + "prettier": "prettier *.md \"{docs,.github}/**/*.{md,yml,ts,js}\" \"scripts/**/*.js\"" + }, + "description": "packages/hardhat-core/README.md", + "main": "index.js", + "directories": { + "doc": "docs" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Dargon789/hardhat.git" + }, + "keywords": [], + "bugs": { + "url": "https://github.com/Dargon789/hardhat/issues" }, - "dependencies": {}, - "resolutions": { - "**/antlr4": "4.7.1" - } + "homepage": "https://github.com/Dargon789/hardhat#readme" } diff --git a/packages/common/.gitignore b/packages/common/.gitignore index c00d7e7296..4aca21f18d 100644 --- a/packages/common/.gitignore +++ b/packages/common/.gitignore @@ -15,10 +15,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -57,21 +53,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/common/empty-hardhat-project/hardhat.config.js b/packages/common/empty-hardhat-project/hardhat.config.js new file mode 100644 index 0000000000..aa3527a6b0 --- /dev/null +++ b/packages/common/empty-hardhat-project/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.8.19", +}; diff --git a/packages/common/package.json b/packages/common/package.json index 10c4ca7f25..cc99a6f9c5 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -8,8 +8,8 @@ "license": "MIT", "private": true, "scripts": { - "lint": "yarn prettier --check", - "lint:fix": "yarn prettier --write", + "lint": "pnpm prettier --check", + "lint:fix": "pnpm prettier --write", "prettier": "prettier \"**/*.{js,md,json}\"" }, "devDependencies": { diff --git a/packages/common/run-with-hardhat.js b/packages/common/run-with-hardhat.js new file mode 100644 index 0000000000..dcdf3b4b6f --- /dev/null +++ b/packages/common/run-with-hardhat.js @@ -0,0 +1,79 @@ +const { fork } = require("child_process"); +const path = require("path"); +let hardhatNodeProcess; + +/** + * Ensure hardhat node is running, for tests that require it. + */ +before(async () => { + console.log("\n### Starting hardhat node instance ###"); + + const pathToCli = path.resolve( + __dirname, + "..", + "hardhat-core", + "internal", + "cli", + "cli" + ); + const pathToEmptyProject = path.resolve(__dirname, "empty-hardhat-project"); + + hardhatNodeProcess = fork(pathToCli, ["node"], { + cwd: pathToEmptyProject, + env: { HARDHAT_EXPERIMENTAL_ALLOW_NON_LOCAL_INSTALLATION: "true" }, + stdio: "pipe", + }); + + return new Promise((resolve, reject) => { + let stdout = ""; + let stderr = ""; + + hardhatNodeProcess.stdout.on("data", (data) => { + stdout += data.toString(); + if ( + data + .toString() + .includes("Started HTTP and WebSocket JSON-RPC server at") + ) { + resolve(); + } + }); + + hardhatNodeProcess.stderr.on("data", (data) => { + stderr += data.toString(); + }); + + const buildErrorMessage = () => { + return `There was a problem running hardhat node. + +stdout: +${stdout} + +stderr: +${stderr}`; + }; + + hardhatNodeProcess.on("error", () => { + reject(new Error(buildErrorMessage())); + }); + + hardhatNodeProcess.on("exit", (statusCode) => { + if (statusCode === 0) { + return; + } + + reject(new Error(buildErrorMessage())); + }); + }); +}); + +/** + * Cleanup the process running hardhat node + */ +after(async () => { + if (hardhatNodeProcess === undefined) { + return; + } + hardhatNodeProcess.kill(); + console.log("\n### Stopped hardhat node instance ###"); +}); diff --git a/packages/eslint-plugin-hardhat-internal-rules/.eslintrc.js b/packages/eslint-plugin-hardhat-internal-rules/.eslintrc.js new file mode 100644 index 0000000000..310b1105f0 --- /dev/null +++ b/packages/eslint-plugin-hardhat-internal-rules/.eslintrc.js @@ -0,0 +1,23 @@ +"use strict"; + +module.exports = { + root: true, + extends: [ + "eslint:recommended", + "plugin:eslint-plugin/recommended", + "plugin:node/recommended", + "plugin:prettier/recommended", + ], + env: { + node: true, + }, + overrides: [ + { + files: ["tests/**/*.js"], + env: { mocha: true }, + }, + ], + parserOptions: { + ecmaVersion: 2020, + }, +}; diff --git a/packages/eslint-plugin-hardhat-internal-rules/.gitignore b/packages/eslint-plugin-hardhat-internal-rules/.gitignore new file mode 100644 index 0000000000..5ecde386f3 --- /dev/null +++ b/packages/eslint-plugin-hardhat-internal-rules/.gitignore @@ -0,0 +1,113 @@ +# Logs +logs +*.log +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'pnpm pack' +*.tgz + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test diff --git a/packages/eslint-plugin-hardhat-internal-rules/CHANGELOG.md b/packages/eslint-plugin-hardhat-internal-rules/CHANGELOG.md new file mode 100644 index 0000000000..0beb5623dd --- /dev/null +++ b/packages/eslint-plugin-hardhat-internal-rules/CHANGELOG.md @@ -0,0 +1,13 @@ +# @nomicfoundation/eslint-plugin-hardhat-internal-rules + +## 1.0.2 + +### Patch Changes + +- 53f7a5f80: allow linting classes that extend the HardhatPluginError class + +## 1.0.1 + +### Patch Changes + +- 337456b8a: add eslint rule for hardhat plugin errors diff --git a/packages/eslint-plugin-hardhat-internal-rules/README.md b/packages/eslint-plugin-hardhat-internal-rules/README.md new file mode 100644 index 0000000000..99932547bd --- /dev/null +++ b/packages/eslint-plugin-hardhat-internal-rules/README.md @@ -0,0 +1,12 @@ +# @nomicfoundation/eslint-plugin-hardhat-internal-rules + +This plugin contains internal linting rules used in the [Hardhat repository](https://github.com/nomiclabs/hardhat/). It's not meant to be used by other projects. + + + +| Name | Description | +| :------------------------------------------------------------------- | :----------------------------------------------- | +| [only-hardhat-error](docs/rules/only-hardhat-error.md) | Enforces that only HardhatError is thrown. | +| [only-hardhat-plugin-error](docs/rules/only-hardhat-plugin-error.md) | Enforces that only HardhatPluginError is thrown. | + + diff --git a/packages/eslint-plugin-hardhat-internal-rules/docs/rules/only-hardhat-error.md b/packages/eslint-plugin-hardhat-internal-rules/docs/rules/only-hardhat-error.md new file mode 100644 index 0000000000..c98450923e --- /dev/null +++ b/packages/eslint-plugin-hardhat-internal-rules/docs/rules/only-hardhat-error.md @@ -0,0 +1,29 @@ +# Enforces that only HardhatError is thrown (`@nomicfoundation/hardhat-internal-rules/only-hardhat-error`) + + + +Please describe the origin of the rule here. + +## Rule Details + +This rule aims to... + +Examples of **incorrect** code for this rule: + +```js +// fill me in +``` + +Examples of **correct** code for this rule: + +```js +// fill me in +``` + +## When Not To Use It + +Give a short description of when it would be appropriate to turn off this rule. + +## Further Reading + +If there are other links that describe the issue this rule addresses, please include them here in a bulleted list. diff --git a/packages/eslint-plugin-hardhat-internal-rules/docs/rules/only-hardhat-plugin-error.md b/packages/eslint-plugin-hardhat-internal-rules/docs/rules/only-hardhat-plugin-error.md new file mode 100644 index 0000000000..752959d160 --- /dev/null +++ b/packages/eslint-plugin-hardhat-internal-rules/docs/rules/only-hardhat-plugin-error.md @@ -0,0 +1,29 @@ +# Enforces that only HardhatPluginError is thrown (`@nomicfoundation/hardhat-internal-rules/only-hardhat-plugin-error`) + + + +Please describe the origin of the rule here. + +## Rule Details + +This rule aims to... + +Examples of **incorrect** code for this rule: + +```js +// fill me in +``` + +Examples of **correct** code for this rule: + +```js +// fill me in +``` + +## When Not To Use It + +Give a short description of when it would be appropriate to turn off this rule. + +## Further Reading + +If there are other links that describe the issue this rule addresses, please include them here in a bulleted list. diff --git a/packages/eslint-plugin-hardhat-internal-rules/lib/helpers/expression-checker.js b/packages/eslint-plugin-hardhat-internal-rules/lib/helpers/expression-checker.js new file mode 100644 index 0000000000..5e6cfe155d --- /dev/null +++ b/packages/eslint-plugin-hardhat-internal-rules/lib/helpers/expression-checker.js @@ -0,0 +1,29 @@ +function getExpressionClassName(expression, tc) { + const exceptionType = tc.getTypeAtLocation(expression); + + if (exceptionType.symbol === undefined) { + return "[UNKNOWN EXCEPTION TYPE]"; + } + + return exceptionType.symbol.getName(); +} + +function getExpressionClassNameAndBaseClass(expression, tc) { + const exceptionType = tc.getTypeAtLocation(expression); + + if (exceptionType.symbol === undefined) { + return ["[UNKNOWN EXCEPTION TYPE]"]; + } + + const className = exceptionType.symbol.getName(); + const baseClass = + exceptionType.resolvedBaseConstructorType?.symbol?.getName() ?? + "[UNKNOWN BASE CLASS]"; + + return [className, baseClass]; +} + +module.exports = { + getExpressionClassName, + getExpressionClassNameAndBaseClass, +}; diff --git a/packages/eslint-plugin-hardhat-internal-rules/lib/index.js b/packages/eslint-plugin-hardhat-internal-rules/lib/index.js new file mode 100644 index 0000000000..be55a5380e --- /dev/null +++ b/packages/eslint-plugin-hardhat-internal-rules/lib/index.js @@ -0,0 +1,18 @@ +/** + * @fileoverview This plugin contains internal linting rules used in the [Hardhat repository](https://github.com/nomiclabs/hardhat/). It's not meant to be used by other projects. + * @author Nomic Foundation + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const requireIndex = require("requireindex"); + +//------------------------------------------------------------------------------ +// Plugin Definition +//------------------------------------------------------------------------------ + +// import all rules in lib/rules +module.exports.rules = requireIndex(__dirname + "/rules"); diff --git a/packages/eslint-plugin-hardhat-internal-rules/lib/rules/only-hardhat-error.js b/packages/eslint-plugin-hardhat-internal-rules/lib/rules/only-hardhat-error.js new file mode 100644 index 0000000000..0e345895a5 --- /dev/null +++ b/packages/eslint-plugin-hardhat-internal-rules/lib/rules/only-hardhat-error.js @@ -0,0 +1,59 @@ +/** + * @fileoverview Enforces that only HardhatError is thrown. + * @author Nomic Foundation + */ +"use strict"; + +const { ESLintUtils } = require("@typescript-eslint/utils"); +const { getExpressionClassName } = require("../helpers/expression-checker"); + +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ + +/** @type {import('eslint').Rule.RuleModule} */ +module.exports = { + meta: { + type: "problem", + docs: { + description: "Enforces that only HardhatError is thrown.", + recommended: true, + url: null, // URL to the documentation page for this rule + }, + fixable: null, // Or `code` or `whitespace` + schema: [], // Add a schema if the rule has options + messages: { + ONLY_HARDHAT_ERROR: + "Only HardhatError must be thrown, {{exceptionName}} found.", + }, + }, + + create(context) { + const parserServices = ESLintUtils.getParserServices(context); + const checker = parserServices.program.getTypeChecker(); + + return { + ThrowStatement(node) { + const expression = parserServices.esTreeNodeToTSNodeMap.get( + node.argument + ); + + if (!isHardhatError(expression, checker)) { + const exceptionName = getExpressionClassName(expression, checker); + + context.report({ + node, + messageId: "ONLY_HARDHAT_ERROR", + data: { + exceptionName, + }, + }); + } + }, + }; + }, +}; + +function isHardhatError(expression, tc) { + return getExpressionClassName(expression, tc) === "HardhatError"; +} diff --git a/packages/eslint-plugin-hardhat-internal-rules/lib/rules/only-hardhat-plugin-error.js b/packages/eslint-plugin-hardhat-internal-rules/lib/rules/only-hardhat-plugin-error.js new file mode 100644 index 0000000000..ce0fdd594d --- /dev/null +++ b/packages/eslint-plugin-hardhat-internal-rules/lib/rules/only-hardhat-plugin-error.js @@ -0,0 +1,64 @@ +/** + * @fileoverview Enforces that only HardhatPluginError is thrown. + * @author Nomic Foundation + */ +"use strict"; + +const { ESLintUtils } = require("@typescript-eslint/utils"); +const { + getExpressionClassName, + getExpressionClassNameAndBaseClass, +} = require("../helpers/expression-checker"); + +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ + +/** @type {import('eslint').Rule.RuleModule} */ +module.exports = { + meta: { + type: "problem", + docs: { + description: "Enforces that only HardhatPluginError is thrown.", + recommended: false, + url: null, // URL to the documentation page for this rule + }, + fixable: null, // Or `code` or `whitespace` + schema: [], // Add a schema if the rule has options + messages: { + ONLY_HARDHAT_PLUGIN_ERROR: + "Only HardhatPluginError must be thrown, {{exceptionName}} found.", + }, + }, + + create(context) { + const parserServices = ESLintUtils.getParserServices(context); + const checker = parserServices.program.getTypeChecker(); + + return { + ThrowStatement(node) { + const expression = parserServices.esTreeNodeToTSNodeMap.get( + node.argument + ); + + if (!isHardhatPluginError(expression, checker)) { + const exceptionName = getExpressionClassName(expression, checker); + + context.report({ + node, + messageId: "ONLY_HARDHAT_PLUGIN_ERROR", + data: { + exceptionName, + }, + }); + } + }, + }; + }, +}; + +function isHardhatPluginError(expression, tc) { + return getExpressionClassNameAndBaseClass(expression, tc).includes( + "HardhatPluginError" + ); +} diff --git a/packages/eslint-plugin-hardhat-internal-rules/package.json b/packages/eslint-plugin-hardhat-internal-rules/package.json new file mode 100644 index 0000000000..2552c83c33 --- /dev/null +++ b/packages/eslint-plugin-hardhat-internal-rules/package.json @@ -0,0 +1,40 @@ +{ + "name": "@nomicfoundation/eslint-plugin-hardhat-internal-rules", + "version": "1.0.2", + "private": true, + "description": "This plugin contains internal linting rules used in the [Hardhat repository](https://github.com/nomiclabs/hardhat/). It's not meant to be used by other projects.", + "keywords": [ + "eslint", + "eslintplugin", + "eslint-plugin" + ], + "license": "MIT", + "author": "Nomic Foundation", + "exports": "./lib/index.js", + "main": "./lib/index.js", + "scripts": { + "lint": "pnpm run \"/^lint:.*/\"", + "lint:eslint-docs": "pnpm run update:eslint-docs --check", + "lint:js": "eslint .", + "update:eslint-docs": "eslint-doc-generator" + }, + "dependencies": { + "@typescript-eslint/utils": "^5.61.0", + "requireindex": "^1.2.0" + }, + "devDependencies": { + "eslint": "^8.44.0", + "eslint-config-prettier": "8.3.0", + "eslint-doc-generator": "^1.0.0", + "eslint-plugin-eslint-plugin": "^5.0.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "3.4.0", + "mocha": "^10.0.0" + }, + "peerDependencies": { + "eslint": "^8.44.0" + }, + "engines": { + "node": ">=16.0.0" + } +} diff --git a/packages/eslint-plugin-slow-imports/.eslintrc.js b/packages/eslint-plugin-slow-imports/.eslintrc.js new file mode 100644 index 0000000000..310b1105f0 --- /dev/null +++ b/packages/eslint-plugin-slow-imports/.eslintrc.js @@ -0,0 +1,23 @@ +"use strict"; + +module.exports = { + root: true, + extends: [ + "eslint:recommended", + "plugin:eslint-plugin/recommended", + "plugin:node/recommended", + "plugin:prettier/recommended", + ], + env: { + node: true, + }, + overrides: [ + { + files: ["tests/**/*.js"], + env: { mocha: true }, + }, + ], + parserOptions: { + ecmaVersion: 2020, + }, +}; diff --git a/packages/eslint-plugin-slow-imports/.gitignore b/packages/eslint-plugin-slow-imports/.gitignore new file mode 100644 index 0000000000..5ecde386f3 --- /dev/null +++ b/packages/eslint-plugin-slow-imports/.gitignore @@ -0,0 +1,113 @@ +# Logs +logs +*.log +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'pnpm pack' +*.tgz + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test diff --git a/packages/eslint-plugin-slow-imports/README.md b/packages/eslint-plugin-slow-imports/README.md new file mode 100644 index 0000000000..71d54b9c59 --- /dev/null +++ b/packages/eslint-plugin-slow-imports/README.md @@ -0,0 +1,58 @@ +# @nomicfoundation/eslint-plugin-slow-imports + +This plugin provides a rule for detecting slow imports of external dependencies. + +## Installation + +You'll first need to install [ESLint](https://eslint.org/): + +```sh +npm i eslint --save-dev +``` + +Next, install `@nomicfoundation/eslint-plugin-slow-imports`: + +```sh +npm install @nomicfoundation/eslint-plugin-slow-imports --save-dev +``` + +## Usage + +Add `slow-imports` to the plugins section of your `.eslintrc` configuration file: + +```json +{ + "plugins": ["slow-imports"] +} +``` + +Add `plugin:slow-imports/recommended` to the extends section of your `.eslintrc` configuration file: + +```json +{ + "extends": ["plugin:slow-imports/recommended"] +} +``` + +Then configure the rule according to your entry points and whitelisted dependencies. + +```json +{ + "rules": { + "slow-imports/no-top-level-external-import": [ + "error", + { + "ignoreModules": [] + } + ] + } +} +``` + + + +| Name | Description | +| :------------------------------------------------------------------------- | :---------------------------------------------------- | +| [no-top-level-external-import](docs/rules/no-top-level-external-import.md) | Enforce usage of dynamic imports for external modules | + + diff --git a/packages/eslint-plugin-slow-imports/docs/rules/no-top-level-external-import.md b/packages/eslint-plugin-slow-imports/docs/rules/no-top-level-external-import.md new file mode 100644 index 0000000000..0c82e7317a --- /dev/null +++ b/packages/eslint-plugin-slow-imports/docs/rules/no-top-level-external-import.md @@ -0,0 +1,32 @@ +# Enforce usage of dynamic imports for external modules (`@nomicfoundation/slow-imports/no-top-level-external-import`) + + + +Please describe the origin of the rule here. + +## Rule Details + +This rule aims to make the Hardhat CLI faster by prohibiting the usage of slow imports at the root level of the modules. Instead, slow dependencies should be dynamically loaded at the specific locations where they are required. This approach ensures faster loading times for Hardhat and its plugins. + +Examples of **incorrect** code for this rule: + +```js +import { foo } from "slow-module"; + +function bar() { + foo(); +} +``` + +Examples of **correct** code for this rule: + +```js +async function bar() { + const { foo } = await import("slow-module"); + foo(); +} +``` + +### Options + +- `ignoreModules`: optional. Modules to ignore, as an array of strings. Node built-in modules are ignored by default. diff --git a/packages/eslint-plugin-slow-imports/lib/config/typescript.js b/packages/eslint-plugin-slow-imports/lib/config/typescript.js new file mode 100644 index 0000000000..96e0c2ded0 --- /dev/null +++ b/packages/eslint-plugin-slow-imports/lib/config/typescript.js @@ -0,0 +1,23 @@ +/** + * Adds `.jsx`, `.ts` and `.tsx` as an extension, and enables JSX/TSX parsing. + */ + +// Omit `.d.ts` because 1) TypeScript compilation already confirms that +// types are resolved, and 2) it would mask an unresolved +// `.ts`/`.tsx`/`.js`/`.jsx` implementation. +const allExtensions = [".ts", ".tsx", ".js", ".jsx"]; + +module.exports = { + settings: { + "import/extensions": allExtensions, + "import/external-module-folders": ["node_modules", "node_modules/@types"], + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"], + }, + "import/resolver": { + node: { + extensions: allExtensions, + }, + }, + }, +}; diff --git a/packages/eslint-plugin-slow-imports/lib/helpers/module-type.js b/packages/eslint-plugin-slow-imports/lib/helpers/module-type.js new file mode 100644 index 0000000000..ef2b8ca8e6 --- /dev/null +++ b/packages/eslint-plugin-slow-imports/lib/helpers/module-type.js @@ -0,0 +1,15 @@ +module.exports = { + isExternalModule(name) { + return isModule(name) || isScoped(name); + }, +}; + +const moduleRegExp = /^\w/; +function isModule(name) { + return name && moduleRegExp.test(name); +} + +const scopedRegExp = /^@[^/]+\/?[^/]+/; +function isScoped(name) { + return name && scopedRegExp.test(name); +} diff --git a/packages/eslint-plugin-slow-imports/lib/helpers/module-visitor.js b/packages/eslint-plugin-slow-imports/lib/helpers/module-visitor.js new file mode 100644 index 0000000000..e041e20516 --- /dev/null +++ b/packages/eslint-plugin-slow-imports/lib/helpers/module-visitor.js @@ -0,0 +1,83 @@ +/** + * Returns an object of node visitors that will call + * 'visitor' with every discovered module path. + * + * Adapted from + * https://github.com/import-js/eslint-plugin-import/blob/88dd8153571373151c3c7b508c5944cb2bba1588/utils/moduleVisitor.js + * + * @param {Function(String)} visitor [description] + * @param {[type]} options [description] + * @return {object} + */ +function visitModules(visitor) { + // for import-y declarations + function visitImportDeclaration(node) { + // skip nodes that are not at the top level + if (node.parent && node.parent.type !== "Program") { + return; + } + + // skip type imports + // import type { Foo } (TS and Flow) + const isTypeImport = node.importKind === "type"; + // import { type Foo } (Flow) + const hasTypeSpecifiers = + node.specifiers > 0 && + node.specifiers.every(({ importKind }) => importKind === "type"); + if (isTypeImport || hasTypeSpecifiers) { + return; + } + + visitor(node.source); + } + + // for export declarations + function visitExportDeclaration(node) { + // skip nodes that are not at the top level + if (node.parent && node.parent.type !== "Program") { + return; + } + if (node.source === null || node.source.type !== "Literal") { + return; + } + + visitor(node.source); + } + + // for CommonJS `require` calls + // adapted from @mctep: https://git.io/v4rAu + function visitCallExpression(call) { + if (call.callee.type !== "Identifier") { + return; + } + if (call.arguments.length !== 1) { + return; + } + + const modulePath = call.arguments[0]; + if (modulePath.type !== "Literal") { + return; + } + if (typeof modulePath.value !== "string") { + return; + } + + visitor(modulePath); + } + + const visitors = { + ImportDeclaration: visitImportDeclaration, + 'Program > VariableDeclaration > VariableDeclarator > CallExpression[callee.name="require"]': + visitCallExpression, + 'Program > ExpressionStatement > CallExpression[callee.name="require"]': + visitCallExpression, + ExportNamedDeclaration: visitExportDeclaration, + ExportAllDeclaration: visitExportDeclaration, + }; + + return visitors; +} + +module.exports = { + visitModules, +}; diff --git a/packages/eslint-plugin-slow-imports/lib/index.js b/packages/eslint-plugin-slow-imports/lib/index.js new file mode 100644 index 0000000000..f71bbdbe98 --- /dev/null +++ b/packages/eslint-plugin-slow-imports/lib/index.js @@ -0,0 +1,22 @@ +/** + * @fileoverview This plugin provides a rule for detecting slow imports of external dependencies. + * @author Nomic Foundation + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const requireIndex = require("requireindex"); + +//------------------------------------------------------------------------------ +// Plugin Definition +//------------------------------------------------------------------------------ + +// import all rules in lib/rules +module.exports.rules = requireIndex(__dirname + "/rules"); + +module.exports.configs = { + recommended: require("./config/typescript"), +}; diff --git a/packages/eslint-plugin-slow-imports/lib/rules/no-top-level-external-import.js b/packages/eslint-plugin-slow-imports/lib/rules/no-top-level-external-import.js new file mode 100644 index 0000000000..a0ad109393 --- /dev/null +++ b/packages/eslint-plugin-slow-imports/lib/rules/no-top-level-external-import.js @@ -0,0 +1,106 @@ +/** + * @fileoverview Enforce usage of dynamic imports for external modules + * @author Nomic Foundation + */ +"use strict"; +const fs = require("node:fs"); +const { isBuiltin } = require("node:module"); +const resolve = require("eslint-module-utils/resolve").default; +const parse = require("eslint-module-utils/parse").default; +const visit = require("eslint-module-utils/visit").default; +const { visitModules } = require("../helpers/module-visitor"); +const { isExternalModule } = require("../helpers/module-type"); + +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ + +const traversed = new Set(); + +/** @type {import('eslint').Rule.RuleModule} */ +module.exports = { + meta: { + type: `problem`, // `problem`, `suggestion`, or `layout` + docs: { + description: "Enforce usage of dynamic imports for external modules", + recommended: true, + url: null, // URL to the documentation page for this rule + }, + fixable: null, // Or `code` or `whitespace` + schema: [ + { + type: "object", + properties: { + ignoreModules: { + type: "array", + minItems: 0, + items: { type: "string" }, + uniqueItems: true, + default: [], + }, + }, + additionalProperties: false, + }, + ], + messages: { + ENFORCE_DYNAMIC_IMPORT: + "This import transitively imports the slow dependency '{{dependency}}' in file '{{filename}}' at line {{line}}", + }, + }, + + create(context) { + const options = context.options[0] || {}; + const ignoreModules = new Set(options.ignoreModules); + + function visitor(filename, originalNode, node) { + const modulePath = node.value; + if (ignoreModules.has(modulePath) || isBuiltin(modulePath)) { + return {}; + } + + function detectTopLevelExternalDependency(path) { + // get the contents + const content = fs.readFileSync(path, { encoding: "utf8" }); + + // parse ast + let ast, visitorKeys; + try { + const result = parse(path, content, context); + ast = result.ast; + visitorKeys = result.visitorKeys; + } catch (err) { + // can't continue + } + + visit( + ast, + visitorKeys, + visitModules((node) => visitor(path, originalNode, node)) + ); + } + + if (!isExternalModule(modulePath)) { + const absoluteModulePath = resolve(modulePath, context); + + if (!absoluteModulePath || traversed.has(absoluteModulePath)) { + return {}; + } + + traversed.add(absoluteModulePath); + detectTopLevelExternalDependency(absoluteModulePath); + } else { + context.report({ + node: originalNode, + messageId: "ENFORCE_DYNAMIC_IMPORT", + data: { + dependency: modulePath, + filename, + line: node.loc.start.line, + }, + }); + } + } + + return visitModules((node) => visitor(context.filename, node, node)); + }, +}; diff --git a/packages/eslint-plugin-slow-imports/package.json b/packages/eslint-plugin-slow-imports/package.json new file mode 100644 index 0000000000..a259c06e61 --- /dev/null +++ b/packages/eslint-plugin-slow-imports/package.json @@ -0,0 +1,37 @@ +{ + "name": "@nomicfoundation/eslint-plugin-slow-imports", + "version": "1.0.0", + "private": true, + "description": "This plugin provides a rule for detecting slow imports of external dependencies.", + "keywords": [ + "eslint", + "eslintplugin", + "eslint-plugin" + ], + "license": "MIT", + "author": "Nomic Foundation", + "exports": "./lib/index.js", + "main": "./lib/index.js", + "scripts": { + "lint": "eslint .", + "update:eslint-docs": "eslint-doc-generator" + }, + "dependencies": { + "eslint-module-utils": "^2.8.0", + "requireindex": "^1.2.0" + }, + "devDependencies": { + "eslint": "^8.44.0", + "eslint-config-prettier": "8.3.0", + "eslint-doc-generator": "^1.0.0", + "eslint-plugin-eslint-plugin": "^5.0.0", + "eslint-plugin-node": "^11.1.0", + "mocha": "^10.0.0" + }, + "peerDependencies": { + "eslint": "^8.44.0" + }, + "engines": { + "node": ">=16.0.0" + } +} diff --git a/packages/hardhat-chai-matchers/.eslintrc.js b/packages/hardhat-chai-matchers/.eslintrc.js index 44ed8ed6d5..fb4faa04b9 100644 --- a/packages/hardhat-chai-matchers/.eslintrc.js +++ b/packages/hardhat-chai-matchers/.eslintrc.js @@ -1,7 +1,31 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { project: `${__dirname}/src/tsconfig.json`, sourceType: "module", }, + rules: { + "@typescript-eslint/no-non-null-assertion": "error", + }, + overrides: [ + { + files: ["src/index.ts"], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [ + ...slowImportsCommonIgnoredModules, + "chai", + "chai-as-promised", + ], + }, + ], + }, + }, + ], }; diff --git a/packages/hardhat-chai-matchers/.gitignore b/packages/hardhat-chai-matchers/.gitignore index 80110bdc12..8707b8ac84 100644 --- a/packages/hardhat-chai-matchers/.gitignore +++ b/packages/hardhat-chai-matchers/.gitignore @@ -21,10 +21,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -63,21 +59,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-chai-matchers/.prettierignore b/packages/hardhat-chai-matchers/.prettierignore index c66ddcfc8a..2ef4541cbc 100644 --- a/packages/hardhat-chai-matchers/.prettierignore +++ b/packages/hardhat-chai-matchers/.prettierignore @@ -10,3 +10,4 @@ /test/fixture-projects/**/artifacts /test/fixture-projects/**/cache CHANGELOG.md +!.eslintrc.js diff --git a/packages/hardhat-chai-matchers/CHANGELOG.md b/packages/hardhat-chai-matchers/CHANGELOG.md index 5da3f4d0ba..5f7e9fda78 100644 --- a/packages/hardhat-chai-matchers/CHANGELOG.md +++ b/packages/hardhat-chai-matchers/CHANGELOG.md @@ -1,5 +1,33 @@ # @nomicfoundation/hardhat-chai-matchers +## 2.0.3 + +### Patch Changes + +- dff8302aa: Added support for `Addressable` objects in `.withArgs` and `.equals` (thanks @Amxx!) + +## 2.0.2 + +### Patch Changes + +- f324b3a33: Forbid chaining incompatible chai matchers + +## 2.0.1 + +### Patch Changes + +- 70c2ccf12: Removed an unnecessary dependency + +## 2.0.0 + +### Major Changes + +- 523235b83: Added support for ethers v6 + +### Patch Changes + +- 06c4797a7: Fixed a problem when `.withArgs` was used with arrays with different length + ## 1.0.6 ### Patch Changes diff --git a/packages/hardhat-chai-matchers/LICENSE b/packages/hardhat-chai-matchers/LICENSE index 3b8858c555..3b7e8c7eab 100644 --- a/packages/hardhat-chai-matchers/LICENSE +++ b/packages/hardhat-chai-matchers/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-chai-matchers/README.md b/packages/hardhat-chai-matchers/README.md index 2cbf130d8d..4a3d2d9c13 100644 --- a/packages/hardhat-chai-matchers/README.md +++ b/packages/hardhat-chai-matchers/README.md @@ -17,13 +17,13 @@ npm install --save-dev @nomicfoundation/hardhat-chai-matchers If you are using an older version of npm, you'll also need to install all the packages used by the plugin. ```bash -npm install --save-dev @nomicfoundation/hardhat-chai-matchers chai @nomiclabs/hardhat-ethers ethers +npm install --save-dev @nomicfoundation/hardhat-chai-matchers chai @nomicfoundation/hardhat-ethers ethers ``` That's also the case if you are using yarn: ```bash -yarn add --dev @nomicfoundation/hardhat-chai-matchers chai @nomiclabs/hardhat-ethers ethers +yarn add --dev @nomicfoundation/hardhat-chai-matchers chai @nomicfoundation/hardhat-ethers ethers ``` ### Usage @@ -47,3 +47,38 @@ await expect(token.transfer(recipient, 1000)) .to.emit(token, "Transfer") .withArgs(owner, recipient, 1000); ``` + +### Known issues + +#### Chaining Async Matchers + +Currently, the following matchers do not support chaining: + +- `reverted` +- `revertedWith` +- `revertedWithCustomError` +- `revertedWithoutReason` +- `revertedWithPanic` +- `changeEtherBalance` +- `changeEtherBalances` +- `changeTokenBalance` +- `changeTokenBalances` +- `emit` (with the only exception of chaining multiple `emit` matchers) + +Which means you can't do: + +```js +await expect(contract.f(...)) + .to.changeEtherBalance(...) + .and.to.changeTokenBalance(...) +``` + +To work around this limitation, write separate assertions for each matcher: + +```js +const tx = contract.f(...); +await expect(tx).to.changeEtherBalance(...) +await expect(tx).to.changeTokenBalance(...) +``` + +If you are interested in seeing an implementation of chaining for async matchers, please visit the GitHub issue [#4235](https://github.com/NomicFoundation/hardhat/issues/4235) and leave an upvote or comment. diff --git a/packages/hardhat-chai-matchers/package.json b/packages/hardhat-chai-matchers/package.json index a3732936d3..e84471bfd6 100644 --- a/packages/hardhat-chai-matchers/package.json +++ b/packages/hardhat-chai-matchers/package.json @@ -1,6 +1,6 @@ { "name": "@nomicfoundation/hardhat-chai-matchers", - "version": "1.0.6", + "version": "2.0.3", "description": "Hardhat utils for testing", "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-chai-matchers", "repository": "github:nomicfoundation/hardhat", @@ -15,14 +15,15 @@ "testing" ], "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", - "test": "mocha --recursive \"test/**/*.ts\" --exit --reporter dot", - "test:ci": "yarn test && node scripts/check-subpath-exports.js", + "pretest": "cd ../.. && pnpm build", + "test": "mocha --recursive \"test/**/*.ts\" --exit", + "test:ci": "pnpm test && node scripts/check-subpath-exports.js", "build": "tsc --build .", - "prepublishOnly": "yarn build", + "prepublishOnly": "pnpm build", "clean": "rimraf dist internal types *.{d.ts,js}{,.map} build-test tsconfig.tsbuildinfo" }, "files": [ @@ -37,38 +38,40 @@ "README.md" ], "devDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.0", + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", + "@nomicfoundation/hardhat-chai-matchers": "workspace:*", + "@nomicfoundation/hardhat-ethers": "workspace:^3.0.0", "@types/bn.js": "^5.1.0", "@types/chai": "^4.2.0", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@types/node": "^16.0.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "bignumber.js": "^9.0.2", "bn.js": "^5.1.0", "chai": "^4.2.0", - "eslint": "^7.29.0", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", - "ethers": "^5.0.0", + "ethers": "^6.1.0", "get-port": "^5.1.1", - "hardhat": "^2.9.4", + "hardhat": "workspace:^2.9.4", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", "ts-node": "^10.8.0", - "typescript": "~4.7.4" + "typescript": "~5.0.0" }, "peerDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", "chai": "^4.2.0", - "ethers": "^5.0.0", + "ethers": "^6.1.0", "hardhat": "^2.9.4" }, "dependencies": { - "@ethersproject/abi": "^5.1.2", "@types/chai-as-promised": "^7.1.3", "chai-as-promised": "^7.1.1", "deep-eql": "^4.0.1", diff --git a/packages/hardhat-chai-matchers/src/index.ts b/packages/hardhat-chai-matchers/src/index.ts index 658ffa8acd..d5fa986711 100644 --- a/packages/hardhat-chai-matchers/src/index.ts +++ b/packages/hardhat-chai-matchers/src/index.ts @@ -1,4 +1,4 @@ -import "@nomiclabs/hardhat-ethers"; +import "@nomicfoundation/hardhat-ethers"; import "./types"; diff --git a/packages/hardhat-chai-matchers/src/internal/addressable.ts b/packages/hardhat-chai-matchers/src/internal/addressable.ts new file mode 100644 index 0000000000..1627976ffd --- /dev/null +++ b/packages/hardhat-chai-matchers/src/internal/addressable.ts @@ -0,0 +1,71 @@ +import { isAddress, isAddressable } from "ethers"; + +export function supportAddressable( + Assertion: Chai.AssertionStatic, + chaiUtils: Chai.ChaiUtils +) { + const equalsFunction = override("eq", "equal", "not equal", chaiUtils); + Assertion.overwriteMethod("equals", equalsFunction); + Assertion.overwriteMethod("equal", equalsFunction); + Assertion.overwriteMethod("eq", equalsFunction); +} + +type Methods = "eq"; + +function override( + method: Methods, + name: string, + negativeName: string, + chaiUtils: Chai.ChaiUtils +) { + return (_super: (...args: any[]) => any) => + overwriteAddressableFunction(method, name, negativeName, _super, chaiUtils); +} + +// ethers's Addressable have a .getAddress() that returns a Promise. We don't want to deal with async here, +// so we are looking for a sync way of getting the address. If an address was recovered, it is returned as a string, +// otherwise undefined is returned. +function tryGetAddressSync(value: any): string | undefined { + if (isAddress(value)) { + return value; + } else if (isAddressable(value)) { + return tryGetAddressSync((value as any).address ?? (value as any).target); + } else { + return undefined; + } +} + +function overwriteAddressableFunction( + functionName: Methods, + readableName: string, + readableNegativeName: string, + _super: (...args: any[]) => any, + chaiUtils: Chai.ChaiUtils +) { + return function (this: Chai.AssertionStatic, ...args: any[]) { + const [actualArg, message] = args; + const expectedFlag = chaiUtils.flag(this, "object"); + + if (message !== undefined) { + chaiUtils.flag(this, "message", message); + } + + const actual = tryGetAddressSync(actualArg); + const expected = tryGetAddressSync(expectedFlag); + if ( + functionName === "eq" && + expected !== undefined && + actual !== undefined + ) { + this.assert( + expected === actual, + `expected '${expected}' to ${readableName} '${actual}'.`, + `expected '${expected}' to ${readableNegativeName} '${actual}'.`, + actual.toString(), + expected.toString() + ); + } else { + _super.apply(this, args); + } + }; +} diff --git a/packages/hardhat-chai-matchers/src/internal/bigNumber.ts b/packages/hardhat-chai-matchers/src/internal/bigNumber.ts index acdba4877a..aaa29e721e 100644 --- a/packages/hardhat-chai-matchers/src/internal/bigNumber.ts +++ b/packages/hardhat-chai-matchers/src/internal/bigNumber.ts @@ -8,29 +8,29 @@ import util from "util"; export function supportBigNumber( Assertion: Chai.AssertionStatic, - utils: Chai.ChaiUtils + chaiUtils: Chai.ChaiUtils ) { - const equalsFunction = override("eq", "equal", "not equal", utils); + const equalsFunction = override("eq", "equal", "not equal", chaiUtils); Assertion.overwriteMethod("equals", equalsFunction); Assertion.overwriteMethod("equal", equalsFunction); Assertion.overwriteMethod("eq", equalsFunction); - const gtFunction = override("gt", "be above", "be at most", utils); + const gtFunction = override("gt", "be above", "be at most", chaiUtils); Assertion.overwriteMethod("above", gtFunction); Assertion.overwriteMethod("gt", gtFunction); Assertion.overwriteMethod("greaterThan", gtFunction); - const ltFunction = override("lt", "be below", "be at least", utils); + const ltFunction = override("lt", "be below", "be at least", chaiUtils); Assertion.overwriteMethod("below", ltFunction); Assertion.overwriteMethod("lt", ltFunction); Assertion.overwriteMethod("lessThan", ltFunction); - const gteFunction = override("gte", "be at least", "be below", utils); + const gteFunction = override("gte", "be at least", "be below", chaiUtils); Assertion.overwriteMethod("least", gteFunction); Assertion.overwriteMethod("gte", gteFunction); Assertion.overwriteMethod("greaterThanOrEqual", gteFunction); - const lteFunction = override("lte", "be at most", "be above", utils); + const lteFunction = override("lte", "be at most", "be above", chaiUtils); Assertion.overwriteMethod("most", lteFunction); Assertion.overwriteMethod("lte", lteFunction); Assertion.overwriteMethod("lessThanOrEqual", lteFunction); @@ -38,10 +38,10 @@ export function supportBigNumber( Assertion.overwriteChainableMethod(...createLengthOverride("length")); Assertion.overwriteChainableMethod(...createLengthOverride("lengthOf")); - Assertion.overwriteMethod("within", overrideWithin(utils)); + Assertion.overwriteMethod("within", overrideWithin(chaiUtils)); - Assertion.overwriteMethod("closeTo", overrideCloseTo(utils)); - Assertion.overwriteMethod("approximately", overrideCloseTo(utils)); + Assertion.overwriteMethod("closeTo", overrideCloseTo(chaiUtils)); + Assertion.overwriteMethod("approximately", overrideCloseTo(chaiUtils)); } function createLengthOverride( @@ -83,10 +83,10 @@ function override( method: Methods, name: string, negativeName: string, - utils: Chai.ChaiUtils + chaiUtils: Chai.ChaiUtils ) { return (_super: (...args: any[]) => any) => - overwriteBigNumberFunction(method, name, negativeName, _super, utils); + overwriteBigNumberFunction(method, name, negativeName, _super, chaiUtils); } function overwriteBigNumberFunction( @@ -195,9 +195,9 @@ function overwriteBigNumberFunction( }; } -function overrideWithin(utils: Chai.ChaiUtils) { +function overrideWithin(chaiUtils: Chai.ChaiUtils) { return (_super: (...args: any[]) => any) => - overwriteBigNumberWithin(_super, utils); + overwriteBigNumberWithin(_super, chaiUtils); } function overwriteBigNumberWithin( @@ -228,9 +228,9 @@ function overwriteBigNumberWithin( }; } -function overrideCloseTo(utils: Chai.ChaiUtils) { +function overrideCloseTo(chaiUtils: Chai.ChaiUtils) { return (_super: (...args: any[]) => any) => - overwriteBigNumberCloseTo(_super, utils); + overwriteBigNumberCloseTo(_super, chaiUtils); } function overwriteBigNumberCloseTo( diff --git a/packages/hardhat-chai-matchers/src/internal/changeEtherBalance.ts b/packages/hardhat-chai-matchers/src/internal/changeEtherBalance.ts index 50def56b7f..fc95e08e5f 100644 --- a/packages/hardhat-chai-matchers/src/internal/changeEtherBalance.ts +++ b/packages/hardhat-chai-matchers/src/internal/changeEtherBalance.ts @@ -1,33 +1,50 @@ -import type { BigNumberish, providers } from "ethers"; +import type { + Addressable, + BigNumberish, + TransactionResponse, + default as EthersT, +} from "ethers"; +import type { BalanceChangeOptions } from "./misc/balance"; import { buildAssert } from "../utils"; import { ensure } from "./calledOnContract/utils"; -import { Account, getAddressOf } from "./misc/account"; -import { BalanceChangeOptions } from "./misc/balance"; +import { getAddressOf } from "./misc/account"; +import { CHANGE_ETHER_BALANCE_MATCHER } from "./constants"; +import { assertIsNotNull, preventAsyncMatcherChaining } from "./utils"; -export function supportChangeEtherBalance(Assertion: Chai.AssertionStatic) { +export function supportChangeEtherBalance( + Assertion: Chai.AssertionStatic, + chaiUtils: Chai.ChaiUtils +) { Assertion.addMethod( - "changeEtherBalance", + CHANGE_ETHER_BALANCE_MATCHER, function ( this: any, - account: Account | string, + account: Addressable | string, balanceChange: BigNumberish, options?: BalanceChangeOptions ) { - const { BigNumber } = require("ethers"); - + const { toBigInt } = require("ethers") as typeof EthersT; // capture negated flag before async code executes; see buildAssert's jsdoc const negated = this.__flags.negate; const subject = this._obj; + preventAsyncMatcherChaining( + this, + CHANGE_ETHER_BALANCE_MATCHER, + chaiUtils + ); + const checkBalanceChange = ([actualChange, address]: [ - typeof BigNumber, + bigint, string ]) => { const assert = buildAssert(negated, checkBalanceChange); + const expectedChange = toBigInt(balanceChange); + assert( - actualChange.eq(BigNumber.from(balanceChange)), + actualChange === expectedChange, `Expected the ether balance of "${address}" to change by ${balanceChange.toString()} wei, but it changed by ${actualChange.toString()} wei`, `Expected the ether balance of "${address}" NOT to change by ${balanceChange.toString()} wei, but it did` ); @@ -47,19 +64,16 @@ export function supportChangeEtherBalance(Assertion: Chai.AssertionStatic) { export async function getBalanceChange( transaction: - | providers.TransactionResponse - | Promise - | (() => - | Promise - | providers.TransactionResponse), - account: Account | string, + | TransactionResponse + | Promise + | (() => Promise | TransactionResponse), + account: Addressable | string, options?: BalanceChangeOptions -) { - const { BigNumber } = await import("ethers"); +): Promise { const hre = await import("hardhat"); const provider = hre.network.provider; - let txResponse: providers.TransactionResponse; + let txResponse: TransactionResponse; if (typeof transaction === "function") { txResponse = await transaction(); @@ -68,6 +82,7 @@ export async function getBalanceChange( } const txReceipt = await txResponse.wait(); + assertIsNotNull(txReceipt, "txReceipt"); const txBlockNumber = txReceipt.blockNumber; const block = await provider.send("eth_getBlockByHash", [ @@ -83,23 +98,26 @@ export async function getBalanceChange( const address = await getAddressOf(account); - const balanceAfter = await provider.send("eth_getBalance", [ + const balanceAfterHex = await provider.send("eth_getBalance", [ address, `0x${txBlockNumber.toString(16)}`, ]); - const balanceBefore = await provider.send("eth_getBalance", [ + const balanceBeforeHex = await provider.send("eth_getBalance", [ address, `0x${(txBlockNumber - 1).toString(16)}`, ]); + const balanceAfter = BigInt(balanceAfterHex); + const balanceBefore = BigInt(balanceBeforeHex); + if (options?.includeFee !== true && address === txResponse.from) { - const gasPrice = txReceipt.effectiveGasPrice ?? txResponse.gasPrice; + const gasPrice = txReceipt.gasPrice; const gasUsed = txReceipt.gasUsed; - const txFee = gasPrice.mul(gasUsed); + const txFee = gasPrice * gasUsed; - return BigNumber.from(balanceAfter).add(txFee).sub(balanceBefore); + return balanceAfter + txFee - balanceBefore; } else { - return BigNumber.from(balanceAfter).sub(balanceBefore); + return balanceAfter - balanceBefore; } } diff --git a/packages/hardhat-chai-matchers/src/internal/changeEtherBalances.ts b/packages/hardhat-chai-matchers/src/internal/changeEtherBalances.ts index e2be028cfd..1636ae8756 100644 --- a/packages/hardhat-chai-matchers/src/internal/changeEtherBalances.ts +++ b/packages/hardhat-chai-matchers/src/internal/changeEtherBalances.ts @@ -1,25 +1,28 @@ -import type { BigNumber, BigNumberish, providers } from "ethers"; +import type EthersT from "ethers"; +import type { Addressable, BigNumberish, TransactionResponse } from "ethers"; +import type { BalanceChangeOptions } from "./misc/balance"; + import ordinal from "ordinal"; import { buildAssert } from "../utils"; -import { getAddressOf, Account } from "./misc/account"; -import { - BalanceChangeOptions, - getAddresses, - getBalances, -} from "./misc/balance"; - -export function supportChangeEtherBalances(Assertion: Chai.AssertionStatic) { +import { getAddressOf } from "./misc/account"; +import { getAddresses, getBalances } from "./misc/balance"; +import { CHANGE_ETHER_BALANCES_MATCHER } from "./constants"; +import { assertIsNotNull, preventAsyncMatcherChaining } from "./utils"; + +export function supportChangeEtherBalances( + Assertion: Chai.AssertionStatic, + chaiUtils: Chai.ChaiUtils +) { Assertion.addMethod( - "changeEtherBalances", + CHANGE_ETHER_BALANCES_MATCHER, function ( this: any, - accounts: Array, + accounts: Array, balanceChanges: BigNumberish[], options?: BalanceChangeOptions ) { - const { BigNumber } = require("ethers"); - + const { toBigInt } = require("ethers") as typeof EthersT; // capture negated flag before async code executes; see buildAssert's jsdoc const negated = this.__flags.negate; @@ -28,20 +31,26 @@ export function supportChangeEtherBalances(Assertion: Chai.AssertionStatic) { subject = subject(); } + preventAsyncMatcherChaining( + this, + CHANGE_ETHER_BALANCES_MATCHER, + chaiUtils + ); + const checkBalanceChanges = ([actualChanges, accountAddresses]: [ - Array, + bigint[], string[] ]) => { const assert = buildAssert(negated, checkBalanceChanges); assert( - actualChanges.every((change, ind) => - change.eq(BigNumber.from(balanceChanges[ind])) + actualChanges.every( + (change, ind) => change === toBigInt(balanceChanges[ind]) ), () => { const lines: string[] = []; - actualChanges.forEach((change: BigNumber, i) => { - if (!change.eq(BigNumber.from(balanceChanges[i]))) { + actualChanges.forEach((change: bigint, i) => { + if (change !== toBigInt(balanceChanges[i])) { lines.push( `Expected the ether balance of ${ accountAddresses[i] @@ -57,8 +66,8 @@ export function supportChangeEtherBalances(Assertion: Chai.AssertionStatic) { }, () => { const lines: string[] = []; - actualChanges.forEach((change: BigNumber, i) => { - if (change.eq(BigNumber.from(balanceChanges[i]))) { + actualChanges.forEach((change: bigint, i) => { + if (change === toBigInt(balanceChanges[i])) { lines.push( `Expected the ether balance of ${ accountAddresses[i] @@ -88,15 +97,14 @@ export function supportChangeEtherBalances(Assertion: Chai.AssertionStatic) { } export async function getBalanceChanges( - transaction: - | providers.TransactionResponse - | Promise, - accounts: Array, + transaction: TransactionResponse | Promise, + accounts: Array, options?: BalanceChangeOptions -) { +): Promise { const txResponse = await transaction; const txReceipt = await txResponse.wait(); + assertIsNotNull(txReceipt, "txReceipt"); const txBlockNumber = txReceipt.blockNumber; const balancesAfter = await getBalances(accounts, txBlockNumber); @@ -104,16 +112,16 @@ export async function getBalanceChanges( const txFees = await getTxFees(accounts, txResponse, options); - return balancesAfter.map((balance, ind) => - balance.add(txFees[ind]).sub(balancesBefore[ind]) + return balancesAfter.map( + (balance, ind) => balance + txFees[ind] - balancesBefore[ind] ); } async function getTxFees( - accounts: Array, - txResponse: providers.TransactionResponse, + accounts: Array, + txResponse: TransactionResponse, options?: BalanceChangeOptions -) { +): Promise { return Promise.all( accounts.map(async (account) => { if ( @@ -121,14 +129,15 @@ async function getTxFees( (await getAddressOf(account)) === txResponse.from ) { const txReceipt = await txResponse.wait(); - const gasPrice = txReceipt.effectiveGasPrice ?? txResponse.gasPrice; + assertIsNotNull(txReceipt, "txReceipt"); + const gasPrice = txReceipt.gasPrice ?? txResponse.gasPrice; const gasUsed = txReceipt.gasUsed; - const txFee = gasPrice.mul(gasUsed); + const txFee = gasPrice * gasUsed; return txFee; } - return 0; + return 0n; }) ); } diff --git a/packages/hardhat-chai-matchers/src/internal/changeTokenBalance.ts b/packages/hardhat-chai-matchers/src/internal/changeTokenBalance.ts index 7def041206..9c5a72fcb5 100644 --- a/packages/hardhat-chai-matchers/src/internal/changeTokenBalance.ts +++ b/packages/hardhat-chai-matchers/src/internal/changeTokenBalance.ts @@ -1,22 +1,44 @@ import type EthersT from "ethers"; +import type { + Addressable, + BaseContract, + BaseContractMethod, + BigNumberish, + ContractTransactionResponse, +} from "ethers"; import { buildAssert } from "../utils"; import { ensure } from "./calledOnContract/utils"; -import { Account, getAddressOf } from "./misc/account"; - -type TransactionResponse = EthersT.providers.TransactionResponse; - -interface Token extends EthersT.Contract { - balanceOf(address: string, overrides?: any): Promise; -} - -export function supportChangeTokenBalance(Assertion: Chai.AssertionStatic) { +import { getAddressOf } from "./misc/account"; +import { + CHANGE_TOKEN_BALANCES_MATCHER, + CHANGE_TOKEN_BALANCE_MATCHER, +} from "./constants"; +import { assertIsNotNull, preventAsyncMatcherChaining } from "./utils"; + +type TransactionResponse = EthersT.TransactionResponse; + +export type Token = BaseContract & { + balanceOf: BaseContractMethod<[string], bigint, bigint>; + name: BaseContractMethod<[], string, string>; + transfer: BaseContractMethod< + [string, BigNumberish], + boolean, + ContractTransactionResponse + >; + symbol: BaseContractMethod<[], string, string>; +}; + +export function supportChangeTokenBalance( + Assertion: Chai.AssertionStatic, + chaiUtils: Chai.ChaiUtils +) { Assertion.addMethod( - "changeTokenBalance", + CHANGE_TOKEN_BALANCE_MATCHER, function ( this: any, token: Token, - account: Account | string, + account: Addressable | string, balanceChange: EthersT.BigNumberish ) { const ethers = require("ethers") as typeof EthersT; @@ -29,17 +51,23 @@ export function supportChangeTokenBalance(Assertion: Chai.AssertionStatic) { subject = subject(); } - checkToken(token, "changeTokenBalance"); + preventAsyncMatcherChaining( + this, + CHANGE_TOKEN_BALANCE_MATCHER, + chaiUtils + ); + + checkToken(token, CHANGE_TOKEN_BALANCE_MATCHER); const checkBalanceChange = ([actualChange, address, tokenDescription]: [ - EthersT.BigNumber, + bigint, string, string ]) => { const assert = buildAssert(negated, checkBalanceChange); assert( - actualChange.eq(ethers.BigNumber.from(balanceChange)), + actualChange === ethers.toBigInt(balanceChange), `Expected the balance of ${tokenDescription} tokens for "${address}" to change by ${balanceChange.toString()}, but it changed by ${actualChange.toString()}`, `Expected the balance of ${tokenDescription} tokens for "${address}" NOT to change by ${balanceChange.toString()}, but it did` ); @@ -59,11 +87,11 @@ export function supportChangeTokenBalance(Assertion: Chai.AssertionStatic) { ); Assertion.addMethod( - "changeTokenBalances", + CHANGE_TOKEN_BALANCES_MATCHER, function ( this: any, token: Token, - accounts: Array, + accounts: Array, balanceChanges: EthersT.BigNumberish[] ) { const ethers = require("ethers") as typeof EthersT; @@ -76,13 +104,13 @@ export function supportChangeTokenBalance(Assertion: Chai.AssertionStatic) { subject = subject(); } - checkToken(token, "changeTokenBalances"); + preventAsyncMatcherChaining( + this, + CHANGE_TOKEN_BALANCES_MATCHER, + chaiUtils + ); - if (accounts.length !== balanceChanges.length) { - throw new Error( - `The number of accounts (${accounts.length}) is different than the number of expected balance changes (${balanceChanges.length})` - ); - } + validateInput(this._obj, token, accounts, balanceChanges); const balanceChangesPromise = Promise.all( accounts.map((account) => getBalanceChange(subject, token, account)) @@ -93,12 +121,12 @@ export function supportChangeTokenBalance(Assertion: Chai.AssertionStatic) { actualChanges, addresses, tokenDescription, - ]: [EthersT.BigNumber[], string[], string]) => { + ]: [bigint[], string[], string]) => { const assert = buildAssert(negated, checkBalanceChanges); assert( - actualChanges.every((change, ind) => - change.eq(ethers.BigNumber.from(balanceChanges[ind])) + actualChanges.every( + (change, ind) => change === ethers.toBigInt(balanceChanges[ind]) ), `Expected the balances of ${tokenDescription} tokens for ${ addresses as any @@ -127,12 +155,34 @@ export function supportChangeTokenBalance(Assertion: Chai.AssertionStatic) { ); } +function validateInput( + obj: any, + token: Token, + accounts: Array, + balanceChanges: EthersT.BigNumberish[] +) { + try { + checkToken(token, CHANGE_TOKEN_BALANCES_MATCHER); + + if (accounts.length !== balanceChanges.length) { + throw new Error( + `The number of accounts (${accounts.length}) is different than the number of expected balance changes (${balanceChanges.length})` + ); + } + } catch (e) { + // if the input validation fails, we discard the subject since it could + // potentially be a rejected promise + Promise.resolve(obj).catch(() => {}); + throw e; + } +} + function checkToken(token: unknown, method: string) { - if (typeof token !== "object" || token === null || !("functions" in token)) { + if (typeof token !== "object" || token === null || !("interface" in token)) { throw new Error( `The first argument of ${method} must be the contract instance of the token` ); - } else if ((token as any).functions.balanceOf === undefined) { + } else if ((token as any).interface.getFunction("balanceOf") === null) { throw new Error("The given contract instance is not an ERC20 token"); } } @@ -140,7 +190,7 @@ function checkToken(token: unknown, method: string) { export async function getBalanceChange( transaction: TransactionResponse | Promise, token: Token, - account: Account | string + account: Addressable | string ) { const ethers = require("ethers") as typeof EthersT; const hre = await import("hardhat"); @@ -149,6 +199,7 @@ export async function getBalanceChange( const txResponse = await transaction; const txReceipt = await txResponse.wait(); + assertIsNotNull(txReceipt, "txReceipt"); const txBlockNumber = txReceipt.blockNumber; const block = await provider.send("eth_getBlockByHash", [ @@ -172,7 +223,7 @@ export async function getBalanceChange( blockTag: txBlockNumber - 1, }); - return ethers.BigNumber.from(balanceAfter).sub(balanceBefore); + return ethers.toBigInt(balanceAfter) - balanceBefore; } let tokenDescriptionsCache: Record = {}; @@ -182,8 +233,9 @@ let tokenDescriptionsCache: Record = {}; * exist, the address of the token is used. */ async function getTokenDescription(token: Token): Promise { - if (tokenDescriptionsCache[token.address] === undefined) { - let tokenDescription = ``; + const tokenAddress = await token.getAddress(); + if (tokenDescriptionsCache[tokenAddress] === undefined) { + let tokenDescription = ``; try { tokenDescription = await token.symbol(); } catch (e) { @@ -192,10 +244,10 @@ async function getTokenDescription(token: Token): Promise { } catch (e2) {} } - tokenDescriptionsCache[token.address] = tokenDescription; + tokenDescriptionsCache[tokenAddress] = tokenDescription; } - return tokenDescriptionsCache[token.address]; + return tokenDescriptionsCache[tokenAddress]; } // only used by tests diff --git a/packages/hardhat-chai-matchers/src/internal/constants.ts b/packages/hardhat-chai-matchers/src/internal/constants.ts new file mode 100644 index 0000000000..481b77c834 --- /dev/null +++ b/packages/hardhat-chai-matchers/src/internal/constants.ts @@ -0,0 +1,13 @@ +export const ASSERTION_ABORTED = "hh-chai-matchers-assertion-aborted"; +export const PREVIOUS_MATCHER_NAME = "previousMatcherName"; + +export const CHANGE_ETHER_BALANCE_MATCHER = "changeEtherBalance"; +export const CHANGE_ETHER_BALANCES_MATCHER = "changeEtherBalances"; +export const CHANGE_TOKEN_BALANCE_MATCHER = "changeTokenBalance"; +export const CHANGE_TOKEN_BALANCES_MATCHER = "changeTokenBalances"; +export const EMIT_MATCHER = "emit"; +export const REVERTED_MATCHER = "reverted"; +export const REVERTED_WITH_MATCHER = "revertedWith"; +export const REVERTED_WITH_CUSTOM_ERROR_MATCHER = "revertedWithCustomError"; +export const REVERTED_WITH_PANIC_MATCHER = "revertedWithPanic"; +export const REVERTED_WITHOUT_REASON_MATCHER = "revertedWithoutReason"; diff --git a/packages/hardhat-chai-matchers/src/internal/emit.ts b/packages/hardhat-chai-matchers/src/internal/emit.ts index d6ea26791c..1a0c8b958f 100644 --- a/packages/hardhat-chai-matchers/src/internal/emit.ts +++ b/packages/hardhat-chai-matchers/src/internal/emit.ts @@ -1,18 +1,19 @@ -import type { - providers, - utils as EthersUtils, - Contract, - Transaction, -} from "ethers"; +import type EthersT from "ethers"; +import type { Contract, Transaction } from "ethers"; +import type { AssertWithSsfi, Ssfi } from "../utils"; + import { AssertionError } from "chai"; import util from "util"; import ordinal from "ordinal"; -import { AssertWithSsfi, buildAssert, Ssfi } from "../utils"; +import { buildAssert } from "../utils"; +import { ASSERTION_ABORTED, EMIT_MATCHER } from "./constants"; +import { HardhatChaiMatchersAssertionError } from "./errors"; +import { assertIsNotNull, preventAsyncMatcherChaining } from "./utils"; -type EventFragment = EthersUtils.EventFragment; -type Interface = EthersUtils.Interface; -type Provider = providers.Provider; +type EventFragment = EthersT.EventFragment; +type Interface = EthersT.Interface; +type Provider = EthersT.Provider; export const EMIT_CALLED = "emitAssertionCalled"; @@ -20,7 +21,7 @@ async function waitForPendingTransaction( tx: Promise | Transaction | string, provider: Provider ) { - let hash: string | undefined; + let hash: string | null; if (tx instanceof Promise) { ({ hash } = await tx); } else if (typeof tx === "string") { @@ -28,10 +29,10 @@ async function waitForPendingTransaction( } else { ({ hash } = tx); } - if (hash === undefined) { + if (hash === null) { throw new Error(`${JSON.stringify(tx)} is not a valid transaction`); } - return provider.waitForTransaction(hash); + return provider.getTransactionReceipt(hash); } export function supportEmit( @@ -39,36 +40,49 @@ export function supportEmit( chaiUtils: Chai.ChaiUtils ) { Assertion.addMethod( - "emit", + EMIT_MATCHER, function (this: any, contract: Contract, eventName: string) { // capture negated flag before async code executes; see buildAssert's jsdoc const negated = this.__flags.negate; const tx = this._obj; + preventAsyncMatcherChaining(this, EMIT_MATCHER, chaiUtils, true); + const promise = this.then === undefined ? Promise.resolve() : this; - const onSuccess = (receipt: providers.TransactionReceipt) => { + const onSuccess = (receipt: EthersT.TransactionReceipt) => { + // abort if the assertion chain was aborted, for example because + // a `.not` was combined with a `.withArgs` + if (chaiUtils.flag(this, ASSERTION_ABORTED) === true) { + return; + } + const assert = buildAssert(negated, onSuccess); - let eventFragment: EventFragment | undefined; + let eventFragment: EventFragment | null = null; try { eventFragment = contract.interface.getEvent(eventName); } catch (e) { // ignore error } - if (eventFragment === undefined) { + if (eventFragment === null) { throw new AssertionError( `Event "${eventName}" doesn't exist in the contract` ); } - const topic = contract.interface.getEventTopic(eventFragment); + const topic = eventFragment.topicHash; + const contractAddress = contract.target; + if (typeof contractAddress !== "string") { + throw new HardhatChaiMatchersAssertionError( + `The contract target should be a string` + ); + } this.logs = receipt.logs .filter((log) => log.topics.includes(topic)) .filter( - (log) => - log.address.toLowerCase() === contract.address.toLowerCase() + (log) => log.address.toLowerCase() === contractAddress.toLowerCase() ); assert( @@ -80,9 +94,26 @@ export function supportEmit( chaiUtils.flag(this, "contract", contract); }; - const derivedPromise = promise - .then(() => waitForPendingTransaction(tx, contract.provider)) - .then(onSuccess); + const derivedPromise = promise.then(() => { + // abort if the assertion chain was aborted, for example because + // a `.not` was combined with a `.withArgs` + if (chaiUtils.flag(this, ASSERTION_ABORTED) === true) { + return; + } + + if (contract.runner === null || contract.runner.provider === null) { + throw new HardhatChaiMatchersAssertionError( + "contract.runner.provider shouldn't be null" + ); + } + + return waitForPendingTransaction(tx, contract.runner.provider).then( + (receipt) => { + assertIsNotNull(receipt, "receipt"); + return onSuccess(receipt); + } + ); + }); chaiUtils.flag(this, EMIT_CALLED, true); @@ -124,11 +155,12 @@ function assertArgsArraysEqual( assert: AssertWithSsfi, ssfi: Ssfi ) { - const { utils } = require("ethers") as { utils: typeof EthersUtils }; - - const actualArgs = ( + const ethers = require("ethers") as typeof EthersT; + const parsedLog = ( chaiUtils.flag(context, "contract").interface as Interface - ).parseLog(log).args; + ).parseLog(log); + assertIsNotNull(parsedLog, "parsedLog"); + const actualArgs = parsedLog.args; const eventName = chaiUtils.flag(context, "eventName"); assert( actualArgs.length === expectedArgs.length, @@ -159,7 +191,7 @@ function assertArgsArraysEqual( } } else if (expectedArgs[index] instanceof Uint8Array) { new Assertion(actualArgs[index], undefined, ssfi, true).equal( - utils.hexlify(expectedArgs[index]) + ethers.hexlify(expectedArgs[index]) ); } else if ( expectedArgs[index]?.length !== undefined && @@ -195,10 +227,10 @@ function assertArgsArraysEqual( expectedArgs[index], "The actual value was an indexed and hashed value of the event argument. The expected value provided to the assertion should be the actual event argument (the pre-image of the hash). You provided the hash itself. Please supply the the actual event argument (the pre-image of the hash) instead." ); - const expectedArgBytes = utils.isHexString(expectedArgs[index]) - ? utils.arrayify(expectedArgs[index]) - : utils.toUtf8Bytes(expectedArgs[index]); - const expectedHash = utils.keccak256(expectedArgBytes); + const expectedArgBytes = ethers.isHexString(expectedArgs[index]) + ? ethers.getBytes(expectedArgs[index]) + : ethers.toUtf8Bytes(expectedArgs[index]); + const expectedHash = ethers.keccak256(expectedArgBytes); new Assertion(actualArgs[index].hash, undefined, ssfi, true).to.equal( expectedHash, `The actual value was an indexed and hashed value of the event argument. The expected value provided to the assertion was hashed to produce ${expectedHash}. The actual hash and the expected hash did not match` diff --git a/packages/hardhat-chai-matchers/src/internal/errors.ts b/packages/hardhat-chai-matchers/src/internal/errors.ts index c6f141cb69..c490c1d42a 100644 --- a/packages/hardhat-chai-matchers/src/internal/errors.ts +++ b/packages/hardhat-chai-matchers/src/internal/errors.ts @@ -1,9 +1,33 @@ -import { CustomError } from "hardhat/common"; +import { NomicLabsHardhatPluginError } from "hardhat/plugins"; -export class HardhatChaiMatchersDecodingError extends CustomError { +export class HardhatChaiMatchersError extends NomicLabsHardhatPluginError { + constructor(message: string, parent?: Error) { + super("@nomicfoundation/hardhat-chai-matchers", message, parent); + } +} + +export class HardhatChaiMatchersDecodingError extends HardhatChaiMatchersError { constructor(encodedData: string, type: string, parent: Error) { const message = `There was an error decoding '${encodedData}' as a ${type}`; super(message, parent); } } + +/** + * This class is used to assert assumptions in our implementation. Chai's + * AssertionError should be used for user assertions. + */ +export class HardhatChaiMatchersAssertionError extends HardhatChaiMatchersError { + constructor(message: string) { + super(`Assertion error: ${message}`); + } +} + +export class HardhatChaiMatchersNonChainableMatcherError extends HardhatChaiMatchersError { + constructor(matcherName: string, previousMatcherName: string) { + super( + `The matcher '${matcherName}' cannot be chained after '${previousMatcherName}'. For more information, please refer to the documentation at: https://hardhat.org/chaining-async-matchers.` + ); + } +} diff --git a/packages/hardhat-chai-matchers/src/internal/hardhatChaiMatchers.ts b/packages/hardhat-chai-matchers/src/internal/hardhatChaiMatchers.ts index 01ece6753f..90c0c8e1a6 100644 --- a/packages/hardhat-chai-matchers/src/internal/hardhatChaiMatchers.ts +++ b/packages/hardhat-chai-matchers/src/internal/hardhatChaiMatchers.ts @@ -1,3 +1,4 @@ +import { supportAddressable } from "./addressable"; import { supportBigNumber } from "./bigNumber"; import { supportEmit } from "./emit"; import { supportHexEqual } from "./hexEqual"; @@ -16,21 +17,22 @@ import { supportWithArgs } from "./withArgs"; export function hardhatChaiMatchers( chai: Chai.ChaiStatic, - utils: Chai.ChaiUtils + chaiUtils: Chai.ChaiUtils ) { - supportBigNumber(chai.Assertion, utils); - supportEmit(chai.Assertion, utils); + supportAddressable(chai.Assertion, chaiUtils); + supportBigNumber(chai.Assertion, chaiUtils); + supportEmit(chai.Assertion, chaiUtils); supportHexEqual(chai.Assertion); supportProperAddress(chai.Assertion); supportProperHex(chai.Assertion); supportProperPrivateKey(chai.Assertion); - supportChangeEtherBalance(chai.Assertion); - supportChangeEtherBalances(chai.Assertion); - supportChangeTokenBalance(chai.Assertion); - supportReverted(chai.Assertion); - supportRevertedWith(chai.Assertion); - supportRevertedWithCustomError(chai.Assertion, utils); - supportRevertedWithPanic(chai.Assertion); - supportRevertedWithoutReason(chai.Assertion); - supportWithArgs(chai.Assertion, utils); + supportChangeEtherBalance(chai.Assertion, chaiUtils); + supportChangeEtherBalances(chai.Assertion, chaiUtils); + supportChangeTokenBalance(chai.Assertion, chaiUtils); + supportReverted(chai.Assertion, chaiUtils); + supportRevertedWith(chai.Assertion, chaiUtils); + supportRevertedWithCustomError(chai.Assertion, chaiUtils); + supportRevertedWithPanic(chai.Assertion, chaiUtils); + supportRevertedWithoutReason(chai.Assertion, chaiUtils); + supportWithArgs(chai.Assertion, chaiUtils); } diff --git a/packages/hardhat-chai-matchers/src/internal/misc/account.ts b/packages/hardhat-chai-matchers/src/internal/misc/account.ts index ca77d3f87b..c4d7e536ce 100644 --- a/packages/hardhat-chai-matchers/src/internal/misc/account.ts +++ b/packages/hardhat-chai-matchers/src/internal/misc/account.ts @@ -1,21 +1,24 @@ -import type { Contract, Signer, Wallet } from "ethers"; +import type { Addressable } from "ethers"; import assert from "assert"; -export type Account = Signer | Contract; +import { HardhatChaiMatchersAssertionError } from "../errors"; -export function isAccount(account: Account): account is Contract | Wallet { - const ethers = require("ethers"); - return account instanceof ethers.Contract || account instanceof ethers.Wallet; -} +export async function getAddressOf( + account: Addressable | string +): Promise { + const { isAddressable } = await import("ethers"); -export async function getAddressOf(account: Account | string) { if (typeof account === "string") { assert(/^0x[0-9a-fA-F]{40}$/.test(account), `Invalid address ${account}`); return account; - } else if (isAccount(account)) { - return account.address; - } else { + } + + if (isAddressable(account)) { return account.getAddress(); } + + throw new HardhatChaiMatchersAssertionError( + `Expected string or addressable, got ${account as any}` + ); } diff --git a/packages/hardhat-chai-matchers/src/internal/misc/balance.ts b/packages/hardhat-chai-matchers/src/internal/misc/balance.ts index b70f6460e3..9bd93f6827 100644 --- a/packages/hardhat-chai-matchers/src/internal/misc/balance.ts +++ b/packages/hardhat-chai-matchers/src/internal/misc/balance.ts @@ -1,18 +1,20 @@ -import { Account, getAddressOf } from "./account"; +import type { Addressable } from "ethers"; + +import { getAddressOf } from "./account"; export interface BalanceChangeOptions { includeFee?: boolean; } -export function getAddresses(accounts: Array) { +export function getAddresses(accounts: Array) { return Promise.all(accounts.map((account) => getAddressOf(account))); } export async function getBalances( - accounts: Array, + accounts: Array, blockNumber?: number -) { - const { BigNumber } = await import("ethers"); +): Promise { + const { toBigInt } = await import("ethers"); const hre = await import("hardhat"); const provider = hre.ethers.provider; @@ -23,7 +25,7 @@ export async function getBalances( address, `0x${blockNumber?.toString(16) ?? 0}`, ]); - return BigNumber.from(result); + return toBigInt(result); }) ); } diff --git a/packages/hardhat-chai-matchers/src/internal/reverted/panic.ts b/packages/hardhat-chai-matchers/src/internal/reverted/panic.ts index e94c5508fd..d64b7074ba 100644 --- a/packages/hardhat-chai-matchers/src/internal/reverted/panic.ts +++ b/packages/hardhat-chai-matchers/src/internal/reverted/panic.ts @@ -1,5 +1,3 @@ -import type { BigNumber } from "ethers"; - export const PANIC_CODES = { ASSERTION_ERROR: 0x1, ARITHMETIC_UNDER_OR_OVERFLOW: 0x11, @@ -13,27 +11,25 @@ export const PANIC_CODES = { }; // copied from hardhat-core -export function panicErrorCodeToReason( - errorCode: BigNumber -): string | undefined { - switch (errorCode.toNumber()) { - case 0x1: +export function panicErrorCodeToReason(errorCode: bigint): string | undefined { + switch (errorCode) { + case 0x1n: return "Assertion error"; - case 0x11: + case 0x11n: return "Arithmetic operation underflowed or overflowed outside of an unchecked block"; - case 0x12: + case 0x12n: return "Division or modulo division by zero"; - case 0x21: + case 0x21n: return "Tried to convert a value into an enum, but the value was too big or negative"; - case 0x22: + case 0x22n: return "Incorrectly encoded storage byte array"; - case 0x31: + case 0x31n: return ".pop() was called on an empty array"; - case 0x32: + case 0x32n: return "Array accessed at an out-of-bounds or negative index"; - case 0x41: + case 0x41n: return "Too much memory was allocated, or an array was created that is too large"; - case 0x51: + case 0x51n: return "Called a zero-initialized variable of internal function type"; } } diff --git a/packages/hardhat-chai-matchers/src/internal/reverted/reverted.ts b/packages/hardhat-chai-matchers/src/internal/reverted/reverted.ts index 105dcdb445..77a3c74ea7 100644 --- a/packages/hardhat-chai-matchers/src/internal/reverted/reverted.ts +++ b/packages/hardhat-chai-matchers/src/internal/reverted/reverted.ts @@ -1,13 +1,22 @@ +import type EthersT from "ethers"; + import { buildAssert } from "../../utils"; +import { REVERTED_MATCHER } from "../constants"; +import { assertIsNotNull, preventAsyncMatcherChaining } from "../utils"; import { decodeReturnData, getReturnDataFromError } from "./utils"; -export function supportReverted(Assertion: Chai.AssertionStatic) { - Assertion.addProperty("reverted", function (this: any) { +export function supportReverted( + Assertion: Chai.AssertionStatic, + chaiUtils: Chai.ChaiUtils +) { + Assertion.addProperty(REVERTED_MATCHER, function (this: any) { // capture negated flag before async code executes; see buildAssert's jsdoc const negated = this.__flags.negate; const subject: unknown = this._obj; + preventAsyncMatcherChaining(this, REVERTED_MATCHER, chaiUtils); + // Check if the received value can be linked to a transaction, and then // get the receipt of that transaction and check its status. // @@ -27,6 +36,7 @@ export function supportReverted(Assertion: Chai.AssertionStatic) { const receipt = await getTransactionReceipt(hash); + assertIsNotNull(receipt, "receipt"); assert( receipt.status === 0, "Expected transaction to be reverted", @@ -52,6 +62,7 @@ export function supportReverted(Assertion: Chai.AssertionStatic) { }; const onError = (error: any) => { + const { toBeHex } = require("ethers") as typeof EthersT; const assert = buildAssert(negated, onError); const returnData = getReturnDataFromError(error); const decodedReturnData = decodeReturnData(returnData); @@ -73,9 +84,9 @@ export function supportReverted(Assertion: Chai.AssertionStatic) { assert( true, undefined, - `Expected transaction NOT to be reverted, but it reverted with panic code ${decodedReturnData.code.toHexString()} (${ - decodedReturnData.description - })` + `Expected transaction NOT to be reverted, but it reverted with panic code ${toBeHex( + decodedReturnData.code + )} (${decodedReturnData.description})` ); } else { const _exhaustiveCheck: never = decodedReturnData; diff --git a/packages/hardhat-chai-matchers/src/internal/reverted/revertedWith.ts b/packages/hardhat-chai-matchers/src/internal/reverted/revertedWith.ts index 4b8d903405..442f24d6b0 100644 --- a/packages/hardhat-chai-matchers/src/internal/reverted/revertedWith.ts +++ b/packages/hardhat-chai-matchers/src/internal/reverted/revertedWith.ts @@ -1,9 +1,16 @@ +import type EthersT from "ethers"; + import { buildAssert } from "../../utils"; +import { REVERTED_WITH_MATCHER } from "../constants"; +import { preventAsyncMatcherChaining } from "../utils"; import { decodeReturnData, getReturnDataFromError } from "./utils"; -export function supportRevertedWith(Assertion: Chai.AssertionStatic) { +export function supportRevertedWith( + Assertion: Chai.AssertionStatic, + chaiUtils: Chai.ChaiUtils +) { Assertion.addMethod( - "revertedWith", + REVERTED_WITH_MATCHER, function (this: any, expectedReason: string | RegExp) { // capture negated flag before async code executes; see buildAssert's jsdoc const negated = this.__flags.negate; @@ -13,6 +20,9 @@ export function supportRevertedWith(Assertion: Chai.AssertionStatic) { !(expectedReason instanceof RegExp) && typeof expectedReason !== "string" ) { + // if the input validation fails, we discard the subject since it could + // potentially be a rejected promise + Promise.resolve(this._obj).catch(() => {}); throw new TypeError( "Expected the revert reason to be a string or a regular expression" ); @@ -23,6 +33,8 @@ export function supportRevertedWith(Assertion: Chai.AssertionStatic) { ? expectedReason.source : expectedReason; + preventAsyncMatcherChaining(this, REVERTED_WITH_MATCHER, chaiUtils); + const onSuccess = () => { const assert = buildAssert(negated, onSuccess); @@ -33,6 +45,7 @@ export function supportRevertedWith(Assertion: Chai.AssertionStatic) { }; const onError = (error: any) => { + const { toBeHex } = require("ethers") as typeof EthersT; const assert = buildAssert(negated, onError); const returnData = getReturnDataFromError(error); @@ -57,9 +70,9 @@ export function supportRevertedWith(Assertion: Chai.AssertionStatic) { } else if (decodedReturnData.kind === "Panic") { assert( false, - `Expected transaction to be reverted with reason '${expectedReasonString}', but it reverted with panic code ${decodedReturnData.code.toHexString()} (${ - decodedReturnData.description - })` + `Expected transaction to be reverted with reason '${expectedReasonString}', but it reverted with panic code ${toBeHex( + decodedReturnData.code + )} (${decodedReturnData.description})` ); } else if (decodedReturnData.kind === "Custom") { assert( diff --git a/packages/hardhat-chai-matchers/src/internal/reverted/revertedWithCustomError.ts b/packages/hardhat-chai-matchers/src/internal/reverted/revertedWithCustomError.ts index f5e0ea26fd..36607aaf04 100644 --- a/packages/hardhat-chai-matchers/src/internal/reverted/revertedWithCustomError.ts +++ b/packages/hardhat-chai-matchers/src/internal/reverted/revertedWithCustomError.ts @@ -1,55 +1,59 @@ +import type EthersT from "ethers"; + import { AssertionError } from "chai"; import ordinal from "ordinal"; +import { + ASSERTION_ABORTED, + REVERTED_WITH_CUSTOM_ERROR_MATCHER, +} from "../constants"; +import { assertIsNotNull, preventAsyncMatcherChaining } from "../utils"; import { buildAssert, Ssfi } from "../../utils"; -import { decodeReturnData, getReturnDataFromError } from "./utils"; +import { + decodeReturnData, + getReturnDataFromError, + resultToArray, +} from "./utils"; export const REVERTED_WITH_CUSTOM_ERROR_CALLED = "customErrorAssertionCalled"; interface CustomErrorAssertionData { - contractInterface: any; + contractInterface: EthersT.Interface; returnData: string; - customError: CustomError; + customError: EthersT.ErrorFragment; } export function supportRevertedWithCustomError( Assertion: Chai.AssertionStatic, - utils: Chai.ChaiUtils + chaiUtils: Chai.ChaiUtils ) { Assertion.addMethod( - "revertedWithCustomError", - function (this: any, contract: any, expectedCustomErrorName: string) { + REVERTED_WITH_CUSTOM_ERROR_MATCHER, + function ( + this: any, + contract: EthersT.BaseContract, + expectedCustomErrorName: string + ) { // capture negated flag before async code executes; see buildAssert's jsdoc const negated = this.__flags.negate; - // check the case where users forget to pass the contract as the first - // argument - if (typeof contract === "string" || contract?.interface === undefined) { - throw new TypeError( - "The first argument of .revertedWithCustomError must be the contract that defines the custom error" - ); - } - - // validate custom error name - if (typeof expectedCustomErrorName !== "string") { - throw new TypeError("Expected the custom error name to be a string"); - } - - const iface: any = contract.interface; - - const expectedCustomError = findCustomErrorByName( - iface, + const { iface, expectedCustomError } = validateInput( + this._obj, + contract, expectedCustomErrorName ); - // check that interface contains the given custom error - if (expectedCustomError === undefined) { - throw new Error( - `The given contract doesn't have a custom error named '${expectedCustomErrorName}'` - ); - } + preventAsyncMatcherChaining( + this, + REVERTED_WITH_CUSTOM_ERROR_MATCHER, + chaiUtils + ); const onSuccess = () => { + if (chaiUtils.flag(this, ASSERTION_ABORTED) === true) { + return; + } + const assert = buildAssert(negated, onSuccess); assert( @@ -59,6 +63,12 @@ export function supportRevertedWithCustomError( }; const onError = (error: any) => { + if (chaiUtils.flag(this, ASSERTION_ABORTED) === true) { + return; + } + + const { toBeHex } = require("ethers") as typeof EthersT; + const assert = buildAssert(negated, onError); const returnData = getReturnDataFromError(error); @@ -77,12 +87,12 @@ export function supportRevertedWithCustomError( } else if (decodedReturnData.kind === "Panic") { assert( false, - `Expected transaction to be reverted with custom error '${expectedCustomErrorName}', but it reverted with panic code ${decodedReturnData.code.toHexString()} (${ - decodedReturnData.description - })` + `Expected transaction to be reverted with custom error '${expectedCustomErrorName}', but it reverted with panic code ${toBeHex( + decodedReturnData.code + )} (${decodedReturnData.description})` ); } else if (decodedReturnData.kind === "Custom") { - if (decodedReturnData.id === expectedCustomError.id) { + if (decodedReturnData.id === expectedCustomError.selector) { // add flag with the data needed for .withArgs const customErrorAssertionData: CustomErrorAssertionData = { contractInterface: iface, @@ -99,12 +109,9 @@ export function supportRevertedWithCustomError( } else { // try to decode the actual custom error // this will only work when the error comes from the given contract - const actualCustomError = findCustomErrorById( - iface, - decodedReturnData.id - ); + const actualCustomError = iface.getError(decodedReturnData.id); - if (actualCustomError === undefined) { + if (actualCustomError === null) { assert( false, `Expected transaction to be reverted with custom error '${expectedCustomErrorName}', but it reverted with a different custom error` @@ -127,7 +134,7 @@ export function supportRevertedWithCustomError( ); // needed for .withArgs - utils.flag(this, REVERTED_WITH_CUSTOM_ERROR_CALLED, true); + chaiUtils.flag(this, REVERTED_WITH_CUSTOM_ERROR_CALLED, true); this.promise = derivedPromise; this.then = derivedPromise.then.bind(derivedPromise); @@ -138,10 +145,49 @@ export function supportRevertedWithCustomError( ); } +function validateInput( + obj: any, + contract: EthersT.BaseContract, + expectedCustomErrorName: string +): { iface: EthersT.Interface; expectedCustomError: EthersT.ErrorFragment } { + try { + // check the case where users forget to pass the contract as the first + // argument + if (typeof contract === "string" || contract?.interface === undefined) { + // discard subject since it could potentially be a rejected promise + throw new TypeError( + "The first argument of .revertedWithCustomError must be the contract that defines the custom error" + ); + } + + // validate custom error name + if (typeof expectedCustomErrorName !== "string") { + throw new TypeError("Expected the custom error name to be a string"); + } + + const iface = contract.interface; + const expectedCustomError = iface.getError(expectedCustomErrorName); + + // check that interface contains the given custom error + if (expectedCustomError === null) { + throw new Error( + `The given contract doesn't have a custom error named '${expectedCustomErrorName}'` + ); + } + + return { iface, expectedCustomError }; + } catch (e) { + // if the input validation fails, we discard the subject since it could + // potentially be a rejected promise + Promise.resolve(obj).catch(() => {}); + throw e; + } +} + export async function revertedWithCustomErrorWithArgs( context: any, Assertion: Chai.AssertionStatic, - utils: Chai.ChaiUtils, + _utils: Chai.ChaiUtils, expectedArgs: any[], ssfi: Ssfi ) { @@ -160,9 +206,10 @@ export async function revertedWithCustomErrorWithArgs( const { contractInterface, customError, returnData } = customErrorAssertionData; - const errorFragment = contractInterface.errors[customError.signature]; + const errorFragment = contractInterface.getError(customError.name); + assertIsNotNull(errorFragment, "errorFragment"); // We transform ether's Array-like object into an actual array as it's safer - const actualArgs = Array.from( + const actualArgs = resultToArray( contractInterface.decodeErrorResult(errorFragment, returnData) ); @@ -210,51 +257,3 @@ export async function revertedWithCustomErrorWithArgs( } } } - -interface CustomError { - name: string; - id: string; - signature: string; -} - -function findCustomErrorByName( - iface: any, - name: string -): CustomError | undefined { - const ethers = require("ethers"); - - const customErrorEntry = Object.entries(iface.errors).find( - ([, fragment]: any) => fragment.name === name - ); - - if (customErrorEntry === undefined) { - return undefined; - } - - const [customErrorSignature] = customErrorEntry; - const customErrorId = ethers.utils.id(customErrorSignature).slice(0, 10); - - return { - id: customErrorId, - name, - signature: customErrorSignature, - }; -} - -function findCustomErrorById(iface: any, id: string): CustomError | undefined { - const ethers = require("ethers"); - - const customErrorEntry: any = Object.entries(iface.errors).find( - ([signature]: any) => ethers.utils.id(signature).slice(0, 10) === id - ); - - if (customErrorEntry === undefined) { - return undefined; - } - - return { - id, - name: customErrorEntry[1].name, - signature: customErrorEntry[0], - }; -} diff --git a/packages/hardhat-chai-matchers/src/internal/reverted/revertedWithPanic.ts b/packages/hardhat-chai-matchers/src/internal/reverted/revertedWithPanic.ts index 9ec6050d3d..04ed1467fa 100644 --- a/packages/hardhat-chai-matchers/src/internal/reverted/revertedWithPanic.ts +++ b/packages/hardhat-chai-matchers/src/internal/reverted/revertedWithPanic.ts @@ -1,44 +1,55 @@ -import type { BigNumber } from "ethers"; +import type EthersT from "ethers"; import { normalizeToBigInt } from "hardhat/common"; import { buildAssert } from "../../utils"; +import { REVERTED_WITH_PANIC_MATCHER } from "../constants"; +import { preventAsyncMatcherChaining } from "../utils"; import { panicErrorCodeToReason } from "./panic"; import { decodeReturnData, getReturnDataFromError } from "./utils"; -export function supportRevertedWithPanic(Assertion: Chai.AssertionStatic) { +export function supportRevertedWithPanic( + Assertion: Chai.AssertionStatic, + chaiUtils: Chai.ChaiUtils +) { Assertion.addMethod( - "revertedWithPanic", + REVERTED_WITH_PANIC_MATCHER, function (this: any, expectedCodeArg: any) { - const ethers = require("ethers"); + const ethers = require("ethers") as typeof EthersT; // capture negated flag before async code executes; see buildAssert's jsdoc const negated = this.__flags.negate; - let expectedCode: BigNumber | undefined; + let expectedCode: bigint | undefined; try { if (expectedCodeArg !== undefined) { - const normalizedCode = normalizeToBigInt(expectedCodeArg); - expectedCode = ethers.BigNumber.from(normalizedCode); + expectedCode = normalizeToBigInt(expectedCodeArg); } } catch { + // if the input validation fails, we discard the subject since it could + // potentially be a rejected promise + Promise.resolve(this._obj).catch(() => {}); throw new TypeError( `Expected the given panic code to be a number-like value, but got '${expectedCodeArg}'` ); } - const code: number | undefined = expectedCode as any; + const code: bigint | undefined = expectedCode; let description: string | undefined; let formattedPanicCode: string; if (code === undefined) { formattedPanicCode = "some panic code"; } else { - const codeBN = ethers.BigNumber.from(code); + const codeBN = ethers.toBigInt(code); description = panicErrorCodeToReason(codeBN) ?? "unknown panic code"; - formattedPanicCode = `panic code ${codeBN.toHexString()} (${description})`; + formattedPanicCode = `panic code ${ethers.toBeHex( + codeBN + )} (${description})`; } + preventAsyncMatcherChaining(this, REVERTED_WITH_PANIC_MATCHER, chaiUtils); + const onSuccess = () => { const assert = buildAssert(negated, onSuccess); @@ -67,19 +78,19 @@ export function supportRevertedWithPanic(Assertion: Chai.AssertionStatic) { } else if (decodedReturnData.kind === "Panic") { if (code !== undefined) { assert( - decodedReturnData.code.eq(code), - `Expected transaction to be reverted with ${formattedPanicCode}, but it reverted with panic code ${decodedReturnData.code.toHexString()} (${ - decodedReturnData.description - })`, + decodedReturnData.code === code, + `Expected transaction to be reverted with ${formattedPanicCode}, but it reverted with panic code ${ethers.toBeHex( + decodedReturnData.code + )} (${decodedReturnData.description})`, `Expected transaction NOT to be reverted with ${formattedPanicCode}, but it was` ); } else { assert( true, undefined, - `Expected transaction NOT to be reverted with ${formattedPanicCode}, but it reverted with panic code ${decodedReturnData.code.toHexString()} (${ - decodedReturnData.description - })` + `Expected transaction NOT to be reverted with ${formattedPanicCode}, but it reverted with panic code ${ethers.toBeHex( + decodedReturnData.code + )} (${decodedReturnData.description})` ); } } else if (decodedReturnData.kind === "Custom") { diff --git a/packages/hardhat-chai-matchers/src/internal/reverted/revertedWithoutReason.ts b/packages/hardhat-chai-matchers/src/internal/reverted/revertedWithoutReason.ts index f9a5286377..1273aa969b 100644 --- a/packages/hardhat-chai-matchers/src/internal/reverted/revertedWithoutReason.ts +++ b/packages/hardhat-chai-matchers/src/internal/reverted/revertedWithoutReason.ts @@ -1,11 +1,24 @@ +import type EthersT from "ethers"; + import { buildAssert } from "../../utils"; +import { REVERTED_WITHOUT_REASON_MATCHER } from "../constants"; +import { preventAsyncMatcherChaining } from "../utils"; import { decodeReturnData, getReturnDataFromError } from "./utils"; -export function supportRevertedWithoutReason(Assertion: Chai.AssertionStatic) { - Assertion.addMethod("revertedWithoutReason", function (this: any) { +export function supportRevertedWithoutReason( + Assertion: Chai.AssertionStatic, + chaiUtils: Chai.ChaiUtils +) { + Assertion.addMethod(REVERTED_WITHOUT_REASON_MATCHER, function (this: any) { // capture negated flag before async code executes; see buildAssert's jsdoc const negated = this.__flags.negate; + preventAsyncMatcherChaining( + this, + REVERTED_WITHOUT_REASON_MATCHER, + chaiUtils + ); + const onSuccess = () => { const assert = buildAssert(negated, onSuccess); @@ -16,6 +29,7 @@ export function supportRevertedWithoutReason(Assertion: Chai.AssertionStatic) { }; const onError = (error: any) => { + const { toBeHex } = require("ethers") as typeof EthersT; const assert = buildAssert(negated, onError); const returnData = getReturnDataFromError(error); @@ -35,9 +49,9 @@ export function supportRevertedWithoutReason(Assertion: Chai.AssertionStatic) { } else if (decodedReturnData.kind === "Panic") { assert( false, - `Expected transaction to be reverted without a reason, but it reverted with panic code ${decodedReturnData.code.toHexString()} (${ - decodedReturnData.description - })` + `Expected transaction to be reverted without a reason, but it reverted with panic code ${toBeHex( + decodedReturnData.code + )} (${decodedReturnData.description})` ); } else if (decodedReturnData.kind === "Custom") { assert( diff --git a/packages/hardhat-chai-matchers/src/internal/reverted/utils.ts b/packages/hardhat-chai-matchers/src/internal/reverted/utils.ts index 84d537ff7b..253ed71562 100644 --- a/packages/hardhat-chai-matchers/src/internal/reverted/utils.ts +++ b/packages/hardhat-chai-matchers/src/internal/reverted/utils.ts @@ -1,4 +1,4 @@ -import type { BigNumber } from "ethers"; +import type EthersT from "ethers"; import { AssertionError } from "chai"; @@ -51,7 +51,7 @@ type DecodedReturnData = } | { kind: "Panic"; - code: BigNumber; + code: bigint; description: string; } | { @@ -61,7 +61,9 @@ type DecodedReturnData = }; export function decodeReturnData(returnData: string): DecodedReturnData { - const { defaultAbiCoder: abi } = require("@ethersproject/abi"); + const { AbiCoder } = require("ethers") as typeof EthersT; + const abi = new AbiCoder(); + if (returnData === "0x") { return { kind: "Empty" }; } else if (returnData.startsWith(ERROR_STRING_PREFIX)) { @@ -79,7 +81,7 @@ export function decodeReturnData(returnData: string): DecodedReturnData { }; } else if (returnData.startsWith(PANIC_CODE_PREFIX)) { const encodedReason = returnData.slice(PANIC_CODE_PREFIX.length); - let code: BigNumber; + let code: bigint; try { code = abi.decode(["uint256"], `0x${encodedReason}`)[0]; } catch (e: any) { @@ -101,3 +103,25 @@ export function decodeReturnData(returnData: string): DecodedReturnData { data: `0x${returnData.slice(10)}`, }; } + +/** + * Takes an ethers result object and converts it into a (potentially nested) array. + * + * For example, given this error: + * + * struct Point(uint x, uint y) + * error MyError(string, Point) + * + * revert MyError("foo", Point(1, 2)) + * + * The resulting array will be: ["foo", [1n, 2n]] + */ +export function resultToArray(result: EthersT.Result): any[] { + return result + .toArray() + .map((x) => + typeof x === "object" && x !== null && "toArray" in x + ? resultToArray(x) + : x + ); +} diff --git a/packages/hardhat-chai-matchers/src/internal/utils.ts b/packages/hardhat-chai-matchers/src/internal/utils.ts new file mode 100644 index 0000000000..d36c3a9410 --- /dev/null +++ b/packages/hardhat-chai-matchers/src/internal/utils.ts @@ -0,0 +1,42 @@ +import { PREVIOUS_MATCHER_NAME } from "./constants"; +import { + HardhatChaiMatchersAssertionError, + HardhatChaiMatchersNonChainableMatcherError, +} from "./errors"; + +export function assertIsNotNull( + value: T, + valueName: string +): asserts value is Exclude { + if (value === null) { + throw new HardhatChaiMatchersAssertionError( + `${valueName} should not be null` + ); + } +} + +export function preventAsyncMatcherChaining( + context: object, + matcherName: string, + chaiUtils: Chai.ChaiUtils, + allowSelfChaining: boolean = false +) { + const previousMatcherName: string | undefined = chaiUtils.flag( + context, + PREVIOUS_MATCHER_NAME + ); + + if (previousMatcherName === undefined) { + chaiUtils.flag(context, PREVIOUS_MATCHER_NAME, matcherName); + return; + } + + if (previousMatcherName === matcherName && allowSelfChaining) { + return; + } + + throw new HardhatChaiMatchersNonChainableMatcherError( + matcherName, + previousMatcherName + ); +} diff --git a/packages/hardhat-chai-matchers/src/internal/withArgs.ts b/packages/hardhat-chai-matchers/src/internal/withArgs.ts index 856c055e59..1124b6535e 100644 --- a/packages/hardhat-chai-matchers/src/internal/withArgs.ts +++ b/packages/hardhat-chai-matchers/src/internal/withArgs.ts @@ -1,6 +1,8 @@ +import type EthersT from "ethers"; import { AssertionError } from "chai"; import { isBigNumber, normalizeToBigInt } from "hardhat/common"; +import { ASSERTION_ABORTED } from "./constants"; import { emitWithArgs, EMIT_CALLED } from "./emit"; import { @@ -48,16 +50,60 @@ export function anyUint(i: any): boolean { export function supportWithArgs( Assertion: Chai.AssertionStatic, - utils: Chai.ChaiUtils + chaiUtils: Chai.ChaiUtils ) { Assertion.addMethod("withArgs", function (this: any, ...expectedArgs: any[]) { + const { emitCalled } = validateInput.call(this, chaiUtils); + + const { isAddressable } = require("ethers") as typeof EthersT; + + // Resolve arguments to their canonical form: + // - Addressable → address + const resolveArgument = (arg: any) => + isAddressable(arg) ? arg.getAddress() : arg; + + const onSuccess = (resolvedExpectedArgs: any[]) => { + if (emitCalled) { + return emitWithArgs( + this, + Assertion, + chaiUtils, + resolvedExpectedArgs, + onSuccess + ); + } else { + return revertedWithCustomErrorWithArgs( + this, + Assertion, + chaiUtils, + resolvedExpectedArgs, + onSuccess + ); + } + }; + + const promise = (this.then === undefined ? Promise.resolve() : this) + .then(() => Promise.all(expectedArgs.map(resolveArgument))) + .then(onSuccess); + + this.then = promise.then.bind(promise); + this.catch = promise.catch.bind(promise); + return this; + }); +} + +function validateInput( + this: any, + chaiUtils: Chai.ChaiUtils +): { emitCalled: boolean } { + try { if (Boolean(this.__flags.negate)) { throw new Error("Do not combine .not. with .withArgs()"); } - const emitCalled = utils.flag(this, EMIT_CALLED) === true; + const emitCalled = chaiUtils.flag(this, EMIT_CALLED) === true; const revertedWithCustomErrorCalled = - utils.flag(this, REVERTED_WITH_CUSTOM_ERROR_CALLED) === true; + chaiUtils.flag(this, REVERTED_WITH_CUSTOM_ERROR_CALLED) === true; if (!emitCalled && !revertedWithCustomErrorCalled) { throw new Error( @@ -70,26 +116,14 @@ export function supportWithArgs( ); } - const promise = this.then === undefined ? Promise.resolve() : this; + return { emitCalled }; + } catch (e) { + // signal that validation failed to allow the matchers to finish early + chaiUtils.flag(this, ASSERTION_ABORTED, true); - const onSuccess = () => { - if (emitCalled) { - return emitWithArgs(this, Assertion, utils, expectedArgs, onSuccess); - } else { - return revertedWithCustomErrorWithArgs( - this, - Assertion, - utils, - expectedArgs, - onSuccess - ); - } - }; + // discard subject since it could potentially be a rejected promise + Promise.resolve(this._obj).catch(() => {}); - const derivedPromise = promise.then(onSuccess); - - this.then = derivedPromise.then.bind(derivedPromise); - this.catch = derivedPromise.catch.bind(derivedPromise); - return this; - }); + throw e; + } } diff --git a/packages/hardhat-chai-matchers/test/addressable.ts b/packages/hardhat-chai-matchers/test/addressable.ts new file mode 100644 index 0000000000..46e6977eb8 --- /dev/null +++ b/packages/hardhat-chai-matchers/test/addressable.ts @@ -0,0 +1,58 @@ +import { ethers } from "ethers"; +import { AssertionError, expect } from "chai"; + +import "../src/internal/add-chai-matchers"; + +describe("Addressable matcher", () => { + const signer = ethers.Wallet.createRandom(); + const address = signer.address; + const contract = new ethers.Contract(address, []); + + const otherSigner = ethers.Wallet.createRandom(); + const otherAddress = otherSigner.address; + const otherContract = new ethers.Contract(otherAddress, []); + + const elements = [ + { name: "address", object: address, class: address }, + { name: "signer", object: signer, class: address }, + { name: "contract", object: contract, class: address }, + { name: "other address", object: otherAddress, class: otherAddress }, + { name: "other signer", object: otherSigner, class: otherAddress }, + { name: "other contract", object: otherContract, class: otherAddress }, + ]; + + for (const el1 of elements) + for (const el2 of elements) { + const expectEqual = el1.class === el2.class; + + describe(`expect "${el1.name}" to equal "${el1.name}"`, () => { + if (expectEqual) { + it("should not revert", () => { + expect(el1.object).to.equal(el2.object); + }); + } else { + it("should revert", () => { + expect(() => expect(el1.object).to.equal(el2.object)).to.throw( + AssertionError, + `expected '${el1.class}' to equal '${el2.class}'.` + ); + }); + } + }); + + describe(`expect "${el1.name}" to not equal "${el1.name}"`, () => { + if (expectEqual) { + it("should revert", () => { + expect(() => expect(el1.object).to.not.equal(el2.object)).to.throw( + AssertionError, + `expected '${el1.class}' to not equal '${el2.class}'.` + ); + }); + } else { + it("should not revert", () => { + expect(el1.object).to.not.equal(el2.object); + }); + } + }); + } +}); diff --git a/packages/hardhat-chai-matchers/test/bigNumber.ts b/packages/hardhat-chai-matchers/test/bigNumber.ts index 2bfcff1967..f60f967534 100644 --- a/packages/hardhat-chai-matchers/test/bigNumber.ts +++ b/packages/hardhat-chai-matchers/test/bigNumber.ts @@ -1,5 +1,4 @@ import { expect, AssertionError } from "chai"; -import { BigNumber as BigNumberEthers } from "ethers"; import { BigNumber as BigNumberJs } from "bignumber.js"; import BN from "bn.js"; @@ -7,11 +6,10 @@ import { HardhatError } from "hardhat/internal/core/errors"; import "../src/internal/add-chai-matchers"; -type SupportedNumber = number | bigint | BN | BigNumberEthers | BigNumberJs; +type SupportedNumber = number | bigint | BN | BigNumberJs; const numberToBigNumberConversions = [ (n: number) => BigInt(n), - (n: number) => BigNumberEthers.from(n), (n: number) => new BN(n), (n: number) => new BigNumberJs(n), ]; @@ -21,8 +19,6 @@ describe("BigNumber matchers", function () { if (typeof n === "object") { if (n instanceof BN) { return "BN"; - } else if (n instanceof BigNumberEthers) { - return "ethers.BigNumber"; } else if (n instanceof BigNumberJs) { return "bignumber.js"; } @@ -582,7 +578,6 @@ describe("BigNumber matchers", function () { // a few particular combinations of types don't work: if ( typeof convertedActual === "string" && - !BigNumberEthers.isBigNumber(convertedExpected) && !BN.isBN(convertedExpected) && !BigNumberJs.isBigNumber(convertedExpected) ) { @@ -879,7 +874,7 @@ describe("BigNumber matchers", function () { // We are not checking the content of the arrays/objects because // it depends on the type of the numbers (plain numbers, native - // bigints, ethers's BigNumbers) + // bigints) // Ideally the output would be normalized and we could check the // actual content more easily. @@ -1208,11 +1203,6 @@ describe("BigNumber matchers", function () { "custom message" ); - // number and ethers bignumber - expect(() => - expect(1).to.equal(BigNumberEthers.from(2), "custom message") - ).to.throw(AssertionError, "custom message"); - // same but for deep comparisons expect(() => expect([1]).to.equal([2], "custom message")).to.throw( AssertionError, @@ -1224,10 +1214,5 @@ describe("BigNumber matchers", function () { AssertionError, "custom message" ); - - // number and ethers bignumber - expect(() => - expect([1]).to.equal([BigNumberEthers.from(2)], "custom message") - ).to.throw(AssertionError, "custom message"); }); }); diff --git a/packages/hardhat-chai-matchers/test/changeEtherBalance.ts b/packages/hardhat-chai-matchers/test/changeEtherBalance.ts index 12fc629588..f8965582e7 100644 --- a/packages/hardhat-chai-matchers/test/changeEtherBalance.ts +++ b/packages/hardhat-chai-matchers/test/changeEtherBalance.ts @@ -1,6 +1,8 @@ -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import type { Token } from "../src/internal/changeTokenBalance"; +import type { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; +import type { ChangeEtherBalance } from "./contracts"; + import { expect, AssertionError } from "chai"; -import { BigNumber, Contract } from "ethers"; import path from "path"; import util from "util"; @@ -14,30 +16,40 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { runTests(); }); - describe("connected to a hardhat node", function () { + // TODO re-enable this when + // https://github.com/ethers-io/ethers.js/issues/4014 is fixed + describe.skip("connected to a hardhat node", function () { useEnvironmentWithNode("hardhat-project"); runTests(); }); function runTests() { - let sender: SignerWithAddress; - let receiver: SignerWithAddress; - let contract: Contract; + let sender: HardhatEthersSigner; + let receiver: HardhatEthersSigner; + let contract: ChangeEtherBalance; let txGasFees: number; + let mockToken: Token; beforeEach(async function () { const wallets = await this.hre.ethers.getSigners(); sender = wallets[0]; receiver = wallets[1]; contract = await ( - await this.hre.ethers.getContractFactory("ChangeEtherBalance") + await this.hre.ethers.getContractFactory<[], ChangeEtherBalance>( + "ChangeEtherBalance" + ) ).deploy(); txGasFees = 1 * 21_000; await this.hre.network.provider.send( "hardhat_setNextBlockBaseFeePerGas", ["0x0"] ); + + const MockToken = await this.hre.ethers.getContractFactory<[], Token>( + "MockToken" + ); + mockToken = await MockToken.deploy(); }); describe("Transaction Callback (legacy tx)", () => { @@ -53,13 +65,22 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { it("Should fail when block contains more than one transaction", async function () { await this.hre.network.provider.send("evm_setAutomine", [false]); - await sender.sendTransaction({ to: receiver.address, value: 200 }); + + // we set a gas limit to avoid using the whole block gas limit + await sender.sendTransaction({ + to: receiver.address, + value: 200, + gasLimit: 30_000, + }); + await this.hre.network.provider.send("evm_setAutomine", [true]); + await expect( expect(() => sender.sendTransaction({ to: receiver.address, value: 200, + gasLimit: 30_000, }) ).to.changeEtherBalance(sender, -200, { includeFee: true }) ).to.be.eventually.rejectedWith( @@ -86,15 +107,6 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { ).to.changeEtherBalance(sender, BigInt("-200")); }); - it("Should pass when given an ethers BigNumber", async () => { - await expect(() => - sender.sendTransaction({ - to: receiver.address, - value: 200, - }) - ).to.changeEtherBalance(sender, BigNumber.from("-200")); - }); - it("Should pass when expected balance change is passed as int and is equal to an actual", async () => { await expect(() => sender.sendTransaction({ @@ -136,24 +148,6 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { ).to.changeEtherBalance(sender, -200); }); - it("Should pass when expected balance change is passed as BN and is equal to an actual", async () => { - await expect(() => - sender.sendTransaction({ - to: receiver.address, - value: 200, - }) - ).to.changeEtherBalance(receiver, BigNumber.from(200)); - }); - - it("Should pass on negative case when expected balance change is not equal to an actual", async () => { - await expect(() => - sender.sendTransaction({ - to: receiver.address, - value: 200, - }) - ).to.not.changeEtherBalance(receiver, BigNumber.from(300)); - }); - it("Should throw when fee was not calculated correctly", async () => { await expect( expect(() => @@ -206,7 +200,8 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { }); it("shouldn't run the transaction twice", async function () { - const receiverBalanceBefore = await receiver.getBalance(); + const receiverBalanceBefore: bigint = + await this.hre.ethers.provider.getBalance(receiver); await expect(() => sender.sendTransaction({ @@ -215,11 +210,12 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { }) ).to.changeEtherBalance(sender, -200); - const receiverBalanceChange = (await receiver.getBalance()).sub( - receiverBalanceBefore - ); + const receiverBalanceAfter: bigint = + await this.hre.ethers.provider.getBalance(receiver); + const receiverBalanceChange = + receiverBalanceAfter - receiverBalanceBefore; - expect(receiverBalanceChange.toNumber()).to.equal(200); + expect(receiverBalanceChange).to.equal(200n); }); }); @@ -227,7 +223,7 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { it("Should pass when expected balance change is passed as int and is equal to an actual", async () => { await expect(async () => sender.sendTransaction({ - to: contract.address, + to: contract, value: 200, }) ).to.changeEtherBalance(contract, 200); @@ -300,28 +296,6 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { ).to.changeEtherBalance(sender, -200); }); - it("Should pass when expected balance change is passed as BN and is equal to an actual", async () => { - await expect(() => - sender.sendTransaction({ - to: receiver.address, - maxFeePerGas: 2, - maxPriorityFeePerGas: 1, - value: 200, - }) - ).to.changeEtherBalance(receiver, BigNumber.from(200)); - }); - - it("Should pass on negative case when expected balance change is not equal to an actual", async () => { - await expect(() => - sender.sendTransaction({ - to: receiver.address, - maxFeePerGas: 2, - maxPriorityFeePerGas: 1, - value: 200, - }) - ).to.not.changeEtherBalance(receiver, BigNumber.from(300)); - }); - it("Should throw when fee was not calculated correctly", async () => { await expect( expect(() => @@ -377,7 +351,7 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { it("Should pass when expected balance change is passed as int and is equal to an actual", async () => { await expect(async () => sender.sendTransaction({ - to: contract.address, + to: contract, maxFeePerGas: 2, maxPriorityFeePerGas: 1, value: 200, @@ -387,17 +361,17 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { it("Should take into account transaction fee", async function () { const tx = { - to: contract.address, + to: contract, maxFeePerGas: 2, maxPriorityFeePerGas: 1, value: 200, }; - const gas = await this.hre.ethers.provider.estimateGas(tx); + const gas: bigint = await this.hre.ethers.provider.estimateGas(tx); await expect(() => sender.sendTransaction(tx)).to.changeEtherBalance( sender, - -gas.add(200).toNumber(), + -(gas + 200n), { includeFee: true, } @@ -416,7 +390,8 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { }); it("shouldn't run the transaction twice", async function () { - const receiverBalanceBefore = await receiver.getBalance(); + const receiverBalanceBefore: bigint = + await this.hre.ethers.provider.getBalance(receiver); await expect(() => sender.sendTransaction({ @@ -427,11 +402,12 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { }) ).to.changeEtherBalance(sender, -200); - const receiverBalanceChange = (await receiver.getBalance()).sub( - receiverBalanceBefore - ); + const receiverBalanceAfter: bigint = + await this.hre.ethers.provider.getBalance(receiver); + const receiverBalanceChange = + receiverBalanceAfter - receiverBalanceBefore; - expect(receiverBalanceChange.toNumber()).to.equal(200); + expect(receiverBalanceChange).to.equal(200n); }); }); @@ -455,24 +431,6 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { ).to.changeEtherBalance(receiver, 200); }); - it("Should pass when expected balance change is passed as BN and is equal to an actual", async () => { - await expect( - await sender.sendTransaction({ - to: receiver.address, - value: 200, - }) - ).to.changeEtherBalance(sender, BigNumber.from(-200)); - }); - - it("Should pass on negative case when expected balance change is not equal to an actual", async () => { - await expect( - await sender.sendTransaction({ - to: receiver.address, - value: 200, - }) - ).to.not.changeEtherBalance(receiver, BigNumber.from(300)); - }); - it("Should throw when expected balance change value was different from an actual", async () => { await expect( expect( @@ -506,7 +464,7 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { it("Should pass when expected balance change is passed as int and is equal to an actual", async () => { await expect( await sender.sendTransaction({ - to: contract.address, + to: contract, value: 200, }) ).to.changeEtherBalance(contract, 200); @@ -534,24 +492,6 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { ).to.changeEtherBalance(receiver, 200); }); - it("Should pass when expected balance change is passed as BN and is equal to an actual", async () => { - await expect( - sender.sendTransaction({ - to: receiver.address, - value: 200, - }) - ).to.changeEtherBalance(sender, BigNumber.from(-200)); - }); - - it("Should pass on negative case when expected balance change is not equal to an actual", async () => { - await expect( - sender.sendTransaction({ - to: receiver.address, - value: 200, - }) - ).to.not.changeEtherBalance(receiver, BigNumber.from(300)); - }); - it("Should throw when expected balance change value was different from an actual", async () => { await expect( expect( @@ -579,6 +519,21 @@ describe("INTEGRATION: changeEtherBalance matcher", function () { `Expected the ether balance of "${sender.address}" NOT to change by -200 wei, but it did` ); }); + + it("Should throw if chained to another non-chainable method", () => { + expect(() => + expect( + sender.sendTransaction({ + to: receiver.address, + value: 200, + }) + ) + .to.changeTokenBalance(mockToken, receiver, 50) + .and.to.changeEtherBalance(sender, "-200") + ).to.throw( + /The matcher 'changeEtherBalance' cannot be chained after 'changeTokenBalance'./ + ); + }); }); }); diff --git a/packages/hardhat-chai-matchers/test/changeEtherBalances.ts b/packages/hardhat-chai-matchers/test/changeEtherBalances.ts index 3fbbde9a94..9cff245c22 100644 --- a/packages/hardhat-chai-matchers/test/changeEtherBalances.ts +++ b/packages/hardhat-chai-matchers/test/changeEtherBalances.ts @@ -1,6 +1,8 @@ -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import type { Token } from "../src/internal/changeTokenBalance"; +import type { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; +import type { ChangeEtherBalance } from "./contracts"; + import { expect, AssertionError } from "chai"; -import { BigNumber, Contract } from "ethers"; import path from "path"; import util from "util"; @@ -15,29 +17,38 @@ describe("INTEGRATION: changeEtherBalances matcher", function () { }); describe("connected to a hardhat node", function () { + process.env.CHAIN_ID = "12345"; useEnvironmentWithNode("hardhat-project"); runTests(); }); function runTests() { - let sender: SignerWithAddress; - let receiver: SignerWithAddress; - let contract: Contract; + let sender: HardhatEthersSigner; + let receiver: HardhatEthersSigner; + let contract: ChangeEtherBalance; let txGasFees: number; + let mockToken: Token; beforeEach(async function () { const wallets = await this.hre.ethers.getSigners(); sender = wallets[0]; receiver = wallets[1]; contract = await ( - await this.hre.ethers.getContractFactory("ChangeEtherBalance") + await this.hre.ethers.getContractFactory<[], ChangeEtherBalance>( + "ChangeEtherBalance" + ) ).deploy(); txGasFees = 1 * 21_000; await this.hre.network.provider.send( "hardhat_setNextBlockBaseFeePerGas", ["0x0"] ); + + const MockToken = await this.hre.ethers.getContractFactory<[], Token>( + "MockToken" + ); + mockToken = await MockToken.deploy(); }); describe("Transaction Callback", () => { @@ -45,7 +56,7 @@ describe("INTEGRATION: changeEtherBalances matcher", function () { it("Should pass when all expected balance changes are equal to actual values", async () => { await expect(() => sender.sendTransaction({ - to: contract.address, + to: contract, value: 200, }) ).to.changeEtherBalances([sender, contract], [-200, 200]); @@ -100,19 +111,6 @@ describe("INTEGRATION: changeEtherBalances matcher", function () { ); }); - it("Should pass when given ethers BigNumber", async () => { - await expect(() => - sender.sendTransaction({ - to: receiver.address, - gasPrice: 1, - value: 200, - }) - ).to.changeEtherBalances( - [sender, receiver], - [BigNumber.from("-200"), BigNumber.from(200)] - ); - }); - it("Should take into account transaction fee (legacy tx)", async () => { await expect(() => sender.sendTransaction({ @@ -213,7 +211,9 @@ describe("INTEGRATION: changeEtherBalances matcher", function () { }); it("shouldn't run the transaction twice", async function () { - const receiverBalanceBefore = await receiver.getBalance(); + const receiverBalanceBefore = await this.hre.ethers.provider.getBalance( + receiver + ); await expect(() => sender.sendTransaction({ @@ -223,11 +223,13 @@ describe("INTEGRATION: changeEtherBalances matcher", function () { }) ).to.changeEtherBalances([sender, receiver], [-200, 200]); - const receiverBalanceChange = (await receiver.getBalance()).sub( - receiverBalanceBefore + const receiverBalanceAfter = await this.hre.ethers.provider.getBalance( + receiver ); + const receiverBalanceChange = + receiverBalanceAfter - receiverBalanceBefore; - expect(receiverBalanceChange.toNumber()).to.equal(200); + expect(receiverBalanceChange).to.equal(200n); }); }); @@ -236,13 +238,28 @@ describe("INTEGRATION: changeEtherBalances matcher", function () { it("Should pass when all expected balance changes are equal to actual values", async () => { await expect( await sender.sendTransaction({ - to: contract.address, + to: contract, value: 200, }) ).to.changeEtherBalances([sender, contract], [-200, 200]); }); }); + it("Should throw if chained to another non-chainable method", () => { + expect(() => + expect( + sender.sendTransaction({ + to: contract, + value: 200, + }) + ) + .to.changeTokenBalances(mockToken, [sender, receiver], [-50, 100]) + .and.to.changeEtherBalances([sender, contract], [-200, 200]) + ).to.throw( + /The matcher 'changeEtherBalances' cannot be chained after 'changeTokenBalances'./ + ); + }); + describe("Change balance, multiple accounts", () => { it("Should pass when all expected balance changes are equal to actual values", async () => { await expect( diff --git a/packages/hardhat-chai-matchers/test/changeTokenBalance.ts b/packages/hardhat-chai-matchers/test/changeTokenBalance.ts index a180425095..373983849c 100644 --- a/packages/hardhat-chai-matchers/test/changeTokenBalance.ts +++ b/packages/hardhat-chai-matchers/test/changeTokenBalance.ts @@ -1,16 +1,21 @@ +import type { TransactionResponse } from "ethers"; +import type { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; +import type { Token } from "../src/internal/changeTokenBalance"; +import type { MatchersContract } from "./contracts"; + import assert from "assert"; -import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; import { AssertionError, expect } from "chai"; -import { BigNumber, Contract, providers } from "ethers"; import path from "path"; import util from "util"; import "../src/internal/add-chai-matchers"; import { clearTokenDescriptionsCache } from "../src/internal/changeTokenBalance"; +import { + CHANGE_TOKEN_BALANCE_MATCHER, + CHANGE_TOKEN_BALANCES_MATCHER, +} from "../src/internal/constants"; import { useEnvironment, useEnvironmentWithNode } from "./helpers"; -type TransactionResponse = providers.TransactionResponse; - describe("INTEGRATION: changeTokenBalance and changeTokenBalances matchers", function () { describe("with the in-process hardhat network", function () { useEnvironment("hardhat-project"); @@ -29,23 +34,35 @@ describe("INTEGRATION: changeTokenBalance and changeTokenBalances matchers", fun }); function runTests() { - let sender: SignerWithAddress; - let receiver: SignerWithAddress; - let mockToken: Contract; + let sender: HardhatEthersSigner; + let receiver: HardhatEthersSigner; + let mockToken: Token; + let matchers: MatchersContract; beforeEach(async function () { const wallets = await this.hre.ethers.getSigners(); sender = wallets[0]; receiver = wallets[1]; - const MockToken = await this.hre.ethers.getContractFactory("MockToken"); + const MockToken = await this.hre.ethers.getContractFactory<[], Token>( + "MockToken" + ); mockToken = await MockToken.deploy(); + + const Matchers = await this.hre.ethers.getContractFactory< + [], + MatchersContract + >("Matchers"); + matchers = await Matchers.deploy(); }); describe("transaction that doesn't move tokens", () => { it("with a promise of a TxResponse", async function () { + const transactionResponse = sender.sendTransaction({ + to: receiver.address, + }); await runAllAsserts( - sender.sendTransaction({ to: receiver.address }), + transactionResponse, mockToken, [sender, receiver], [0, 0] @@ -232,11 +249,10 @@ describe("INTEGRATION: changeTokenBalance and changeTokenBalances matchers", fun mockToken.transfer(receiver.address, 50) ).to.changeTokenBalance(mockToken, receiver, 50); - const receiverBalanceChange = ( - await mockToken.balanceOf(receiver.address) - ).sub(receiverBalanceBefore); + const receiverBalanceChange = + (await mockToken.balanceOf(receiver.address)) - receiverBalanceBefore; - expect(receiverBalanceChange.toNumber()).to.equal(50); + expect(receiverBalanceChange).to.equal(50n); }); it("changeTokenBalances shouldn't run the transaction twice", async function () { @@ -248,11 +264,10 @@ describe("INTEGRATION: changeTokenBalance and changeTokenBalances matchers", fun mockToken.transfer(receiver.address, 50) ).to.changeTokenBalances(mockToken, [sender, receiver], [-50, 50]); - const receiverBalanceChange = ( - await mockToken.balanceOf(receiver.address) - ).sub(receiverBalanceBefore); + const receiverBalanceChange = + (await mockToken.balanceOf(receiver.address)) - receiverBalanceBefore; - expect(receiverBalanceChange.toNumber()).to.equal(50); + expect(receiverBalanceChange).to.equal(50n); }); it("negated", async function () { @@ -334,9 +349,10 @@ describe("INTEGRATION: changeTokenBalance and changeTokenBalances matchers", fun }); it("uses the token name if the contract doesn't have a symbol", async function () { - const TokenWithOnlyName = await this.hre.ethers.getContractFactory( - "TokenWithOnlyName" - ); + const TokenWithOnlyName = await this.hre.ethers.getContractFactory< + [], + Token + >("TokenWithOnlyName"); const tokenWithOnlyName = await TokenWithOnlyName.deploy(); await expect( @@ -360,7 +376,7 @@ describe("INTEGRATION: changeTokenBalance and changeTokenBalances matchers", fun it("uses the contract address if the contract doesn't have name or symbol", async function () { const TokenWithoutNameNorSymbol = - await this.hre.ethers.getContractFactory( + await this.hre.ethers.getContractFactory<[], Token>( "TokenWithoutNameNorSymbol" ); const tokenWithoutNameNorSymbol = @@ -384,11 +400,35 @@ describe("INTEGRATION: changeTokenBalance and changeTokenBalances matchers", fun /Expected the balance of tokens for "0x\w{40}" NOT to change by 50, but it did/ ); }); + + it("changeTokenBalance: Should throw if chained to another non-chainable method", () => { + expect(() => + expect(mockToken.transfer(receiver.address, 50)) + .to.emit(mockToken, "SomeEvent") + .and.to.changeTokenBalance(mockToken, receiver, 50) + ).to.throw( + /The matcher 'changeTokenBalance' cannot be chained after 'emit'./ + ); + }); + + it("changeTokenBalances: should throw if chained to another non-chainable method", () => { + expect(() => + expect( + mockToken.transfer(receiver.address, 50) + ).to.be.reverted.and.to.changeTokenBalances( + mockToken, + [sender, receiver], + [-50, 100] + ) + ).to.throw( + /The matcher 'changeTokenBalances' cannot be chained after 'reverted'./ + ); + }); }); }); describe("validation errors", function () { - describe("changeTokenBalance", function () { + describe(CHANGE_TOKEN_BALANCE_MATCHER, function () { it("token is not specified", async function () { expect(() => expect(mockToken.transfer(receiver.address, 50)) @@ -429,13 +469,17 @@ describe("INTEGRATION: changeTokenBalance and changeTokenBalances matchers", fun it("tx is not the only one in the block", async function () { await this.hre.network.provider.send("evm_setAutomine", [false]); - await sender.sendTransaction({ to: receiver.address }); + // we set a gas limit to avoid using the whole block gas limit + await sender.sendTransaction({ + to: receiver.address, + gasLimit: 30_000, + }); await this.hre.network.provider.send("evm_setAutomine", [true]); await expect( expect( - mockToken.transfer(receiver.address, 50) + mockToken.transfer(receiver.address, 50, { gasLimit: 100_000 }) ).to.changeTokenBalance(mockToken, sender, -50) ).to.be.rejectedWith(Error, "Multiple transactions found in block"); }); @@ -453,7 +497,7 @@ describe("INTEGRATION: changeTokenBalance and changeTokenBalances matchers", fun }); }); - describe("changeTokenBalances", function () { + describe(CHANGE_TOKEN_BALANCES_MATCHER, function () { it("token is not specified", async function () { expect(() => expect(mockToken.transfer(receiver.address, 50)) @@ -501,16 +545,33 @@ describe("INTEGRATION: changeTokenBalance and changeTokenBalances matchers", fun ); }); + it("arrays have different length, subject is a rejected promise", async function () { + expect(() => + expect(matchers.revertsWithoutReason()).to.changeTokenBalances( + mockToken, + [sender], + [-50, 50] + ) + ).to.throw( + Error, + "The number of accounts (1) is different than the number of expected balance changes (2)" + ); + }); + it("tx is not the only one in the block", async function () { await this.hre.network.provider.send("evm_setAutomine", [false]); - await sender.sendTransaction({ to: receiver.address }); + // we set a gas limit to avoid using the whole block gas limit + await sender.sendTransaction({ + to: receiver.address, + gasLimit: 30_000, + }); await this.hre.network.provider.send("evm_setAutomine", [true]); await expect( expect( - mockToken.transfer(receiver.address, 50) + mockToken.transfer(receiver.address, 50, { gasLimit: 100_000 }) ).to.changeTokenBalances(mockToken, [sender, receiver], [-50, 50]) ).to.be.rejectedWith(Error, "Multiple transactions found in block"); }); @@ -543,43 +604,11 @@ describe("INTEGRATION: changeTokenBalance and changeTokenBalances matchers", fun [BigInt(-50), BigInt(50)] ); }); - - it("ethers's bignumbers are accepted", async function () { - await expect( - mockToken.transfer(receiver.address, 50) - ).to.changeTokenBalance(mockToken, sender, BigNumber.from(-50)); - - await expect( - mockToken.transfer(receiver.address, 50) - ).to.changeTokenBalances( - mockToken, - [sender, receiver], - [BigNumber.from(-50), BigNumber.from(50)] - ); - }); - - it("mixed types are accepted", async function () { - await expect( - mockToken.transfer(receiver.address, 50) - ).to.changeTokenBalances( - mockToken, - [sender, receiver], - [BigInt(-50), BigNumber.from(50)] - ); - - await expect( - mockToken.transfer(receiver.address, 50) - ).to.changeTokenBalances( - mockToken, - [sender, receiver], - [BigNumber.from(-50), BigInt(50)] - ); - }); }); // smoke tests for stack traces describe("stack traces", function () { - describe("changeTokenBalance", function () { + describe(CHANGE_TOKEN_BALANCE_MATCHER, function () { it("includes test file", async function () { let hasProperStackTrace = false; try { @@ -596,7 +625,7 @@ describe("INTEGRATION: changeTokenBalance and changeTokenBalances matchers", fun }); }); - describe("changeTokenBalances", function () { + describe(CHANGE_TOKEN_BALANCES_MATCHER, function () { it("includes test file", async function () { try { await expect( @@ -638,9 +667,9 @@ async function runAllAsserts( | Promise | (() => TransactionResponse) | (() => Promise), - token: Contract, - accounts: Array, - balances: Array + token: Token, + accounts: Array, + balances: Array ) { // changeTokenBalances works for the given arrays await expect(expr).to.changeTokenBalances(token, accounts, balances); diff --git a/packages/hardhat-chai-matchers/test/contracts.ts b/packages/hardhat-chai-matchers/test/contracts.ts new file mode 100644 index 0000000000..451bf646c4 --- /dev/null +++ b/packages/hardhat-chai-matchers/test/contracts.ts @@ -0,0 +1,133 @@ +import { + BaseContract, + BaseContractMethod, + ContractTransactionResponse, + BigNumberish, + AddressLike, +} from "ethers"; + +export type MatchersContract = BaseContract & { + panicAssert: BaseContractMethod<[], void, ContractTransactionResponse>; + revertWithCustomErrorWithInt: BaseContractMethod< + [BigNumberish], + void, + ContractTransactionResponse + >; + revertWithCustomErrorWithPair: BaseContractMethod< + [BigNumberish, BigNumberish], + void, + ContractTransactionResponse + >; + revertWithCustomErrorWithUint: BaseContractMethod< + [BigNumberish], + void, + ContractTransactionResponse + >; + revertWithCustomErrorWithUintAndString: BaseContractMethod< + [BigNumberish, string], + void, + ContractTransactionResponse + >; + revertWithSomeCustomError: BaseContractMethod< + [], + void, + ContractTransactionResponse + >; + revertsWith: BaseContractMethod<[string], void, ContractTransactionResponse>; + revertsWithoutReason: BaseContractMethod< + [], + void, + ContractTransactionResponse + >; + succeeds: BaseContractMethod<[], void, ContractTransactionResponse>; +}; + +export type ChangeEtherBalance = BaseContract & { + returnHalf: BaseContractMethod<[], void, ContractTransactionResponse>; + transferTo: BaseContractMethod<[string], void, ContractTransactionResponse>; +}; + +export type EventsContract = BaseContract & { + doNotEmit: BaseContractMethod<[], void, ContractTransactionResponse>; + emitBytes32: BaseContractMethod<[string], void, ContractTransactionResponse>; + emitBytes32Array: BaseContractMethod< + [string, string], + void, + ContractTransactionResponse + >; + emitBytes: BaseContractMethod<[string], void, ContractTransactionResponse>; + emitIndexedBytes32: BaseContractMethod< + [string], + void, + ContractTransactionResponse + >; + emitIndexedBytes: BaseContractMethod< + [string], + void, + ContractTransactionResponse + >; + emitIndexedString: BaseContractMethod< + [string], + void, + ContractTransactionResponse + >; + emitInt: BaseContractMethod< + [BigNumberish], + void, + ContractTransactionResponse + >; + emitAddress: BaseContractMethod< + [AddressLike], + void, + ContractTransactionResponse + >; + emitNestedUintFromAnotherContract: BaseContractMethod< + [BigNumberish], + void, + ContractTransactionResponse + >; + emitNestedUintFromSameContract: BaseContractMethod< + [BigNumberish], + void, + ContractTransactionResponse + >; + emitString: BaseContractMethod<[string], void, ContractTransactionResponse>; + emitStruct: BaseContractMethod< + [BigNumberish, BigNumberish], + void, + ContractTransactionResponse + >; + emitTwoUints: BaseContractMethod< + [BigNumberish, BigNumberish], + void, + ContractTransactionResponse + >; + emitTwoUintsAndTwoStrings: BaseContractMethod< + [BigNumberish, BigNumberish, string, string], + void, + ContractTransactionResponse + >; + emitUint: BaseContractMethod< + [BigNumberish], + void, + ContractTransactionResponse + >; + emitUintAndString: BaseContractMethod< + [BigNumberish, string], + void, + ContractTransactionResponse + >; + emitUintArray: BaseContractMethod< + [BigNumberish, BigNumberish], + void, + ContractTransactionResponse + >; + emitUintTwice: BaseContractMethod< + [BigNumberish, BigNumberish], + void, + ContractTransactionResponse + >; + emitWithoutArgs: BaseContractMethod<[], void, ContractTransactionResponse>; +}; + +export type AnotherContract = BaseContract & {}; diff --git a/packages/hardhat-chai-matchers/test/events.ts b/packages/hardhat-chai-matchers/test/events.ts index 7bd6dd7f6d..60bb4f0a76 100644 --- a/packages/hardhat-chai-matchers/test/events.ts +++ b/packages/hardhat-chai-matchers/test/events.ts @@ -1,15 +1,20 @@ +import type { + AnotherContract, + EventsContract, + MatchersContract, +} from "./contracts"; + import { expect, AssertionError } from "chai"; -import { BigNumber, Contract, ethers } from "ethers"; +import { ethers } from "ethers"; +import "../src/internal/add-chai-matchers"; import { anyUint, anyValue } from "../src/withArgs"; - import { useEnvironment, useEnvironmentWithNode } from "./helpers"; -import "../src/internal/add-chai-matchers"; - describe(".to.emit (contract events)", () => { - let contract: Contract; - let otherContract: Contract; + let contract: EventsContract; + let otherContract: AnotherContract; + let matchers: MatchersContract; describe("with the in-process hardhat network", function () { useEnvironment("hardhat-project"); @@ -28,9 +33,18 @@ describe(".to.emit (contract events)", () => { otherContract = await ( await this.hre.ethers.getContractFactory("AnotherContract") ).deploy(); + contract = await ( - await this.hre.ethers.getContractFactory("Events") - ).deploy(otherContract.address); + await this.hre.ethers.getContractFactory<[string], EventsContract>( + "Events" + ) + ).deploy(await otherContract.getAddress()); + + const Matchers = await this.hre.ethers.getContractFactory< + [], + MatchersContract + >("Matchers"); + matchers = await Matchers.deploy(); }); it("Should fail when expecting an event that's not in the contract", async function () { @@ -82,6 +96,14 @@ describe(".to.emit (contract events)", () => { ).to.throw(Error, "Do not combine .not. with .withArgs()"); }); + it("Should fail when used with .not, subject is a rejected promise", async function () { + expect(() => + expect(matchers.revertsWithoutReason()) + .not.to.emit(contract, "WithUintArg") + .withArgs(1) + ).to.throw(Error, "Do not combine .not. with .withArgs()"); + }); + it("should fail if withArgs is called on its own", async function () { expect(() => expect(contract.emitUint(1)) @@ -123,14 +145,62 @@ describe(".to.emit (contract events)", () => { }); }); + describe("with an address argument", function () { + const addressable = ethers.Wallet.createRandom(); + const { address } = addressable; + const otherAddressable = ethers.Wallet.createRandom(); + const { address: otherAddress } = otherAddressable; + + it("Should match the argument", async function () { + await expect(contract.emitAddress(addressable)) + .to.emit(contract, "WithAddressArg") + .withArgs(address); + }); + + it("Should match addressable arguments", async function () { + await expect(contract.emitAddress(addressable)) + .to.emit(contract, "WithAddressArg") + .withArgs(addressable); + }); + + it("Should fail when the input argument doesn't match the addressable event argument", async function () { + await expect( + expect(contract.emitAddress(addressable)) + .to.emit(contract, "WithAddressArg") + .withArgs(otherAddressable) + ).to.be.eventually.rejectedWith( + AssertionError, + `expected '${address}' to equal '${otherAddress}'` + ); + }); + + it("Should fail when the input argument doesn't match the address event argument", async function () { + await expect( + expect(contract.emitAddress(addressable)) + .to.emit(contract, "WithAddressArg") + .withArgs(otherAddress) + ).to.be.eventually.rejectedWith( + AssertionError, + `expected '${address}' to equal '${otherAddress}'` + ); + }); + + it("Should fail when too many arguments are given", async function () { + await expect( + expect(contract.emitAddress(addressable)) + .to.emit(contract, "WithAddressArg") + .withArgs(address, otherAddress) + ).to.be.eventually.rejectedWith( + AssertionError, + 'Expected "WithAddressArg" event to have 2 argument(s), but it has 1' + ); + }); + }); + const string1 = "string1"; - const string1Bytes = ethers.utils.hexlify( - ethers.utils.toUtf8Bytes(string1) - ); + const string1Bytes = ethers.hexlify(ethers.toUtf8Bytes(string1)); const string2 = "string2"; - const string2Bytes = ethers.utils.hexlify( - ethers.utils.toUtf8Bytes(string2) - ); + const string2Bytes = ethers.hexlify(ethers.toUtf8Bytes(string2)); // for abbreviating long strings in diff views like chai does: function abbrev(longString: string): string { @@ -138,7 +208,7 @@ describe(".to.emit (contract events)", () => { } function hash(s: string): string { - return ethers.utils.keccak256(s); + return ethers.keccak256(s); } describe("with a string argument", function () { @@ -264,8 +334,8 @@ describe(".to.emit (contract events)", () => { }); }); - const string1Bytes32 = ethers.utils.zeroPad(string1Bytes, 32); - const string2Bytes32 = ethers.utils.zeroPad(string2Bytes, 32); + const string1Bytes32 = ethers.zeroPadValue(string1Bytes, 32); + const string2Bytes32 = ethers.zeroPadValue(string2Bytes, 32); describe("with a bytes32 argument", function () { it("Should match the argument", async function () { await expect(contract.emitBytes32(string1Bytes32)) @@ -281,8 +351,8 @@ describe(".to.emit (contract events)", () => { ).to.be.eventually.rejectedWith( AssertionError, `expected '${abbrev( - ethers.utils.hexlify(string2Bytes32) - )}' to equal '${abbrev(ethers.utils.hexlify(string1Bytes32))}'` + ethers.hexlify(string2Bytes32) + )}' to equal '${abbrev(ethers.hexlify(string1Bytes32))}'` ); }); }); @@ -302,8 +372,8 @@ describe(".to.emit (contract events)", () => { ).to.be.eventually.rejectedWith( AssertionError, `expected '${abbrev( - ethers.utils.hexlify(string2Bytes32) - )}' to equal '${abbrev(ethers.utils.hexlify(string1Bytes32))}'` + ethers.hexlify(string2Bytes32) + )}' to equal '${abbrev(ethers.hexlify(string1Bytes32))}'` ); }); @@ -321,12 +391,6 @@ describe(".to.emit (contract events)", () => { .withArgs([1, 2]); }); - it("Should succeed when expectations are met with BigNumber", async function () { - await expect(contract.emitUintArray(1, 2)) - .to.emit(contract, "WithUintArray") - .withArgs([BigInt(1), BigNumber.from(2)]); - }); - it("Should fail when expectations are not met", async function () { await expect( expect(contract.emitUintArray(1, 2)) diff --git a/packages/hardhat-chai-matchers/test/fixture-projects/hardhat-project/contracts/Events.sol b/packages/hardhat-chai-matchers/test/fixture-projects/hardhat-project/contracts/Events.sol index c0cae42f53..2e3131db88 100644 --- a/packages/hardhat-chai-matchers/test/fixture-projects/hardhat-project/contracts/Events.sol +++ b/packages/hardhat-chai-matchers/test/fixture-projects/hardhat-project/contracts/Events.sol @@ -9,6 +9,7 @@ contract Events { event WithoutArgs(); event WithUintArg(uint u); event WithIntArg(int i); + event WithAddressArg(address a); event WithTwoUintArgs(uint u, uint v); event WithStringArg(string s); event WithTwoStringArgs(string s, string t); @@ -39,6 +40,10 @@ contract Events { emit WithIntArg(i); } + function emitAddress(address a) public { + emit WithAddressArg(a); + } + function emitUintTwice(uint u, uint v) public { emit WithUintArg(u); emit WithUintArg(v); diff --git a/packages/hardhat-chai-matchers/test/fixture-projects/hardhat-project/hardhat.config.js b/packages/hardhat-chai-matchers/test/fixture-projects/hardhat-project/hardhat.config.js index 1940c36a74..d8edfc19ae 100644 --- a/packages/hardhat-chai-matchers/test/fixture-projects/hardhat-project/hardhat.config.js +++ b/packages/hardhat-chai-matchers/test/fixture-projects/hardhat-project/hardhat.config.js @@ -1,8 +1,11 @@ -require("@nomiclabs/hardhat-ethers"); +require("@nomicfoundation/hardhat-ethers"); module.exports = { solidity: "0.8.4", networks: { + hardhat: { + chainId: Number(process.env.CHAIN_ID ?? "31337"), + }, localhost: { url: `http://127.0.0.1:${process.env.HARDHAT_NODE_PORT}`, }, diff --git a/packages/hardhat-chai-matchers/test/helpers.ts b/packages/hardhat-chai-matchers/test/helpers.ts index 1aa41438f0..09dc304b8b 100644 --- a/packages/hardhat-chai-matchers/test/helpers.ts +++ b/packages/hardhat-chai-matchers/test/helpers.ts @@ -1,12 +1,14 @@ +import type { HardhatRuntimeEnvironment } from "hardhat/types"; +import type { MatchersContract } from "./contracts"; + import { AssertionError, expect } from "chai"; import { fork } from "child_process"; import getPort from "get-port"; import { resetHardhatContext } from "hardhat/plugins-testing"; -import { HardhatRuntimeEnvironment } from "hardhat/types"; import path from "path"; // we assume that all the fixture projects use the hardhat-ethers plugin -import "@nomiclabs/hardhat-ethers/internal/type-extensions"; +import "@nomicfoundation/hardhat-ethers/internal/type-extensions"; declare module "mocha" { interface Context { @@ -118,8 +120,8 @@ export async function runSuccessfulAsserts({ }) { await successfulAssert(matchers[method](...args)); await successfulAssert(matchers[`${method}View`](...args)); - await successfulAssert(matchers.estimateGas[method](...args)); - await successfulAssert(matchers.callStatic[method](...args)); + await successfulAssert(matchers[method].estimateGas(...args)); + await successfulAssert(matchers[method].staticCall(...args)); } /** @@ -147,9 +149,63 @@ export async function runFailedAsserts({ failedAssert(matchers[`${method}View`](...args)) ).to.be.rejectedWith(AssertionError, failedAssertReason); await expect( - failedAssert(matchers.estimateGas[method](...args)) + failedAssert(matchers[method].estimateGas(...args)) ).to.be.rejectedWith(AssertionError, failedAssertReason); await expect( - failedAssert(matchers.callStatic[method](...args)) + failedAssert(matchers[method].staticCall(...args)) ).to.be.rejectedWith(AssertionError, failedAssertReason); } + +export async function mineSuccessfulTransaction( + hre: HardhatRuntimeEnvironment +) { + await hre.network.provider.send("evm_setAutomine", [false]); + + const [signer] = await hre.ethers.getSigners(); + const tx = await signer.sendTransaction({ to: signer.address }); + + await mineBlocksUntilTxIsIncluded(hre, tx.hash); + + await hre.network.provider.send("evm_setAutomine", [true]); + + return tx; +} + +export async function mineRevertedTransaction( + hre: HardhatRuntimeEnvironment, + matchers: MatchersContract +) { + await hre.network.provider.send("evm_setAutomine", [false]); + + const tx = await matchers.revertsWithoutReason({ + gasLimit: 1_000_000, + }); + + await mineBlocksUntilTxIsIncluded(hre, tx.hash); + + await hre.network.provider.send("evm_setAutomine", [true]); + + return tx; +} + +async function mineBlocksUntilTxIsIncluded( + hre: HardhatRuntimeEnvironment, + txHash: string +) { + let i = 0; + + while (true) { + const receipt = await hre.ethers.provider.getTransactionReceipt(txHash); + + if (receipt !== null) { + return; + } + + await hre.network.provider.send("hardhat_mine", []); + + i++; + if (i > 100) { + throw new Error(`Transaction was not mined after mining ${i} blocks`); + } + } +} diff --git a/packages/hardhat-chai-matchers/test/panic.ts b/packages/hardhat-chai-matchers/test/panic.ts index 1f19ebe993..efb6549161 100644 --- a/packages/hardhat-chai-matchers/test/panic.ts +++ b/packages/hardhat-chai-matchers/test/panic.ts @@ -1,5 +1,5 @@ import { assert } from "chai"; -import { BigNumber } from "ethers"; +import { toBigInt } from "ethers"; import { PANIC_CODES, @@ -9,7 +9,7 @@ import { describe("panic codes", function () { it("all exported panic codes should have a description", async function () { for (const [key, code] of Object.entries(PANIC_CODES)) { - const description = panicErrorCodeToReason(BigNumber.from(code)); + const description = panicErrorCodeToReason(toBigInt(code)); assert.isDefined(description, `No description for panic code ${key}`); } }); diff --git a/packages/hardhat-chai-matchers/test/reverted/reverted.ts b/packages/hardhat-chai-matchers/test/reverted/reverted.ts index 18ab3b12dc..73e6ceb0d9 100644 --- a/packages/hardhat-chai-matchers/test/reverted/reverted.ts +++ b/packages/hardhat-chai-matchers/test/reverted/reverted.ts @@ -1,17 +1,20 @@ +import type { MatchersContract } from "../contracts"; + import { AssertionError, expect } from "chai"; import { ProviderError } from "hardhat/internal/core/providers/errors"; import path from "path"; import util from "util"; +import "../../src/internal/add-chai-matchers"; import { runSuccessfulAsserts, runFailedAsserts, useEnvironment, useEnvironmentWithNode, + mineSuccessfulTransaction, + mineRevertedTransaction, } from "../helpers"; -import "../../src/internal/add-chai-matchers"; - describe("INTEGRATION: Reverted", function () { describe("with the in-process hardhat network", function () { useEnvironment("hardhat-project"); @@ -27,9 +30,12 @@ describe("INTEGRATION: Reverted", function () { function runTests() { // deploy Matchers contract before each test - let matchers: any; + let matchers: MatchersContract; beforeEach("deploy matchers contract", async function () { - const Matchers = await this.hre.ethers.getContractFactory("Matchers"); + const Matchers = await this.hre.ethers.getContractFactory< + [], + MatchersContract + >("Matchers"); matchers = await Matchers.deploy(); }); @@ -38,31 +44,6 @@ describe("INTEGRATION: Reverted", function () { return expect(x).to.be.eventually.rejectedWith(AssertionError, message); }; - const mineSuccessfulTransaction = async (hre: any) => { - await hre.network.provider.send("evm_setAutomine", [false]); - - const [signer] = await hre.ethers.getSigners(); - const tx = await signer.sendTransaction({ to: signer.address }); - - await hre.network.provider.send("hardhat_mine", []); - await hre.network.provider.send("evm_setAutomine", [true]); - - return tx; - }; - - const mineRevertedTransaction = async (hre: any) => { - await hre.network.provider.send("evm_setAutomine", [false]); - - const tx = await matchers.revertsWithoutReason({ - gasLimit: 1_000_000, - }); - - await hre.network.provider.send("hardhat_mine", []); - await hre.network.provider.send("evm_setAutomine", [true]); - - return tx; - }; - describe("with a string as its subject", function () { it("hash of a successful transaction", async function () { const { hash } = await mineSuccessfulTransaction(this.hre); @@ -75,7 +56,7 @@ describe("INTEGRATION: Reverted", function () { }); it("hash of a reverted transaction", async function () { - const { hash } = await mineRevertedTransaction(this.hre); + const { hash } = await mineRevertedTransaction(this.hre, matchers); await expect(hash).to.be.reverted; await expectAssertionError( @@ -107,7 +88,7 @@ describe("INTEGRATION: Reverted", function () { }); it("promise of a hash of a reverted transaction", async function () { - const { hash } = await mineRevertedTransaction(this.hre); + const { hash } = await mineRevertedTransaction(this.hre, matchers); await expect(Promise.resolve(hash)).to.be.reverted; await expectAssertionError( @@ -145,7 +126,7 @@ describe("INTEGRATION: Reverted", function () { }); it("TxResponse of a reverted transaction", async function () { - const tx = await mineRevertedTransaction(this.hre); + const tx = await mineRevertedTransaction(this.hre, matchers); await expect(tx).to.be.reverted; await expectAssertionError( @@ -165,7 +146,7 @@ describe("INTEGRATION: Reverted", function () { }); it("promise of a TxResponse of a reverted transaction", async function () { - const txPromise = mineRevertedTransaction(this.hre); + const txPromise = mineRevertedTransaction(this.hre, matchers); await expect(txPromise).to.be.reverted; await expectAssertionError( @@ -173,6 +154,62 @@ describe("INTEGRATION: Reverted", function () { "Expected transaction NOT to be reverted" ); }); + + it("reverted: should throw if chained to another non-chainable method", function () { + const txPromise = mineRevertedTransaction(this.hre, matchers); + expect( + () => + expect(txPromise).to.be.revertedWith("an error message").and.to.be + .reverted + ).to.throw( + /The matcher 'reverted' cannot be chained after 'revertedWith'./ + ); + }); + + it("revertedWith: should throw if chained to another non-chainable method", function () { + const txPromise = mineRevertedTransaction(this.hre, matchers); + expect(() => + expect(txPromise) + .to.be.revertedWithCustomError(matchers, "SomeCustomError") + .and.to.be.revertedWith("an error message") + ).to.throw( + /The matcher 'revertedWith' cannot be chained after 'revertedWithCustomError'./ + ); + }); + + it("revertedWithCustomError: should throw if chained to another non-chainable method", function () { + const txPromise = mineRevertedTransaction(this.hre, matchers); + expect(() => + expect(txPromise) + .to.be.revertedWithoutReason() + .and.to.be.revertedWithCustomError(matchers, "SomeCustomError") + ).to.throw( + /The matcher 'revertedWithCustomError' cannot be chained after 'revertedWithoutReason'./ + ); + }); + + it("revertedWithoutReason: should throw if chained to another non-chainable method", function () { + const txPromise = mineRevertedTransaction(this.hre, matchers); + expect(() => + expect(txPromise) + .to.be.revertedWithPanic() + .and.to.be.revertedWithoutReason() + ).to.throw( + /The matcher 'revertedWithoutReason' cannot be chained after 'revertedWithPanic'./ + ); + }); + + it("revertedWithPanic: should throw if chained to another non-chainable method", async function () { + const [sender] = await this.hre.ethers.getSigners(); + const txPromise = mineRevertedTransaction(this.hre, matchers); + expect(() => + expect(txPromise) + .to.changeEtherBalance(sender, "-200") + .and.to.be.revertedWithPanic() + ).to.throw( + /The matcher 'revertedWithPanic' cannot be chained after 'changeEtherBalance'./ + ); + }); }); describe("with a TxReceipt as its subject", function () { @@ -188,10 +225,10 @@ describe("INTEGRATION: Reverted", function () { }); it("TxReceipt of a reverted transaction", async function () { - const tx = await mineRevertedTransaction(this.hre); - const receipt = await this.hre.ethers.provider.waitForTransaction( + const tx = await mineRevertedTransaction(this.hre, matchers); + const receipt = await this.hre.ethers.provider.getTransactionReceipt( tx.hash - ); // tx.wait rejects, so we use provider.waitForTransaction + ); // tx.wait rejects, so we use provider.getTransactionReceipt await expect(receipt).to.be.reverted; await expectAssertionError( @@ -212,10 +249,10 @@ describe("INTEGRATION: Reverted", function () { }); it("promise of a TxReceipt of a reverted transaction", async function () { - const tx = await mineRevertedTransaction(this.hre); - const receiptPromise = this.hre.ethers.provider.waitForTransaction( + const tx = await mineRevertedTransaction(this.hre, matchers); + const receiptPromise = this.hre.ethers.provider.getTransactionReceipt( tx.hash - ); // tx.wait rejects, so we use provider.waitForTransaction + ); // tx.wait rejects, so we use provider.getTransactionReceipt await expect(receiptPromise).to.be.reverted; await expectAssertionError( @@ -352,12 +389,15 @@ describe("INTEGRATION: Reverted", function () { randomPrivateKey, this.hre.ethers.provider ); + const matchersFromSenderWithoutFunds = matchers.connect( + signer + ) as MatchersContract; // this transaction will fail because of lack of funds, not because of a // revert await expect( expect( - matchers.connect(signer).revertsWithoutReason({ + matchersFromSenderWithoutFunds.revertsWithoutReason({ gasLimit: 1_000_000, }) ).to.not.be.reverted @@ -374,7 +414,9 @@ describe("INTEGRATION: Reverted", function () { try { await expect(matchers.succeeds()).to.be.reverted; } catch (e: any) { - expect(util.inspect(e)).to.include( + const errorString = util.inspect(e); + expect(errorString).to.include("Expected transaction to be reverted"); + expect(errorString).to.include( path.join("test", "reverted", "reverted.ts") ); diff --git a/packages/hardhat-chai-matchers/test/reverted/revertedWith.ts b/packages/hardhat-chai-matchers/test/reverted/revertedWith.ts index ca4257c6d7..fd76d7299a 100644 --- a/packages/hardhat-chai-matchers/test/reverted/revertedWith.ts +++ b/packages/hardhat-chai-matchers/test/reverted/revertedWith.ts @@ -8,9 +8,11 @@ import { runFailedAsserts, useEnvironment, useEnvironmentWithNode, + mineSuccessfulTransaction, } from "../helpers"; import "../../src/internal/add-chai-matchers"; +import { MatchersContract } from "../contracts"; describe("INTEGRATION: Reverted with", function () { describe("with the in-process hardhat network", function () { @@ -27,26 +29,16 @@ describe("INTEGRATION: Reverted with", function () { function runTests() { // deploy Matchers contract before each test - let matchers: any; + let matchers: MatchersContract; beforeEach("deploy matchers contract", async function () { - const Matchers = await this.hre.ethers.getContractFactory("Matchers"); + const Matchers = await this.hre.ethers.getContractFactory< + [], + MatchersContract + >("Matchers"); matchers = await Matchers.deploy(); }); - // helpers - const mineSuccessfulTransaction = async (hre: any) => { - await hre.network.provider.send("evm_setAutomine", [false]); - - const [signer] = await hre.ethers.getSigners(); - const tx = await signer.sendTransaction({ to: signer.address }); - - await hre.network.provider.send("hardhat_mine", []); - await hre.network.provider.send("evm_setAutomine", [true]); - - return tx; - }; - describe("calling a method that succeeds", function () { it("successful asserts", async function () { await runSuccessfulAsserts({ @@ -213,6 +205,18 @@ describe("INTEGRATION: Reverted with", function () { ); }); + it("non-string as expectation, subject is a rejected promise", async function () { + const tx = matchers.revertsWithoutReason(); + + expect(() => + // @ts-expect-error + expect(tx).to.be.revertedWith(10) + ).to.throw( + TypeError, + "Expected the revert reason to be a string or a regular expression" + ); + }); + it("errors that are not related to a reverted transaction", async function () { // use an address that almost surely doesn't have balance const randomPrivateKey = @@ -221,12 +225,15 @@ describe("INTEGRATION: Reverted with", function () { randomPrivateKey, this.hre.ethers.provider ); + const matchersFromSenderWithoutFunds = matchers.connect( + signer + ) as MatchersContract; // this transaction will fail because of lack of funds, not because of a // revert await expect( expect( - matchers.connect(signer).revertsWithoutReason({ + matchersFromSenderWithoutFunds.revertsWithoutReason({ gasLimit: 1_000_000, }) ).to.not.be.revertedWith("some reason") @@ -243,7 +250,11 @@ describe("INTEGRATION: Reverted with", function () { try { await expect(matchers.revertsWith("bar")).to.be.revertedWith("foo"); } catch (e: any) { - expect(util.inspect(e)).to.include( + const errorString = util.inspect(e); + expect(errorString).to.include( + "Expected transaction to be reverted with reason 'foo', but it reverted with reason 'bar'" + ); + expect(errorString).to.include( path.join("test", "reverted", "revertedWith.ts") ); diff --git a/packages/hardhat-chai-matchers/test/reverted/revertedWithCustomError.ts b/packages/hardhat-chai-matchers/test/reverted/revertedWithCustomError.ts index e5a9d2a037..e4b6aeeccf 100644 --- a/packages/hardhat-chai-matchers/test/reverted/revertedWithCustomError.ts +++ b/packages/hardhat-chai-matchers/test/reverted/revertedWithCustomError.ts @@ -1,5 +1,4 @@ import { AssertionError, expect } from "chai"; -import { BigNumber } from "ethers"; import { ProviderError } from "hardhat/internal/core/providers/errors"; import path from "path"; import util from "util"; @@ -9,10 +8,12 @@ import { runFailedAsserts, useEnvironment, useEnvironmentWithNode, + mineSuccessfulTransaction, } from "../helpers"; import "../../src/internal/add-chai-matchers"; import { anyUint, anyValue } from "../../src/withArgs"; +import { MatchersContract } from "../contracts"; describe("INTEGRATION: Reverted with custom error", function () { describe("with the in-process hardhat network", function () { @@ -29,26 +30,16 @@ describe("INTEGRATION: Reverted with custom error", function () { function runTests() { // deploy Matchers contract before each test - let matchers: any; + let matchers: MatchersContract; beforeEach("deploy matchers contract", async function () { - const Matchers = await this.hre.ethers.getContractFactory("Matchers"); + const Matchers = await this.hre.ethers.getContractFactory< + [], + MatchersContract + >("Matchers"); matchers = await Matchers.deploy(); }); - // helpers - const mineSuccessfulTransaction = async (hre: any) => { - await hre.network.provider.send("evm_setAutomine", [false]); - - const [signer] = await hre.ethers.getSigners(); - const tx = await signer.sendTransaction({ to: signer.address }); - - await hre.network.provider.send("hardhat_mine", []); - await hre.network.provider.send("evm_setAutomine", [true]); - - return tx; - }; - describe("calling a method that succeeds", function () { it("successful asserts", async function () { await runSuccessfulAsserts({ @@ -356,7 +347,9 @@ describe("INTEGRATION: Reverted with custom error", function () { ); }); - it("should fail if both emit and revertedWithCustomError are called", async function () { + // TODO: re-enable this test when proper async chaining is implemented. + // See https://github.com/NomicFoundation/hardhat/issues/4235 + it.skip("should fail if both emit and revertedWithCustomError are called", async function () { expect(() => expect(matchers.revertWithSomeCustomError()) .to.emit(matchers, "SomeEvent") @@ -368,20 +361,6 @@ describe("INTEGRATION: Reverted with custom error", function () { ); }); - it("should work with bigints and bignumbers", async function () { - await expect(matchers.revertWithCustomErrorWithUint(1)) - .to.be.revertedWithCustomError(matchers, "CustomErrorWithUint") - .withArgs(BigInt(1)); - - await expect(matchers.revertWithCustomErrorWithUint(1)) - .to.be.revertedWithCustomError(matchers, "CustomErrorWithUint") - .withArgs(BigNumber.from(1)); - - await expect(matchers.revertWithCustomErrorWithPair(1, 2)) - .to.be.revertedWithCustomError(matchers, "CustomErrorWithPair") - .withArgs([BigInt(1), BigNumber.from(2)]); - }); - it("should work with predicates", async function () { await expect(matchers.revertWithCustomErrorWithUint(1)) .to.be.revertedWithCustomError(matchers, "CustomErrorWithUint") @@ -460,12 +439,15 @@ describe("INTEGRATION: Reverted with custom error", function () { randomPrivateKey, this.hre.ethers.provider ); + const matchersFromSenderWithoutFunds = matchers.connect( + signer + ) as MatchersContract; // this transaction will fail because of lack of funds, not because of a // revert await expect( expect( - matchers.connect(signer).revertsWithoutReason({ + matchersFromSenderWithoutFunds.revertsWithoutReason({ gasLimit: 1_000_000, }) ).to.not.be.revertedWithCustomError(matchers, "SomeCustomError") @@ -481,10 +463,14 @@ describe("INTEGRATION: Reverted with custom error", function () { it("includes test file", async function () { try { await expect( - matchers.revertedWith("some reason") + matchers.revertsWith("some reason") ).to.be.revertedWithCustomError(matchers, "SomeCustomError"); } catch (e: any) { - expect(util.inspect(e)).to.include( + const errorString = util.inspect(e); + expect(errorString).to.include( + "Expected transaction to be reverted with custom error 'SomeCustomError', but it reverted with reason 'some reason'" + ); + expect(errorString).to.include( path.join("test", "reverted", "revertedWithCustomError.ts") ); diff --git a/packages/hardhat-chai-matchers/test/reverted/revertedWithPanic.ts b/packages/hardhat-chai-matchers/test/reverted/revertedWithPanic.ts index 82c3071dc7..6d2fca077f 100644 --- a/packages/hardhat-chai-matchers/test/reverted/revertedWithPanic.ts +++ b/packages/hardhat-chai-matchers/test/reverted/revertedWithPanic.ts @@ -1,16 +1,17 @@ import { AssertionError, expect } from "chai"; -import { BigNumber } from "ethers"; import { ProviderError } from "hardhat/internal/core/providers/errors"; import path from "path"; import util from "util"; import "../../src/internal/add-chai-matchers"; import { PANIC_CODES } from "../../src/panic"; +import { MatchersContract } from "../contracts"; import { runSuccessfulAsserts, runFailedAsserts, useEnvironment, useEnvironmentWithNode, + mineSuccessfulTransaction, } from "../helpers"; describe("INTEGRATION: Reverted with panic", function () { @@ -28,25 +29,15 @@ describe("INTEGRATION: Reverted with panic", function () { function runTests() { // deploy Matchers contract before each test - let matchers: any; + let matchers: MatchersContract; beforeEach("deploy matchers contract", async function () { - const Matchers = await this.hre.ethers.getContractFactory("Matchers"); + const Matchers = await this.hre.ethers.getContractFactory< + [], + MatchersContract + >("Matchers"); matchers = await Matchers.deploy(); }); - // helpers - const mineSuccessfulTransaction = async (hre: any) => { - await hre.network.provider.send("evm_setAutomine", [false]); - - const [signer] = await hre.ethers.getSigners(); - const tx = await signer.sendTransaction({ to: signer.address }); - - await hre.network.provider.send("hardhat_mine", []); - await hre.network.provider.send("evm_setAutomine", [true]); - - return tx; - }; - describe("calling a method that succeeds", function () { it("successful asserts", async function () { await runSuccessfulAsserts({ @@ -269,15 +260,6 @@ describe("INTEGRATION: Reverted with panic", function () { successfulAssert: (x) => expect(x).not.to.be.revertedWithPanic("1"), }); }); - - it("ethers's BigNumber", async function () { - await runSuccessfulAsserts({ - matchers, - method: "succeeds", - successfulAssert: (x) => - expect(x).not.to.be.revertedWithPanic(BigNumber.from(1)), - }); - }); }); describe("invalid values", function () { @@ -296,6 +278,15 @@ describe("INTEGRATION: Reverted with panic", function () { ); }); + it("non-number as expectation, subject is a rejected promise", async function () { + const tx = matchers.revertsWithoutReason(); + + expect(() => expect(tx).to.be.revertedWithPanic("invalid")).to.throw( + TypeError, + "Expected the given panic code to be a number-like value, but got 'invalid'" + ); + }); + it("errors that are not related to a reverted transaction", async function () { // use an address that almost surely doesn't have balance const randomPrivateKey = @@ -304,12 +295,15 @@ describe("INTEGRATION: Reverted with panic", function () { randomPrivateKey, this.hre.ethers.provider ); + const matchersFromSenderWithoutFunds = matchers.connect( + signer + ) as MatchersContract; // this transaction will fail because of lack of funds, not because of a // revert await expect( expect( - matchers.connect(signer).revertsWithoutReason({ + matchersFromSenderWithoutFunds.revertsWithoutReason({ gasLimit: 1_000_000, }) ).to.not.be.revertedWithPanic() @@ -326,7 +320,11 @@ describe("INTEGRATION: Reverted with panic", function () { try { await expect(matchers.panicAssert()).to.not.be.revertedWithPanic(); } catch (e: any) { - expect(util.inspect(e)).to.include( + const errorString = util.inspect(e); + expect(errorString).to.include( + "Expected transaction NOT to be reverted with some panic code, but it reverted with panic code 0x01 (Assertion error)" + ); + expect(errorString).to.include( path.join("test", "reverted", "revertedWithPanic.ts") ); diff --git a/packages/hardhat-chai-matchers/test/reverted/revertedWithoutReason.ts b/packages/hardhat-chai-matchers/test/reverted/revertedWithoutReason.ts index 3fa8f7f425..8fcb3fd263 100644 --- a/packages/hardhat-chai-matchers/test/reverted/revertedWithoutReason.ts +++ b/packages/hardhat-chai-matchers/test/reverted/revertedWithoutReason.ts @@ -11,6 +11,7 @@ import { } from "../helpers"; import "../../src/internal/add-chai-matchers"; +import { MatchersContract } from "../contracts"; describe("INTEGRATION: Reverted without reason", function () { describe("with the in-process hardhat network", function () { @@ -27,9 +28,12 @@ describe("INTEGRATION: Reverted without reason", function () { function runTests() { // deploy Matchers contract before each test - let matchers: any; + let matchers: MatchersContract; beforeEach("deploy matchers contract", async function () { - const Matchers = await this.hre.ethers.getContractFactory("Matchers"); + const Matchers = await this.hre.ethers.getContractFactory< + [], + MatchersContract + >("Matchers"); matchers = await Matchers.deploy(); }); @@ -155,12 +159,15 @@ describe("INTEGRATION: Reverted without reason", function () { randomPrivateKey, this.hre.ethers.provider ); + const matchersFromSenderWithoutFunds = matchers.connect( + signer + ) as MatchersContract; // this transaction will fail because of lack of funds, not because of a // revert await expect( expect( - matchers.connect(signer).revertsWithoutReason({ + matchersFromSenderWithoutFunds.revertsWithoutReason({ gasLimit: 1_000_000, }) ).to.not.be.revertedWithoutReason() @@ -179,7 +186,11 @@ describe("INTEGRATION: Reverted without reason", function () { matchers.revertsWithoutReason() ).to.not.be.revertedWithoutReason(); } catch (e: any) { - expect(util.inspect(e)).to.include( + const errorString = util.inspect(e); + expect(errorString).to.include( + "Expected transaction NOT to be reverted without a reason, but it was" + ); + expect(errorString).to.include( path.join("test", "reverted", "revertedWithoutReason.ts") ); diff --git a/packages/hardhat-core/.eslintrc.js b/packages/hardhat-core/.eslintrc.js index 706963435b..9cfa263590 100644 --- a/packages/hardhat-core/.eslintrc.js +++ b/packages/hardhat-core/.eslintrc.js @@ -1,10 +1,41 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { project: `${__dirname}/src/tsconfig.json`, - sourceType: "module" + sourceType: "module", }, rules: { - "@nomiclabs/hardhat-internal-rules/only-hardhat-error": "error" - } + "@nomicfoundation/hardhat-internal-rules/only-hardhat-error": "error", + }, + overrides: [ + { + files: [ + "src/internal/cli/cli.ts", + "src/register.ts", + "src/internal/lib/hardhat-lib.ts", + "src/config.ts", + "src/plugins.ts", + "src/types/**/*.ts", + // used by hh-foundry + "src/builtin-tasks/task-names.ts", + "src/internal/core/errors.ts", + "src/common/index.ts", + // used by hh-truffle + "src/internal/core/providers/util.ts", + "src/utils/contract-names.ts", + ], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [...slowImportsCommonIgnoredModules], + }, + ], + }, + }, + ], }; diff --git a/packages/hardhat-core/.gitignore b/packages/hardhat-core/.gitignore index b3d531f256..2c7eebba90 100644 --- a/packages/hardhat-core/.gitignore +++ b/packages/hardhat-core/.gitignore @@ -11,7 +11,7 @@ /coverage /.nyc_output -# TSC prod output. This has to be in sync with the to directories in ./src, and with npm script clean +# TSC prod output. This has to be in sync with the to directories in ./src, and with pnpm script clean /*.js /*.js.map @@ -32,10 +32,6 @@ test/internal/hardhat-network/provider/.hardhat_node_test_cache/ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -74,21 +70,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-core/.prettierignore b/packages/hardhat-core/.prettierignore index 2cb1650348..8234e6ed6e 100644 --- a/packages/hardhat-core/.prettierignore +++ b/packages/hardhat-core/.prettierignore @@ -16,3 +16,4 @@ /test/internal/hardhat-network/stack-traces/test-files/**/artifacts /.nyc_output CHANGELOG.md +!.eslintrc.js diff --git a/packages/hardhat-core/CHANGELOG.md b/packages/hardhat-core/CHANGELOG.md index 6d618fd1f4..081a7b7403 100644 --- a/packages/hardhat-core/CHANGELOG.md +++ b/packages/hardhat-core/CHANGELOG.md @@ -1,5 +1,153 @@ # hardhat +## 2.19.4 + +### Patch Changes + +- 7aea77e49: Report telemetry consent response to Google Analytics + +## 2.19.3 + +### Patch Changes + +- 3f282db50: Added support for solc 0.8.23 +- fa2f0fba7: Added a temporary message about the 2023 Solidtiy Developer Survey + +## 2.19.2 + +### Patch Changes + +- b475fc49c: Modified the artifacts cleanup logic to avoid removing a `package.json` file under the artifacts directory +- c3aad2c55: Added support for scopes in hh autocomplete. +- 4bc6a2726: Added experimental support for using ESM modules with TypeScript + +## 2.19.1 + +### Patch Changes + +- 23665f399: Upgraded toolboxes versions used in project initialization +- 106235cb0: Fixed an issue in low-traffic chains that resulted in txs using a `maxPriorityFeePerGas` of 0 +- c52a5d653: Added logic to avoid downloading the same compiler version multiple times +- b46ccf46d: Updated the `.gitignore` files generated during project initialization to use relative paths + +## 2.19.0 + +### Minor Changes + +- 27f3d6355: Added support for configuration variables management + +### Patch Changes + +- f2f67df3c: Added support for solc 0.8.22 + +## 2.18.3 + +### Patch Changes + +- bddfcff8d: Send GA hits for `ignition deploy` tasks + +## 2.18.2 + +### Patch Changes + +- abca5abaf: Fixed the compiler download, which broke with the latest version of undici + +## 2.18.1 + +### Patch Changes + +- b77b665fd: Added a viem option to the project initialization +- 03edea678: Updated the compilation logs to include the targeted EVM versions. + +## 2.18.0 + +### Minor Changes + +- 9412419b8: Added support for scoped tasks + +### Patch Changes + +- e95e954b4: Report issues from `@nomicfoundation` npm scope + +## 2.17.4 + +### Patch Changes + +- 11e58f67c: Added an explicit command `hardhat init` to initialize projects, and deprecated project initialization with just `hardhat`. +- 8388720ea: Added support for the RPC method debug_traceCall. + +## 2.17.3 + +### Patch Changes + +- c03c710ad: Set the default evmVersion to paris for solc versions that are greater than or equal to 0.8.20. + +## 2.17.2 + +### Patch Changes + +- ee9d2ff06: Added support for state overrides in the RPC Method eth_call +- c00c689ae: Removed the superfluous zeros that were returned in the `memory` property when calling the `debug_traceTransaction` method. +- 7084d32e2: Deprecated the `TASK_COMPILE_TRANSFORM_IMPORT_NAME` subtask, added a new `TASK_COMPILE_GET_REMAPPINGS` subtask, and added support for remappings in the resolver. +- fa41db82b: Added an `enableTransientStorage` option to enable EIP-1153 opcodes +- 8ae64478d: Fixed an issue where artifactExists would throw an error for missing artifacts. +- 45f49ae20: Improved error message displayed when importing a directory instead of a file. +- 3ea6c5237: Fixed a problem with receipts of remote transactions returning the wrong tx type when fetched through a fork. + +## 2.17.1 + +### Patch Changes + +- 8f50ab814: Removed the `abort-controller` dependency as it's not longer needed. Thanks @orlandoortegajr! +- 951906da2: Improved the flatten task to handle SPDX licenses and pragma directives more effectively. +- e4424e3ad: Added support for solc 0.8.21 +- fff90bb6e: `console.log` now works in `pure` functions. Thanks @0age for coming up with this technique! +- 9fe89ef96: Fixed a bug caused by nodes returning 429 responses without a `Retry-After` header (thanks @kowalski!) +- 6390230b7: Added logic to throw an error when the debug_traceTransaction method is called with a tracer parameter that is not supported. + +## 2.17.0 + +### Minor Changes + +- 01f1e3f7e: Dropped support for node v14 and added support for node v20 + +### Patch Changes + +- 092b77140: Added logic to use the latest block as the forking block if the difference between the latest block and the max reorganization block is negative. This decision is based on the assumption that if the max reorganization block is greater than the latest block then there is a high probability that the fork is occurring on a devnet. +- 2b0ac92a3: Fixed an issue in the compilation pipeline where a valid build-info file was mistakenly deleted +- c0aa10c2d: Added support for solc 0.8.19 and 0.8.20 + +## 2.16.1 + +### Patch Changes + +- 68cf2a273: Fixed an issue related to compiler downloads in node v18.16.x + +## 2.16.0 + +### Minor Changes + +- 8c5f3f3bc: Added support for extending the network provider + +### Patch Changes + +- 128b0a0de: Added a HARDHAT_DISABLE_TELEMETRY_PROMPT environment variable that can be set to `true` to prevent Hardhat from showing the telemetry consent prompt. +- 27a5cda59: Migrated Google Universal Analytics to Google Analytics 4 +- c115dfd21: `console.sol` is now memory-safe (thanks @ZumZoom!) +- c61fd8ac0: Added optional params to some compilation subtasks to make them more flexible (thanks @adjisb!) + +## 2.15.0 + +### Minor Changes + +- 99995d53b: The sample projects now use the new version of the Toolbox + +## 2.14.1 + +### Patch Changes + +- e99498638: Added block numbers for all mainnet hardforks + ## 2.14.0 ### Minor Changes diff --git a/packages/hardhat-core/LICENSE b/packages/hardhat-core/LICENSE index 845dc73d24..9156bcfc0b 100644 --- a/packages/hardhat-core/LICENSE +++ b/packages/hardhat-core/LICENSE @@ -5,7 +5,7 @@ the MIT License as defined below. The MIT License -Copyright (c) 2019 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-core/README.md b/packages/hardhat-core/README.md index 883915bccf..abf058d8a2 100644 --- a/packages/hardhat-core/README.md +++ b/packages/hardhat-core/README.md @@ -19,7 +19,7 @@ npm install --save-dev hardhat Once it's installed, just run this command and follow its instructions: ``` -npx hardhat +npx hardhat init ``` ## Documentation diff --git a/packages/hardhat-core/console.sol b/packages/hardhat-core/console.sol index f38d19a913..f070e13f9a 100644 --- a/packages/hardhat-core/console.sol +++ b/packages/hardhat-core/console.sol @@ -1,1532 +1,1552 @@ // SPDX-License-Identifier: MIT -pragma solidity >= 0.4.22 <0.9.0; +pragma solidity >=0.4.22 <0.9.0; library console { - address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); - - function _sendLogPayload(bytes memory payload) private view { - uint256 payloadLength = payload.length; - address consoleAddress = CONSOLE_ADDRESS; - assembly { - let payloadStart := add(payload, 32) - let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) - } - } + address constant CONSOLE_ADDRESS = + 0x000000000000000000636F6e736F6c652e6c6f67; + + function _sendLogPayloadImplementation(bytes memory payload) internal view { + address consoleAddress = CONSOLE_ADDRESS; + /// @solidity memory-safe-assembly + assembly { + pop( + staticcall( + gas(), + consoleAddress, + add(payload, 32), + mload(payload), + 0, + 0 + ) + ) + } + } + + function _castToPure( + function(bytes memory) internal view fnIn + ) internal pure returns (function(bytes memory) pure fnOut) { + assembly { + fnOut := fnIn + } + } + + function _sendLogPayload(bytes memory payload) internal pure { + _castToPure(_sendLogPayloadImplementation)(payload); + } + + function log() internal pure { + _sendLogPayload(abi.encodeWithSignature("log()")); + } + function logInt(int256 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(int256)", p0)); + } + + function logUint(uint256 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); + } + + function logString(string memory p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); + } + + function logBool(bool p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); + } + + function logAddress(address p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); + } + + function logBytes(bytes memory p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); + } + + function logBytes1(bytes1 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); + } + + function logBytes2(bytes2 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); + } + + function logBytes3(bytes3 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); + } + + function logBytes4(bytes4 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); + } + + function logBytes5(bytes5 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); + } + + function logBytes6(bytes6 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); + } + + function logBytes7(bytes7 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); + } + + function logBytes8(bytes8 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); + } + + function logBytes9(bytes9 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); + } + + function logBytes10(bytes10 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); + } + + function logBytes11(bytes11 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); + } + + function logBytes12(bytes12 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); + } + + function logBytes13(bytes13 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); + } + + function logBytes14(bytes14 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); + } + + function logBytes15(bytes15 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); + } + + function logBytes16(bytes16 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); + } + + function logBytes17(bytes17 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); + } - function log() internal view { - _sendLogPayload(abi.encodeWithSignature("log()")); - } + function logBytes18(bytes18 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); + } - function logInt(int256 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(int256)", p0)); - } + function logBytes19(bytes19 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); + } - function logUint(uint256 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); - } + function logBytes20(bytes20 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); + } - function logString(string memory p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); - } + function logBytes21(bytes21 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); + } - function logBool(bool p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); - } + function logBytes22(bytes22 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); + } - function logAddress(address p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); - } + function logBytes23(bytes23 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); + } - function logBytes(bytes memory p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); - } + function logBytes24(bytes24 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); + } - function logBytes1(bytes1 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); - } + function logBytes25(bytes25 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); + } - function logBytes2(bytes2 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); - } + function logBytes26(bytes26 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); + } - function logBytes3(bytes3 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); - } + function logBytes27(bytes27 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); + } - function logBytes4(bytes4 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); - } + function logBytes28(bytes28 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); + } - function logBytes5(bytes5 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); - } + function logBytes29(bytes29 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); + } - function logBytes6(bytes6 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); - } + function logBytes30(bytes30 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); + } - function logBytes7(bytes7 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); - } + function logBytes31(bytes31 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); + } - function logBytes8(bytes8 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); - } + function logBytes32(bytes32 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); + } - function logBytes9(bytes9 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); - } + function log(uint256 p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); + } - function logBytes10(bytes10 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); - } + function log(string memory p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); + } - function logBytes11(bytes11 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); - } + function log(bool p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); + } - function logBytes12(bytes12 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); - } + function log(address p0) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); + } - function logBytes13(bytes13 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); - } + function log(uint256 p0, uint256 p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1)); + } - function logBytes14(bytes14 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); - } + function log(uint256 p0, string memory p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1)); + } - function logBytes15(bytes15 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); - } + function log(uint256 p0, bool p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1)); + } - function logBytes16(bytes16 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); - } - - function logBytes17(bytes17 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); - } + function log(uint256 p0, address p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1)); + } - function logBytes18(bytes18 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); - } + function log(string memory p0, uint256 p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1)); + } - function logBytes19(bytes19 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); - } + function log(string memory p0, string memory p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); + } - function logBytes20(bytes20 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); - } + function log(string memory p0, bool p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); + } - function logBytes21(bytes21 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); - } + function log(string memory p0, address p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); + } - function logBytes22(bytes22 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); - } + function log(bool p0, uint256 p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1)); + } - function logBytes23(bytes23 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); - } + function log(bool p0, string memory p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); + } - function logBytes24(bytes24 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); - } + function log(bool p0, bool p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); + } - function logBytes25(bytes25 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); - } + function log(bool p0, address p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); + } - function logBytes26(bytes26 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); - } + function log(address p0, uint256 p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1)); + } - function logBytes27(bytes27 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); - } + function log(address p0, string memory p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); + } - function logBytes28(bytes28 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); - } + function log(address p0, bool p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); + } - function logBytes29(bytes29 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); - } + function log(address p0, address p1) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); + } - function logBytes30(bytes30 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); - } + function log(uint256 p0, uint256 p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2)); + } - function logBytes31(bytes31 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); - } + function log(uint256 p0, uint256 p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2)); + } - function logBytes32(bytes32 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); - } + function log(uint256 p0, uint256 p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2)); + } - function log(uint256 p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); - } + function log(uint256 p0, uint256 p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2)); + } - function log(string memory p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); - } + function log(uint256 p0, string memory p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2)); + } - function log(bool p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); - } + function log(uint256 p0, string memory p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2)); + } - function log(address p0) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); - } + function log(uint256 p0, string memory p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2)); + } - function log(uint256 p0, uint256 p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1)); - } + function log(uint256 p0, string memory p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2)); + } - function log(uint256 p0, string memory p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1)); - } + function log(uint256 p0, bool p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2)); + } - function log(uint256 p0, bool p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1)); - } + function log(uint256 p0, bool p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2)); + } - function log(uint256 p0, address p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1)); - } + function log(uint256 p0, bool p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2)); + } - function log(string memory p0, uint256 p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1)); - } + function log(uint256 p0, bool p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2)); + } - function log(string memory p0, string memory p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); - } + function log(uint256 p0, address p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2)); + } - function log(string memory p0, bool p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); - } + function log(uint256 p0, address p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2)); + } - function log(string memory p0, address p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); - } + function log(uint256 p0, address p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2)); + } - function log(bool p0, uint256 p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1)); - } + function log(uint256 p0, address p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2)); + } - function log(bool p0, string memory p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); - } + function log(string memory p0, uint256 p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2)); + } - function log(bool p0, bool p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); - } + function log(string memory p0, uint256 p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2)); + } - function log(bool p0, address p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); - } + function log(string memory p0, uint256 p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2)); + } - function log(address p0, uint256 p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1)); - } + function log(string memory p0, uint256 p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2)); + } - function log(address p0, string memory p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); - } + function log(string memory p0, string memory p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2)); + } - function log(address p0, bool p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); - } + function log(string memory p0, string memory p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); + } - function log(address p0, address p1) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); - } + function log(string memory p0, string memory p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); + } - function log(uint256 p0, uint256 p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2)); - } + function log(string memory p0, string memory p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); + } - function log(uint256 p0, uint256 p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2)); - } + function log(string memory p0, bool p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2)); + } - function log(uint256 p0, uint256 p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2)); - } + function log(string memory p0, bool p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); + } - function log(uint256 p0, uint256 p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2)); - } + function log(string memory p0, bool p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); + } - function log(uint256 p0, string memory p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2)); - } + function log(string memory p0, bool p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); + } - function log(uint256 p0, string memory p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2)); - } + function log(string memory p0, address p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2)); + } - function log(uint256 p0, string memory p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2)); - } + function log(string memory p0, address p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); + } - function log(uint256 p0, string memory p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2)); - } + function log(string memory p0, address p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); + } - function log(uint256 p0, bool p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2)); - } + function log(string memory p0, address p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); + } - function log(uint256 p0, bool p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2)); - } + function log(bool p0, uint256 p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2)); + } - function log(uint256 p0, bool p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2)); - } + function log(bool p0, uint256 p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2)); + } - function log(uint256 p0, bool p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2)); - } + function log(bool p0, uint256 p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2)); + } - function log(uint256 p0, address p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2)); - } + function log(bool p0, uint256 p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2)); + } - function log(uint256 p0, address p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2)); - } + function log(bool p0, string memory p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2)); + } - function log(uint256 p0, address p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2)); - } + function log(bool p0, string memory p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); + } - function log(uint256 p0, address p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2)); - } + function log(bool p0, string memory p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); + } - function log(string memory p0, uint256 p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2)); - } + function log(bool p0, string memory p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); + } - function log(string memory p0, uint256 p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2)); - } + function log(bool p0, bool p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2)); + } - function log(string memory p0, uint256 p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2)); - } + function log(bool p0, bool p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); + } - function log(string memory p0, uint256 p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2)); - } + function log(bool p0, bool p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); + } - function log(string memory p0, string memory p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2)); - } + function log(bool p0, bool p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); + } - function log(string memory p0, string memory p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); - } + function log(bool p0, address p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2)); + } - function log(string memory p0, string memory p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); - } + function log(bool p0, address p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); + } - function log(string memory p0, string memory p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); - } + function log(bool p0, address p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); + } - function log(string memory p0, bool p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2)); - } + function log(bool p0, address p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); + } - function log(string memory p0, bool p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); - } + function log(address p0, uint256 p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2)); + } - function log(string memory p0, bool p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); - } + function log(address p0, uint256 p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2)); + } - function log(string memory p0, bool p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); - } + function log(address p0, uint256 p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2)); + } - function log(string memory p0, address p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2)); - } + function log(address p0, uint256 p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2)); + } - function log(string memory p0, address p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); - } + function log(address p0, string memory p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2)); + } - function log(string memory p0, address p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); - } + function log(address p0, string memory p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); + } - function log(string memory p0, address p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); - } + function log(address p0, string memory p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); + } - function log(bool p0, uint256 p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2)); - } + function log(address p0, string memory p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); + } - function log(bool p0, uint256 p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2)); - } + function log(address p0, bool p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2)); + } - function log(bool p0, uint256 p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2)); - } + function log(address p0, bool p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); + } - function log(bool p0, uint256 p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2)); - } + function log(address p0, bool p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); + } - function log(bool p0, string memory p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2)); - } + function log(address p0, bool p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); + } - function log(bool p0, string memory p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); - } + function log(address p0, address p1, uint256 p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2)); + } - function log(bool p0, string memory p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); - } + function log(address p0, address p1, string memory p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); + } - function log(bool p0, string memory p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); - } + function log(address p0, address p1, bool p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); + } - function log(bool p0, bool p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2)); - } + function log(address p0, address p1, address p2) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); + } - function log(bool p0, bool p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3)); + } - function log(address p0, bool p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2)); - } + function log(uint256 p0, uint256 p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3)); + } - function log(address p0, bool p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); - } + function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3)); + } - function log(address p0, bool p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); - } + function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3)); + } - function log(address p0, bool p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); - } + function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3)); + } - function log(address p0, address p1, uint256 p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2)); - } + function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3)); + } - function log(address p0, address p1, string memory p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); - } + function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3)); + } - function log(address p0, address p1, bool p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); - } + function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3)); + } - function log(address p0, address p1, address p2) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); - } + function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3)); - } + function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3)); - } + function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3)); - } + function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3)); - } + function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3)); - } + function log(uint256 p0, string memory p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3)); - } + function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3)); - } + function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3)); - } + function log(uint256 p0, string memory p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3)); - } + function log(uint256 p0, string memory p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, uint256 p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3)); - } + function log(uint256 p0, bool p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, string memory p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3)); - } + function log(uint256 p0, address p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, bool p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, uint256 p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); + } - function log(uint256 p0, address p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, string memory p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); + } - function log(string memory p0, uint256 p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, bool p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); + } - function log(string memory p0, string memory p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3)); - } + function log(string memory p0, address p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3)); + } - function log(string memory p0, bool p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, uint256 p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); + } - function log(string memory p0, address p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, string memory p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); + } - function log(bool p0, uint256 p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, bool p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); + } - function log(bool p0, string memory p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", p0, p1, p2, p3)); - } + function log(bool p0, address p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3)); + } - function log(bool p0, bool p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", p0, p1, p2, p3)); - } + function log(address p0, uint256 p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); + } - function log(bool p0, address p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3)); - } + function log(address p0, string memory p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); + } - function log(address p0, uint256 p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", p0, p1, p2, p3)); - } + function log(address p0, bool p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); - } + function log(address p0, address p1, uint256 p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); - } + function log(address p0, address p1, uint256 p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); - } + function log(address p0, address p1, uint256 p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", p0, p1, p2, p3)); - } + function log(address p0, address p1, uint256 p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); - } + function log(address p0, address p1, string memory p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); - } + function log(address p0, address p1, string memory p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); + } - function log(address p0, string memory p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); - } + function log(address p0, address p1, string memory p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); + } - function log(address p0, bool p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3)); - } + function log(address p0, address p1, string memory p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); + } - function log(address p0, bool p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3)); - } + function log(address p0, address p1, bool p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", p0, p1, p2, p3)); + } - function log(address p0, bool p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3)); - } + function log(address p0, address p1, bool p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); + } - function log(address p0, bool p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3)); - } + function log(address p0, address p1, bool p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); + } - function log(address p0, bool p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", p0, p1, p2, p3)); - } + function log(address p0, address p1, bool p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); + } - function log(address p0, bool p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); - } + function log(address p0, address p1, address p2, uint256 p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", p0, p1, p2, p3)); + } - function log(address p0, bool p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); - } + function log(address p0, address p1, address p2, string memory p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); + } - function log(address p0, bool p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); - } + function log(address p0, address p1, address p2, bool p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); + } - function log(address p0, bool p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); - } - - function log(address p0, bool p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, uint256 p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, uint256 p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, uint256 p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, uint256 p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, string memory p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, string memory p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, string memory p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, string memory p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, bool p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, bool p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, bool p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, bool p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, address p2, uint256 p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, address p2, string memory p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, address p2, bool p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); - } - - function log(address p0, address p1, address p2, address p3) internal view { - _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); - } + function log(address p0, address p1, address p2, address p3) internal pure { + _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); + } } diff --git a/packages/hardhat-core/package.json b/packages/hardhat-core/package.json index b60fde820a..97280fea78 100644 --- a/packages/hardhat-core/package.json +++ b/packages/hardhat-core/package.json @@ -1,6 +1,6 @@ { "name": "hardhat", - "version": "2.14.0", + "version": "2.19.4", "author": "Nomic Labs LLC", "license": "MIT", "homepage": "https://hardhat.org", @@ -22,21 +22,19 @@ "bin": { "hardhat": "internal/cli/bootstrap.js" }, - "engines": { - "node": ">=14.0.0" - }, "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", "test": "mocha --recursive \"test/**/*.ts\"", "test:except-tracing": "mocha --recursive \"test/**/*.ts\" --invert --grep \"Stack traces\"", "test:tracing": "mocha --recursive \"test/internal/hardhat-network/{helpers,stack-traces}/**/*.ts\"", "test:forking": "mocha --recursive \"test/internal/hardhat-network/{helpers,jsonrpc,provider}/**/*.ts\"", "build": "tsc --build .", - "prepublishOnly": "yarn build", - "clean": "rimraf builtin-tasks internal types utils *.d.ts *.map *.js build-test tsconfig.tsbuildinfo test/internal/hardhat-network/provider/.hardhat_node_test_cache" + "prepublishOnly": "pnpm build", + "clean": "rimraf builtin-tasks internal types utils *.d.ts *.map *.js build-test tsconfig.tsbuildinfo test/internal/hardhat-network/provider/.hardhat_node_test_cache test/internal/hardhat-network/stack-traces/test-files/artifacts" }, "files": [ "builtin-tasks/", @@ -56,7 +54,8 @@ "console.sol" ], "devDependencies": { - "@nomiclabs/eslint-plugin-hardhat-internal-rules": "^1.0.0", + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", "@types/async-eventemitter": "^0.2.1", "@types/bn.js": "^5.1.0", "@types/chai": "^4.2.0", @@ -69,51 +68,50 @@ "@types/keccak": "^3.0.1", "@types/lodash": "^4.14.123", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@types/qs": "^6.5.3", + "@types/node": "^16.0.0", "@types/resolve": "^1.17.1", "@types/semver": "^6.0.2", "@types/sinon": "^9.0.8", "@types/uuid": "^8.3.1", "@types/ws": "^7.2.1", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "bignumber.js": "^9.0.2", "bn.js": "^5.1.0", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", - "eslint": "^7.29.0", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", - "ethers": "^5.0.0", + "ethers": "^6.1.0", + "ethers-v5": "npm:ethers@5", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", "sinon": "^9.0.0", "time-require": "^0.1.2", "ts-node": "^10.8.0", - "typescript": "~4.7.4" + "typescript": "~5.0.0" }, "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "5.0.1", - "@nomicfoundation/ethereumjs-blockchain": "7.0.1", - "@nomicfoundation/ethereumjs-common": "4.0.1", - "@nomicfoundation/ethereumjs-evm": "2.0.1", - "@nomicfoundation/ethereumjs-rlp": "5.0.1", - "@nomicfoundation/ethereumjs-statemanager": "2.0.1", - "@nomicfoundation/ethereumjs-trie": "6.0.1", - "@nomicfoundation/ethereumjs-tx": "5.0.1", - "@nomicfoundation/ethereumjs-util": "9.0.1", - "@nomicfoundation/ethereumjs-vm": "7.0.1", + "@nomicfoundation/ethereumjs-block": "5.0.2", + "@nomicfoundation/ethereumjs-blockchain": "7.0.2", + "@nomicfoundation/ethereumjs-common": "4.0.2", + "@nomicfoundation/ethereumjs-evm": "2.0.2", + "@nomicfoundation/ethereumjs-rlp": "5.0.2", + "@nomicfoundation/ethereumjs-statemanager": "2.0.2", + "@nomicfoundation/ethereumjs-trie": "6.0.2", + "@nomicfoundation/ethereumjs-tx": "5.0.2", + "@nomicfoundation/ethereumjs-util": "9.0.2", + "@nomicfoundation/ethereumjs-vm": "7.0.2", "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", "@types/bn.js": "^5.1.0", "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", "adm-zip": "^0.4.16", "aggregate-error": "^3.0.0", "ansi-escapes": "^4.3.0", @@ -136,7 +134,6 @@ "mnemonist": "^0.38.0", "mocha": "^10.0.0", "p-map": "^4.0.0", - "qs": "^6.7.0", "raw-body": "^2.4.1", "resolve": "1.17.0", "semver": "^6.3.0", diff --git a/packages/hardhat-core/recommended-gitignore.txt b/packages/hardhat-core/recommended-gitignore.txt index 00dad77349..9722dbfaf7 100644 --- a/packages/hardhat-core/recommended-gitignore.txt +++ b/packages/hardhat-core/recommended-gitignore.txt @@ -1,11 +1,14 @@ node_modules .env -coverage -coverage.json -typechain -typechain-types # Hardhat files -cache -artifacts +/cache +/artifacts +# TypeChain files +/typechain +/typechain-types + +# solidity-coverage files +/coverage +/coverage.json diff --git a/packages/hardhat-core/sample-projects/javascript-esm/hardhat.config.cjs b/packages/hardhat-core/sample-projects/javascript-esm/hardhat.config.cjs index 86913e7054..87c52f5f17 100644 --- a/packages/hardhat-core/sample-projects/javascript-esm/hardhat.config.cjs +++ b/packages/hardhat-core/sample-projects/javascript-esm/hardhat.config.cjs @@ -2,5 +2,5 @@ require("@nomicfoundation/hardhat-toolbox"); /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { - solidity: "0.8.17", + solidity: "0.8.19", }; diff --git a/packages/hardhat-core/sample-projects/javascript-esm/scripts/deploy.js b/packages/hardhat-core/sample-projects/javascript-esm/scripts/deploy.js index 05f8a19cd9..b17ce00262 100644 --- a/packages/hardhat-core/sample-projects/javascript-esm/scripts/deploy.js +++ b/packages/hardhat-core/sample-projects/javascript-esm/scripts/deploy.js @@ -9,15 +9,16 @@ import hre from "hardhat"; const currentTimestampInSeconds = Math.round(Date.now() / 1000); const unlockTime = currentTimestampInSeconds + 60; -const lockedAmount = hre.ethers.utils.parseEther("0.001"); +const lockedAmount = hre.ethers.parseEther("0.001"); -const Lock = await hre.ethers.getContractFactory("Lock"); -const lock = await Lock.deploy(unlockTime, { value: lockedAmount }); +const lock = await ethers.deployContract("Lock", [unlockTime], { + value: lockedAmount, +}); -await lock.deployed(); +await lock.waitForDeployment(); console.log( - `Lock with ${ethers.utils.formatEther( + `Lock with ${ethers.formatEther( lockedAmount - )}ETH and unlock timestamp ${unlockTime} deployed to ${lock.address}` + )}ETH and unlock timestamp ${unlockTime} deployed to ${lock.target}` ); diff --git a/packages/hardhat-core/sample-projects/javascript-esm/test/Lock.js b/packages/hardhat-core/sample-projects/javascript-esm/test/Lock.js index a046170d20..e55e5ddbb4 100644 --- a/packages/hardhat-core/sample-projects/javascript-esm/test/Lock.js +++ b/packages/hardhat-core/sample-projects/javascript-esm/test/Lock.js @@ -1,6 +1,11 @@ -import { time, loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import { + time, + loadFixture, +} from "@nomicfoundation/hardhat-toolbox/network-helpers.js"; import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs.js"; -import { expect } from "chai"; +import chai from "chai"; + +const { expect } = chai; describe("Lock", function () { // We define a fixture to reuse the same setup in every test. @@ -40,7 +45,7 @@ describe("Lock", function () { deployOneYearLockFixture ); - expect(await ethers.provider.getBalance(lock.address)).to.equal( + expect(await ethers.provider.getBalance(lock.target)).to.equal( lockedAmount ); }); diff --git a/packages/hardhat-core/sample-projects/javascript/hardhat.config.js b/packages/hardhat-core/sample-projects/javascript/hardhat.config.js index d5dd5f4e8d..87c52f5f17 100644 --- a/packages/hardhat-core/sample-projects/javascript/hardhat.config.js +++ b/packages/hardhat-core/sample-projects/javascript/hardhat.config.js @@ -2,5 +2,5 @@ require("@nomicfoundation/hardhat-toolbox"); /** @type import('hardhat/config').HardhatUserConfig */ module.exports = { - solidity: "0.8.18", + solidity: "0.8.19", }; diff --git a/packages/hardhat-core/sample-projects/javascript/scripts/deploy.js b/packages/hardhat-core/sample-projects/javascript/scripts/deploy.js index 745b18d4f7..39c08d67b2 100644 --- a/packages/hardhat-core/sample-projects/javascript/scripts/deploy.js +++ b/packages/hardhat-core/sample-projects/javascript/scripts/deploy.js @@ -10,17 +10,18 @@ async function main() { const currentTimestampInSeconds = Math.round(Date.now() / 1000); const unlockTime = currentTimestampInSeconds + 60; - const lockedAmount = hre.ethers.utils.parseEther("0.001"); + const lockedAmount = hre.ethers.parseEther("0.001"); - const Lock = await hre.ethers.getContractFactory("Lock"); - const lock = await Lock.deploy(unlockTime, { value: lockedAmount }); + const lock = await hre.ethers.deployContract("Lock", [unlockTime], { + value: lockedAmount, + }); - await lock.deployed(); + await lock.waitForDeployment(); console.log( - `Lock with ${ethers.utils.formatEther( + `Lock with ${ethers.formatEther( lockedAmount - )}ETH and unlock timestamp ${unlockTime} deployed to ${lock.address}` + )}ETH and unlock timestamp ${unlockTime} deployed to ${lock.target}` ); } diff --git a/packages/hardhat-core/sample-projects/javascript/test/Lock.js b/packages/hardhat-core/sample-projects/javascript/test/Lock.js index 6a161e6d44..f0e6ba1b2c 100644 --- a/packages/hardhat-core/sample-projects/javascript/test/Lock.js +++ b/packages/hardhat-core/sample-projects/javascript/test/Lock.js @@ -1,7 +1,7 @@ const { time, loadFixture, -} = require("@nomicfoundation/hardhat-network-helpers"); +} = require("@nomicfoundation/hardhat-toolbox/network-helpers"); const { anyValue } = require("@nomicfoundation/hardhat-chai-matchers/withArgs"); const { expect } = require("chai"); @@ -43,7 +43,7 @@ describe("Lock", function () { deployOneYearLockFixture ); - expect(await ethers.provider.getBalance(lock.address)).to.equal( + expect(await ethers.provider.getBalance(lock.target)).to.equal( lockedAmount ); }); diff --git a/packages/hardhat-core/sample-projects/typescript-viem/LICENSE.md b/packages/hardhat-core/sample-projects/typescript-viem/LICENSE.md new file mode 100644 index 0000000000..c539a505b4 --- /dev/null +++ b/packages/hardhat-core/sample-projects/typescript-viem/LICENSE.md @@ -0,0 +1,11 @@ +# License + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. + +In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to [https://unlicense.org](https://unlicense.org) diff --git a/packages/hardhat-core/sample-projects/typescript-viem/README.md b/packages/hardhat-core/sample-projects/typescript-viem/README.md new file mode 100644 index 0000000000..7be82e5d68 --- /dev/null +++ b/packages/hardhat-core/sample-projects/typescript-viem/README.md @@ -0,0 +1,13 @@ +# Sample Hardhat Project + +This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, and a script that deploys that contract. + +Try running some of the following tasks: + +```shell +npx hardhat help +npx hardhat test +REPORT_GAS=true npx hardhat test +npx hardhat node +npx hardhat run scripts/deploy.ts +``` diff --git a/packages/hardhat-core/sample-projects/typescript-viem/contracts/Lock.sol b/packages/hardhat-core/sample-projects/typescript-viem/contracts/Lock.sol new file mode 100644 index 0000000000..50935f61fd --- /dev/null +++ b/packages/hardhat-core/sample-projects/typescript-viem/contracts/Lock.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.9; + +// Uncomment this line to use console.log +// import "hardhat/console.sol"; + +contract Lock { + uint public unlockTime; + address payable public owner; + + event Withdrawal(uint amount, uint when); + + constructor(uint _unlockTime) payable { + require( + block.timestamp < _unlockTime, + "Unlock time should be in the future" + ); + + unlockTime = _unlockTime; + owner = payable(msg.sender); + } + + function withdraw() public { + // Uncomment this line, and the import of "hardhat/console.sol", to print a log in your terminal + // console.log("Unlock time is %o and block timestamp is %o", unlockTime, block.timestamp); + + require(block.timestamp >= unlockTime, "You can't withdraw yet"); + require(msg.sender == owner, "You aren't the owner"); + + emit Withdrawal(address(this).balance, block.timestamp); + + owner.transfer(address(this).balance); + } +} diff --git a/packages/hardhat-core/sample-projects/typescript-viem/hardhat.config.ts b/packages/hardhat-core/sample-projects/typescript-viem/hardhat.config.ts new file mode 100644 index 0000000000..814b1ebce3 --- /dev/null +++ b/packages/hardhat-core/sample-projects/typescript-viem/hardhat.config.ts @@ -0,0 +1,8 @@ +import { HardhatUserConfig } from "hardhat/config"; +import "@nomicfoundation/hardhat-toolbox-viem"; + +const config: HardhatUserConfig = { + solidity: "0.8.19", +}; + +export default config; diff --git a/packages/hardhat-core/sample-projects/typescript-viem/scripts/deploy.ts b/packages/hardhat-core/sample-projects/typescript-viem/scripts/deploy.ts new file mode 100644 index 0000000000..44dc5df8af --- /dev/null +++ b/packages/hardhat-core/sample-projects/typescript-viem/scripts/deploy.ts @@ -0,0 +1,26 @@ +import { formatEther, parseEther } from "viem"; +import hre from "hardhat"; + +async function main() { + const currentTimestampInSeconds = Math.round(Date.now() / 1000); + const unlockTime = BigInt(currentTimestampInSeconds + 60); + + const lockedAmount = parseEther("0.001"); + + const lock = await hre.viem.deployContract("Lock", [unlockTime], { + value: lockedAmount, + }); + + console.log( + `Lock with ${formatEther( + lockedAmount + )}ETH and unlock timestamp ${unlockTime} deployed to ${lock.address}` + ); +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/packages/hardhat-core/sample-projects/typescript-viem/test/Lock.ts b/packages/hardhat-core/sample-projects/typescript-viem/test/Lock.ts new file mode 100644 index 0000000000..59d6906d96 --- /dev/null +++ b/packages/hardhat-core/sample-projects/typescript-viem/test/Lock.ts @@ -0,0 +1,132 @@ +import { + time, + loadFixture, +} from "@nomicfoundation/hardhat-toolbox-viem/network-helpers"; +import { expect } from "chai"; +import hre from "hardhat"; +import { getAddress, parseGwei } from "viem"; + +describe("Lock", function () { + // We define a fixture to reuse the same setup in every test. + // We use loadFixture to run this setup once, snapshot that state, + // and reset Hardhat Network to that snapshot in every test. + async function deployOneYearLockFixture() { + const ONE_YEAR_IN_SECS = 365 * 24 * 60 * 60; + + const lockedAmount = parseGwei("1"); + const unlockTime = BigInt((await time.latest()) + ONE_YEAR_IN_SECS); + + // Contracts are deployed using the first signer/account by default + const [owner, otherAccount] = await hre.viem.getWalletClients(); + + const lock = await hre.viem.deployContract("Lock", [unlockTime], { + value: lockedAmount, + }); + + const publicClient = await hre.viem.getPublicClient(); + + return { + lock, + unlockTime, + lockedAmount, + owner, + otherAccount, + publicClient, + }; + } + + describe("Deployment", function () { + it("Should set the right unlockTime", async function () { + const { lock, unlockTime } = await loadFixture(deployOneYearLockFixture); + + expect(await lock.read.unlockTime()).to.equal(unlockTime); + }); + + it("Should set the right owner", async function () { + const { lock, owner } = await loadFixture(deployOneYearLockFixture); + + expect(await lock.read.owner()).to.equal(getAddress(owner.account.address)); + }); + + it("Should receive and store the funds to lock", async function () { + const { lock, lockedAmount, publicClient } = await loadFixture( + deployOneYearLockFixture + ); + + expect( + await publicClient.getBalance({ + address: lock.address, + }) + ).to.equal(lockedAmount); + }); + + it("Should fail if the unlockTime is not in the future", async function () { + // We don't use the fixture here because we want a different deployment + const latestTime = BigInt(await time.latest()); + await expect( + hre.viem.deployContract("Lock", [latestTime], { + value: 1n, + }) + ).to.be.rejectedWith("Unlock time should be in the future"); + }); + }); + + describe("Withdrawals", function () { + describe("Validations", function () { + it("Should revert with the right error if called too soon", async function () { + const { lock } = await loadFixture(deployOneYearLockFixture); + + await expect(lock.write.withdraw()).to.be.rejectedWith( + "You can't withdraw yet" + ); + }); + + it("Should revert with the right error if called from another account", async function () { + const { lock, unlockTime, otherAccount } = await loadFixture( + deployOneYearLockFixture + ); + + // We can increase the time in Hardhat Network + await time.increaseTo(unlockTime); + + // We retrieve the contract with a different account to send a transaction + const lockAsOtherAccount = await hre.viem.getContractAt( + "Lock", + lock.address, + { walletClient: otherAccount } + ); + await expect(lockAsOtherAccount.write.withdraw()).to.be.rejectedWith( + "You aren't the owner" + ); + }); + + it("Shouldn't fail if the unlockTime has arrived and the owner calls it", async function () { + const { lock, unlockTime } = await loadFixture( + deployOneYearLockFixture + ); + + // Transactions are sent using the first signer by default + await time.increaseTo(unlockTime); + + await expect(lock.write.withdraw()).to.be.fulfilled; + }); + }); + + describe("Events", function () { + it("Should emit an event on withdrawals", async function () { + const { lock, unlockTime, lockedAmount, publicClient } = + await loadFixture(deployOneYearLockFixture); + + await time.increaseTo(unlockTime); + + const hash = await lock.write.withdraw(); + await publicClient.waitForTransactionReceipt({ hash }); + + // get the withdrawal events in the latest block + const withdrawalEvents = await lock.getEvents.Withdrawal() + expect(withdrawalEvents).to.have.lengthOf(1); + expect(withdrawalEvents[0].args.amount).to.equal(lockedAmount); + }); + }); + }); +}); diff --git a/packages/hardhat-core/sample-projects/typescript-viem/tsconfig.json b/packages/hardhat-core/sample-projects/typescript-viem/tsconfig.json new file mode 100644 index 0000000000..574e785c71 --- /dev/null +++ b/packages/hardhat-core/sample-projects/typescript-viem/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true + } +} diff --git a/packages/hardhat-core/sample-projects/typescript/hardhat.config.ts b/packages/hardhat-core/sample-projects/typescript/hardhat.config.ts index cd8df42afa..c4ef851c04 100644 --- a/packages/hardhat-core/sample-projects/typescript/hardhat.config.ts +++ b/packages/hardhat-core/sample-projects/typescript/hardhat.config.ts @@ -2,7 +2,7 @@ import { HardhatUserConfig } from "hardhat/config"; import "@nomicfoundation/hardhat-toolbox"; const config: HardhatUserConfig = { - solidity: "0.8.18", + solidity: "0.8.19", }; export default config; diff --git a/packages/hardhat-core/sample-projects/typescript/scripts/deploy.ts b/packages/hardhat-core/sample-projects/typescript/scripts/deploy.ts index cf9c177ea7..181925391f 100644 --- a/packages/hardhat-core/sample-projects/typescript/scripts/deploy.ts +++ b/packages/hardhat-core/sample-projects/typescript/scripts/deploy.ts @@ -4,15 +4,18 @@ async function main() { const currentTimestampInSeconds = Math.round(Date.now() / 1000); const unlockTime = currentTimestampInSeconds + 60; - const lockedAmount = ethers.utils.parseEther("0.001"); + const lockedAmount = ethers.parseEther("0.001"); - const Lock = await ethers.getContractFactory("Lock"); - const lock = await Lock.deploy(unlockTime, { value: lockedAmount }); + const lock = await ethers.deployContract("Lock", [unlockTime], { + value: lockedAmount, + }); - await lock.deployed(); + await lock.waitForDeployment(); console.log( - `Lock with ${ethers.utils.formatEther(lockedAmount)}ETH and unlock timestamp ${unlockTime} deployed to ${lock.address}` + `Lock with ${ethers.formatEther( + lockedAmount + )}ETH and unlock timestamp ${unlockTime} deployed to ${lock.target}` ); } diff --git a/packages/hardhat-core/sample-projects/typescript/test/Lock.ts b/packages/hardhat-core/sample-projects/typescript/test/Lock.ts index 92e0dc7f40..a6e866b400 100644 --- a/packages/hardhat-core/sample-projects/typescript/test/Lock.ts +++ b/packages/hardhat-core/sample-projects/typescript/test/Lock.ts @@ -1,4 +1,7 @@ -import { time, loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import { + time, + loadFixture, +} from "@nomicfoundation/hardhat-toolbox/network-helpers"; import { anyValue } from "@nomicfoundation/hardhat-chai-matchers/withArgs"; import { expect } from "chai"; import { ethers } from "hardhat"; @@ -41,7 +44,7 @@ describe("Lock", function () { deployOneYearLockFixture ); - expect(await ethers.provider.getBalance(lock.address)).to.equal( + expect(await ethers.provider.getBalance(lock.target)).to.equal( lockedAmount ); }); diff --git a/packages/hardhat-core/scripts/console-library-generator.js b/packages/hardhat-core/scripts/console-library-generator.js index a688a3db82..38cde9f8f9 100644 --- a/packages/hardhat-core/scripts/console-library-generator.js +++ b/packages/hardhat-core/scripts/console-library-generator.js @@ -3,10 +3,11 @@ const fs = require("fs"); const { keccak256 } = require("../internal/util/keccak"); -const functionPrefix = "\tfunction"; +const functionPrefix = " function"; const functionBody = - ") internal view {" + '\n\t\t_sendLogPayload(abi.encodeWithSignature("log('; -const functionSuffix = "));" + "\n\t}" + "\n" + "\n"; + ") internal pure {" + + '\n _sendLogPayload(abi.encodeWithSignature("log('; +const functionSuffix = "));" + "\n }" + "\n" + "\n"; let logger = "// ------------------------------------\n" + @@ -37,29 +38,46 @@ for (let i = 1; i <= 32; i++) { const types = ["uint256", "string memory", "bool", "address"]; -let consoleSolFile = - "// SPDX-License-Identifier: MIT\n" + - "pragma solidity >= 0.4.22 <0.9.0;" + - "\n" + - "\n" + - "library console {" + - "\n" + - "\taddress constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);" + - "\n" + - "\n" + - "\tfunction _sendLogPayload(bytes memory payload) private view {\n" + - "\t\tuint256 payloadLength = payload.length;\n" + - "\t\taddress consoleAddress = CONSOLE_ADDRESS;\n" + - "\t\tassembly {\n" + - "\t\t\tlet payloadStart := add(payload, 32)\n" + - "\t\t\tlet r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)\n" + - "\t\t}\n" + - "\t}\n" + - "\n" + - "\tfunction log() internal view {\n" + - '\t\t_sendLogPayload(abi.encodeWithSignature("log()"));\n' + - "\t}\n" + - "\n"; +let consoleSolFile = `// SPDX-License-Identifier: MIT +pragma solidity >=0.4.22 <0.9.0; + +library console { + address constant CONSOLE_ADDRESS = + 0x000000000000000000636F6e736F6c652e6c6f67; + + function _sendLogPayloadImplementation(bytes memory payload) internal view { + address consoleAddress = CONSOLE_ADDRESS; + /// @solidity memory-safe-assembly + assembly { + pop( + staticcall( + gas(), + consoleAddress, + add(payload, 32), + mload(payload), + 0, + 0 + ) + ) + } + } + + function _castToPure( + function(bytes memory) internal view fnIn + ) internal pure returns (function(bytes memory) pure fnOut) { + assembly { + fnOut := fnIn + } + } + + function _sendLogPayload(bytes memory payload) internal pure { + _castToPure(_sendLogPayloadImplementation)(payload); + } + + function log() internal pure { + _sendLogPayload(abi.encodeWithSignature("log()")); + } +`; logger += "\n// In order to optimize map lookup\n" + @@ -68,7 +86,7 @@ logger += // Add the empty log() first const sigInt = eutil.bufferToInt( - keccak256(eutil.bufArrToArr(Buffer.from("log" + "()"))).slice(0, 4) + keccak256(Buffer.from("log" + "()")).slice(0, 4) ); logger += " " + sigInt + ": [],\n"; @@ -81,10 +99,7 @@ for (let i = 0; i < singleTypes.length; i++) { typeAliasedInt.charAt(0).toUpperCase() + typeAliasedInt.slice(1); const sigInt = eutil.bufferToInt( - keccak256(eutil.bufArrToArr(Buffer.from("log" + "(" + type + ")"))).slice( - 0, - 4 - ) + keccak256(Buffer.from("log" + "(" + type + ")")).slice(0, 4) ); logger += " " + @@ -95,9 +110,7 @@ for (let i = 0; i < singleTypes.length; i++) { "Ty],\n"; const sigIntAliasedInt = eutil.bufferToInt( - keccak256( - eutil.bufArrToArr(Buffer.from("log" + "(" + typeAliasedInt + ")")) - ).slice(0, 4) + keccak256(Buffer.from("log" + "(" + typeAliasedInt + ")")).slice(0, 4) ); if (sigIntAliasedInt !== sigInt) { logger += @@ -176,17 +189,13 @@ for (let i = 0; i < maxNumberOfParameters; i++) { if (sigParams.length !== 1) { const sigInt = eutil.bufferToInt( - keccak256( - eutil.bufArrToArr(Buffer.from("log(" + sigParams.join(",") + ")")) - ).slice(0, 4) + keccak256(Buffer.from("log(" + sigParams.join(",") + ")")).slice(0, 4) ); logger += " " + sigInt + ": [" + constParams.join(", ") + "],\n"; const sigIntAliasedInt = eutil.bufferToInt( keccak256( - eutil.bufArrToArr( - Buffer.from("log(" + sigParamsAliasedInt.join(",") + ")") - ) + Buffer.from("log(" + sigParamsAliasedInt.join(",") + ")") ).slice(0, 4) ); if (sigIntAliasedInt !== sigInt) { diff --git a/packages/hardhat-core/scripts/test-recent-mainnet-block.ts b/packages/hardhat-core/scripts/test-recent-mainnet-block.ts index d7c64ebab0..d677218f9c 100644 --- a/packages/hardhat-core/scripts/test-recent-mainnet-block.ts +++ b/packages/hardhat-core/scripts/test-recent-mainnet-block.ts @@ -4,11 +4,11 @@ import { makeForkClient } from "../src/internal/hardhat-network/provider/utils/m import { runFullBlock } from "../test/internal/hardhat-network/provider/utils/runFullBlock"; async function main() { - const rpcUrl = process.env.INFURA_URL; + const rpcUrl = process.env.ALCHEMY_URL; if (rpcUrl === undefined || rpcUrl === "") { console.error( - "[test-recent-mainnet-block] Missing INFURA_URL environment variable" + "[test-recent-mainnet-block] Missing ALCHEMY_URL environment variable" ); process.exit(1); } diff --git a/packages/hardhat-core/src/builtin-tasks/compile.ts b/packages/hardhat-core/src/builtin-tasks/compile.ts index 9575321e39..68fd55e0aa 100644 --- a/packages/hardhat-core/src/builtin-tasks/compile.ts +++ b/packages/hardhat-core/src/builtin-tasks/compile.ts @@ -40,9 +40,11 @@ import { getFullyQualifiedName } from "../utils/contract-names"; import { localPathToSourceName } from "../utils/source-names"; import { getAllFilesMatching } from "../internal/util/fs-utils"; +import { getEvmVersionFromSolcVersion } from "../internal/solidity/compiler/solc-info"; import { TASK_COMPILE, TASK_COMPILE_GET_COMPILATION_TASKS, + TASK_COMPILE_REMOVE_OBSOLETE_ARTIFACTS, TASK_COMPILE_SOLIDITY, TASK_COMPILE_SOLIDITY_CHECK_ERRORS, TASK_COMPILE_SOLIDITY_COMPILE, @@ -72,22 +74,17 @@ import { TASK_COMPILE_SOLIDITY_READ_FILE, TASK_COMPILE_SOLIDITY_RUN_SOLC, TASK_COMPILE_SOLIDITY_RUN_SOLCJS, - TASK_COMPILE_REMOVE_OBSOLETE_ARTIFACTS, TASK_COMPILE_TRANSFORM_IMPORT_NAME, + TASK_COMPILE_GET_REMAPPINGS, } from "./task-names"; import { getSolidityFilesCachePath, SolidityFilesCache, } from "./utils/solidity-files-cache"; -type ArtifactsEmittedPerFile = Array<{ - file: taskTypes.ResolvedFile; - artifactsEmitted: string[]; -}>; - type ArtifactsEmittedPerJob = Array<{ compilationJob: CompilationJob; - artifactsEmittedPerFile: ArtifactsEmittedPerFile; + artifactsEmittedPerFile: taskTypes.ArtifactsEmittedPerFile; }>; function isConsoleLogError(error: any): boolean { @@ -115,16 +112,18 @@ const DEFAULT_CONCURRENCY_LEVEL = Math.max(os.cpus().length - 1, 1); * This is the right task to override to change how the solidity files of the * project are obtained. */ -subtask( - TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS, - async (_, { config }): Promise => { - const paths = await getAllFilesMatching(config.paths.sources, (f) => - f.endsWith(".sol") - ); - - return paths; - } -); +subtask(TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS) + .addOptionalParam("sourcePath", undefined, undefined, types.string) + .setAction( + async ( + { sourcePath }: { sourcePath?: string }, + { config } + ): Promise => { + return getAllFilesMatching(sourcePath ?? config.paths.sources, (f) => + f.endsWith(".sol") + ); + } + ); /** * Receives a list of absolute paths and returns a list of source names @@ -134,17 +133,24 @@ subtask( * is generated. */ subtask(TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES) + .addOptionalParam("rootPath", undefined, undefined, types.string) .addParam("sourcePaths", undefined, undefined, types.any) .setAction( async ( - { sourcePaths }: { sourcePaths: string[] }, + { + rootPath, + sourcePaths, + }: { + rootPath?: string; + sourcePaths: string[]; + }, { config } ): Promise => { - const sourceNames = await Promise.all( - sourcePaths.map((p) => localPathToSourceName(config.paths.root, p)) + return Promise.all( + sourcePaths.map((p) => + localPathToSourceName(rootPath ?? config.paths.root, p) + ) ); - - return sourceNames; } ); @@ -152,15 +158,26 @@ subtask(TASK_COMPILE_SOLIDITY_READ_FILE) .addParam("absolutePath", undefined, undefined, types.string) .setAction( async ({ absolutePath }: { absolutePath: string }): Promise => { - const content = await fsExtra.readFile(absolutePath, { - encoding: "utf8", - }); + try { + return await fsExtra.readFile(absolutePath, { + encoding: "utf8", + }); + } catch (e) { + if (fsExtra.lstatSync(absolutePath).isDirectory()) { + throw new HardhatError(ERRORS.GENERAL.INVALID_READ_OF_DIRECTORY, { + absolutePath, + }); + } - return content; + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error + throw e; + } } ); /** + * DEPRECATED: This subtask is deprecated and will be removed in the future. + * * This task transform the string literal in an import directive. * By default it does nothing, but it can be overriden by plugins. */ @@ -172,41 +189,58 @@ subtask(TASK_COMPILE_TRANSFORM_IMPORT_NAME) } ); +/** + * This task returns a Record representing remappings to be used + * by the resolver. + */ +subtask(TASK_COMPILE_GET_REMAPPINGS).setAction( + async (): Promise> => { + return {}; + } +); + /** * Receives a list of source names and returns a dependency graph. This task * is responsible for both resolving dependencies (like getting files from * node_modules) and generating the graph. */ subtask(TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH) + .addOptionalParam("rootPath", undefined, undefined, types.string) .addParam("sourceNames", undefined, undefined, types.any) .addOptionalParam("solidityFilesCache", undefined, undefined, types.any) .setAction( async ( { + rootPath, sourceNames, solidityFilesCache, - }: { sourceNames: string[]; solidityFilesCache?: SolidityFilesCache }, + }: { + rootPath?: string; + sourceNames: string[]; + solidityFilesCache?: SolidityFilesCache; + }, { config, run } ): Promise => { const parser = new Parser(solidityFilesCache); + const remappings = await run(TASK_COMPILE_GET_REMAPPINGS); const resolver = new Resolver( - config.paths.root, + rootPath ?? config.paths.root, parser, + remappings, (absolutePath: string) => run(TASK_COMPILE_SOLIDITY_READ_FILE, { absolutePath }), (importName: string) => - run(TASK_COMPILE_TRANSFORM_IMPORT_NAME, { importName }) + run(TASK_COMPILE_TRANSFORM_IMPORT_NAME, { + importName, + deprecationCheck: true, + }) ); const resolvedFiles = await Promise.all( sourceNames.map((sn) => resolver.resolveSourceName(sn)) ); - const dependencyGraph = await DependencyGraph.createFromResolvedFiles( - resolver, - resolvedFiles - ); - return dependencyGraph; + return DependencyGraph.createFromResolvedFiles(resolver, resolvedFiles); } ); @@ -405,27 +439,19 @@ subtask(TASK_COMPILE_SOLIDITY_COMPILE_JOBS) log(`Compiling ${compilationJobs.length} jobs`); - const versionList: string[] = []; for (const job of compilationJobs) { const solcVersion = job.getSolcConfig().version; - if (!versionList.includes(solcVersion)) { - // versions older than 0.4.11 don't work with hardhat - // see issue https://github.com/nomiclabs/hardhat/issues/2004 - if ( - semver.lt(solcVersion, COMPILE_TASK_FIRST_SOLC_VERSION_SUPPORTED) - ) { - throw new HardhatError( - ERRORS.BUILTIN_TASKS.COMPILE_TASK_UNSUPPORTED_SOLC_VERSION, - { - version: solcVersion, - firstSupportedVersion: - COMPILE_TASK_FIRST_SOLC_VERSION_SUPPORTED, - } - ); - } - - versionList.push(solcVersion); + // versions older than 0.4.11 don't work with hardhat + // see issue https://github.com/nomiclabs/hardhat/issues/2004 + if (semver.lt(solcVersion, COMPILE_TASK_FIRST_SOLC_VERSION_SUPPORTED)) { + throw new HardhatError( + ERRORS.BUILTIN_TASKS.COMPILE_TASK_UNSUPPORTED_SOLC_VERSION, + { + version: solcVersion, + firstSupportedVersion: COMPILE_TASK_FIRST_SOLC_VERSION_SUPPORTED, + } + ); } } @@ -453,7 +479,7 @@ subtask(TASK_COMPILE_SOLIDITY_COMPILE_JOBS) return { artifactsEmittedPerJob }; } catch (e) { if (!(e instanceof AggregateError)) { - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw e; } @@ -464,7 +490,7 @@ subtask(TASK_COMPILE_SOLIDITY_COMPILE_JOBS) ERRORS.BUILTIN_TASKS.COMPILE_FAILURE ) ) { - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } } @@ -554,26 +580,26 @@ subtask(TASK_COMPILE_SOLIDITY_GET_SOLC_BUILD) compilersCache ); - const isCompilerDownloaded = await downloader.isCompilerDownloaded( - solcVersion + await downloader.downloadCompiler( + solcVersion, + // callback called before compiler download + async (isCompilerDownloaded: boolean) => { + await run(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_START, { + solcVersion, + isCompilerDownloaded, + quiet, + }); + }, + // callback called after compiler download + async (isCompilerDownloaded: boolean) => { + await run(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_END, { + solcVersion, + isCompilerDownloaded, + quiet, + }); + } ); - if (!isCompilerDownloaded) { - await run(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_START, { - solcVersion, - isCompilerDownloaded, - quiet, - }); - - await downloader.downloadCompiler(solcVersion); - - await run(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_END, { - solcVersion, - isCompilerDownloaded, - quiet, - }); - } - const compiler = await downloader.getCompiler(solcVersion); if (compiler !== undefined) { @@ -589,24 +615,25 @@ subtask(TASK_COMPILE_SOLIDITY_GET_SOLC_BUILD) compilersCache ); - const isWasmCompilerDownloader = - await wasmDownloader.isCompilerDownloaded(solcVersion); - - if (!isWasmCompilerDownloader) { - await run(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_START, { - solcVersion, - isCompilerDownloaded, - quiet, - }); - - await wasmDownloader.downloadCompiler(solcVersion); - - await run(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_END, { - solcVersion, - isCompilerDownloaded, - quiet, - }); - } + await wasmDownloader.downloadCompiler( + solcVersion, + async (isCompilerDownloaded: boolean) => { + // callback called before compiler download + await run(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_START, { + solcVersion, + isCompilerDownloaded, + quiet, + }); + }, + // callback called after compiler download + async (isCompilerDownloaded: boolean) => { + await run(TASK_COMPILE_SOLIDITY_LOG_DOWNLOAD_COMPILER_END, { + solcVersion, + isCompilerDownloaded, + quiet, + }); + } + ); const wasmCompiler = await wasmDownloader.getCompiler(solcVersion); @@ -636,9 +663,7 @@ subtask(TASK_COMPILE_SOLIDITY_RUN_SOLCJS) }) => { const compiler = new Compiler(solcJsPath); - const output = await compiler.compile(input); - - return output; + return compiler.compile(input); } ); @@ -653,9 +678,7 @@ subtask(TASK_COMPILE_SOLIDITY_RUN_SOLC) async ({ input, solcPath }: { input: CompilerInput; solcPath: string }) => { const compiler = new NativeCompiler(solcPath); - const output = await compiler.compile(input); - - return output; + return compiler.compile(input); } ); @@ -827,7 +850,7 @@ subtask(TASK_COMPILE_SOLIDITY_EMIT_ARTIFACTS) }, { artifacts, run } ): Promise<{ - artifactsEmittedPerFile: ArtifactsEmittedPerFile; + artifactsEmittedPerFile: taskTypes.ArtifactsEmittedPerFile; }> => { const pathToBuildInfo = await artifacts.saveBuildInfo( compilationJob.getSolcConfig().version, @@ -836,7 +859,7 @@ subtask(TASK_COMPILE_SOLIDITY_EMIT_ARTIFACTS) output ); - const artifactsEmittedPerFile: ArtifactsEmittedPerFile = + const artifactsEmittedPerFile: taskTypes.ArtifactsEmittedPerFile = await Promise.all( compilationJob .getResolvedFiles() @@ -964,7 +987,7 @@ subtask(TASK_COMPILE_SOLIDITY_COMPILE_JOB) }, { run } ): Promise<{ - artifactsEmittedPerFile: ArtifactsEmittedPerFile; + artifactsEmittedPerFile: taskTypes.ArtifactsEmittedPerFile; compilationJob: taskTypes.CompilationJob; input: CompilerInput; output: CompilerOutput; @@ -1265,15 +1288,43 @@ subtask(TASK_COMPILE_SOLIDITY_LOG_COMPILATION_RESULT) .setAction( async ({ compilationJobs }: { compilationJobs: CompilationJob[] }) => { let count = 0; + const evmVersions = new Set(); + const unknownEvmVersions = new Set(); + for (const job of compilationJobs) { count += job .getResolvedFiles() .filter((file) => job.emitsArtifacts(file)).length; + + const solcVersion = job.getSolcConfig().version; + const evmTarget = + job.getSolcConfig().settings?.evmVersion ?? + getEvmVersionFromSolcVersion(solcVersion); + + if (evmTarget !== undefined) { + evmVersions.add(evmTarget); + } else { + unknownEvmVersions.add( + `unknown evm version for solc version ${solcVersion}` + ); + } } + const targetVersionsList = Array.from(evmVersions) + // Alphabetically sort evm versions. The unknown ones are added at the end + .sort() + .concat(Array.from(unknownEvmVersions).sort()); + if (count > 0) { console.log( - `Compiled ${count} Solidity ${pluralize(count, "file")} successfully` + `Compiled ${count} Solidity ${pluralize( + count, + "file" + )} successfully (evm ${pluralize( + targetVersionsList.length, + "target", + "targets" + )}: ${targetVersionsList.join(", ")}).` ); } } @@ -1298,13 +1349,16 @@ subtask(TASK_COMPILE_SOLIDITY) }: { force: boolean; quiet: boolean; concurrency: number }, { artifacts, config, run } ) => { + const rootPath = config.paths.root; + const sourcePaths: string[] = await run( - TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS + TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS, + { sourcePath: config.paths.sources } ); - const sourceNames: string[] = await run( TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES, { + rootPath, sourcePaths, } ); @@ -1316,7 +1370,7 @@ subtask(TASK_COMPILE_SOLIDITY) const dependencyGraph: taskTypes.DependencyGraph = await run( TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, - { sourceNames, solidityFilesCache } + { rootPath, sourceNames, solidityFilesCache } ); solidityFilesCache = await invalidateCacheMissingArtifacts( diff --git a/packages/hardhat-core/src/builtin-tasks/flatten.ts b/packages/hardhat-core/src/builtin-tasks/flatten.ts index 99652c7d77..c37b1a5af6 100644 --- a/packages/hardhat-core/src/builtin-tasks/flatten.ts +++ b/packages/hardhat-core/src/builtin-tasks/flatten.ts @@ -1,3 +1,4 @@ +import chalk from "chalk"; import { subtask, task, types } from "../internal/core/config/config-env"; import { HardhatError } from "../internal/core/errors"; import { ERRORS } from "../internal/core/errors-list"; @@ -13,8 +14,23 @@ import { TASK_FLATTEN, TASK_FLATTEN_GET_DEPENDENCY_GRAPH, TASK_FLATTEN_GET_FLATTENED_SOURCE, + TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA, } from "./task-names"; +interface FlattenMetadata { + filesWithoutLicenses: string[]; + pragmaDirective: string; + filesWithoutPragmaDirectives: string[]; + filesWithDifferentPragmaDirectives: string[]; +} + +// Match every group where a SPDX license is defined. The first captured group is the license. +const SPDX_LICENSES_REGEX = + /^(?:\/\/|\/\*)\s*SPDX-License-Identifier:\s*([a-zA-Z\d+.-]+).*/gm; +// Match every group where a pragma directive is defined. The first captured group is the pragma directive. +const PRAGMA_DIRECTIVES_REGEX = + /^(?: |\t)*(pragma\s*abicoder\s*v(1|2)|pragma\s*experimental\s*ABIEncoderV2)\s*;/gim; + function getSortedFiles(dependenciesGraph: DependencyGraph) { const tsort = require("tsort"); const graph = tsort(); @@ -58,7 +74,7 @@ function getSortedFiles(dependenciesGraph: DependencyGraph) { } } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } } @@ -71,34 +87,187 @@ function getFileWithoutImports(resolvedFile: ResolvedFile) { .trim(); } +function getLicensesInfo(sortedFiles: ResolvedFile[]): [string[], string[]] { + const licenses: Set = new Set(); + const filesWithoutLicenses: Set = new Set(); + + for (const file of sortedFiles) { + const matches = [...file.content.rawContent.matchAll(SPDX_LICENSES_REGEX)]; + + if (matches.length === 0) { + filesWithoutLicenses.add(file.sourceName); + continue; + } + + for (const groups of matches) { + licenses.add(groups[1]); + } + } + + // Sort alphabetically + return [Array.from(licenses).sort(), Array.from(filesWithoutLicenses).sort()]; +} + +function getLicensesHeader(licenses: string[]): string { + return licenses.length <= 0 + ? "" + : `\n\n// SPDX-License-Identifier: ${licenses.join(" AND ")}`; +} + +function removeUnnecessarySpaces(str: string): string { + return str.replace(/\s+/g, " ").trim(); +} + +function getPragmaAbicoderDirectiveInfo( + sortedFiles: ResolvedFile[] +): [string, string[], string[]] { + let directive = ""; + const directivesByImportance = [ + "pragma abicoder v1", + "pragma experimental ABIEncoderV2", + "pragma abicoder v2", + ]; + const filesWithoutPragmaDirectives: Set = new Set(); + const filesWithMostImportantDirective: Array<[string, string]> = []; // Every array element has the structure: [ fileName, fileMostImportantDirective ] + + for (const file of sortedFiles) { + const matches = [ + ...file.content.rawContent.matchAll(PRAGMA_DIRECTIVES_REGEX), + ]; + + if (matches.length === 0) { + filesWithoutPragmaDirectives.add(file.sourceName); + continue; + } + + let fileMostImportantDirective = ""; + for (const groups of matches) { + const normalizedPragma = removeUnnecessarySpaces(groups[1]); + + // Update the most important pragma directive among all the files + if ( + directivesByImportance.indexOf(normalizedPragma) > + directivesByImportance.indexOf(directive) + ) { + directive = normalizedPragma; + } + + // Update the most important pragma directive for the current file + if ( + directivesByImportance.indexOf(normalizedPragma) > + directivesByImportance.indexOf(fileMostImportantDirective) + ) { + fileMostImportantDirective = normalizedPragma; + } + } + + // Add in the array the most important directive for the current file + filesWithMostImportantDirective.push([ + file.sourceName, + fileMostImportantDirective, + ]); + } + + // Add to the array the files that have a pragma directive which is not the same as the main one that + // is going to be used in the flatten file + const filesWithDifferentPragmaDirectives = filesWithMostImportantDirective + .filter(([, fileDirective]) => fileDirective !== directive) + .map(([fileName]) => fileName); + + // Sort alphabetically + return [ + directive, + Array.from(filesWithoutPragmaDirectives).sort(), + filesWithDifferentPragmaDirectives.sort(), + ]; +} + +function getPragmaAbicoderDirectiveHeader(pragmaDirective: string): string { + return pragmaDirective === "" ? "" : `\n\n${pragmaDirective};`; +} + +function replaceLicenses(file: string): string { + return file.replaceAll( + SPDX_LICENSES_REGEX, + (...groups) => `// Original license: SPDX_License_Identifier: ${groups[1]}` + ); +} + +function replacePragmaAbicoderDirectives(file: string): string { + return file.replaceAll(PRAGMA_DIRECTIVES_REGEX, (...groups) => { + return `// Original pragma directive: ${removeUnnecessarySpaces( + groups[1] + )}`; + }); +} + subtask( - TASK_FLATTEN_GET_FLATTENED_SOURCE, - "Returns all contracts and their dependencies flattened" + TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA, + "Returns all contracts and their dependencies flattened. Also return metadata about pragma directives and SPDX licenses" ) .addOptionalParam("files", undefined, undefined, types.any) - .setAction(async ({ files }: { files?: string[] }, { run }) => { - const dependencyGraph: DependencyGraph = await run( - TASK_FLATTEN_GET_DEPENDENCY_GRAPH, - { files } - ); + .setAction( + async ( + { files }: { files?: string[] }, + { run } + ): Promise<[string, FlattenMetadata | null]> => { + const dependencyGraph: DependencyGraph = await run( + TASK_FLATTEN_GET_DEPENDENCY_GRAPH, + { files } + ); - let flattened = ""; + let flattened = ""; - if (dependencyGraph.getResolvedFiles().length === 0) { - return flattened; - } + if (dependencyGraph.getResolvedFiles().length === 0) { + return [flattened, null]; + } + + const packageJson = await getPackageJson(); + flattened += `// Sources flattened with hardhat v${packageJson.version} https://hardhat.org`; + + const sortedFiles = getSortedFiles(dependencyGraph); + + const [licenses, filesWithoutLicenses] = getLicensesInfo(sortedFiles); + const [ + pragmaDirective, + filesWithoutPragmaDirectives, + filesWithDifferentPragmaDirectives, + ] = getPragmaAbicoderDirectiveInfo(sortedFiles); - const packageJson = await getPackageJson(); - flattened += `// Sources flattened with hardhat v${packageJson.version} https://hardhat.org`; + flattened += getLicensesHeader(licenses); + flattened += getPragmaAbicoderDirectiveHeader(pragmaDirective); - const sortedFiles = getSortedFiles(dependencyGraph); + for (const file of sortedFiles) { + let tmpFile = getFileWithoutImports(file); + tmpFile = replaceLicenses(tmpFile); + tmpFile = replacePragmaAbicoderDirectives(tmpFile); - for (const file of sortedFiles) { - flattened += `\n\n// File ${file.getVersionedName()}\n`; - flattened += `\n${getFileWithoutImports(file)}\n`; + flattened += `\n\n// File ${file.getVersionedName()}\n`; + flattened += `\n${tmpFile}\n`; + } + + return [ + flattened.trim(), + { + filesWithoutLicenses, + pragmaDirective, + filesWithoutPragmaDirectives, + filesWithDifferentPragmaDirectives, + }, + ]; } + ); - return flattened.trim(); +// The following task is kept for backwards-compatibility reasons +subtask( + TASK_FLATTEN_GET_FLATTENED_SOURCE, + "Returns all contracts and their dependencies flattened" +) + .addOptionalParam("files", undefined, undefined, types.any) + .setAction(async ({ files }: { files?: string[] }, { run }) => { + return ( + await run(TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA, { files }) + )[0]; }); subtask(TASK_FLATTEN_GET_DEPENDENCY_GRAPH) @@ -135,5 +304,45 @@ task( types.inputFile ) .setAction(async ({ files }: { files: string[] | undefined }, { run }) => { - console.log(await run(TASK_FLATTEN_GET_FLATTENED_SOURCE, { files })); + const [flattenedFile, metadata]: [string, FlattenMetadata | null] = + await run(TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA, { files }); + + console.log(flattenedFile); + + if (metadata === null) return; + + if (metadata.filesWithoutLicenses.length > 0) { + console.warn( + chalk.yellow( + `\nThe following file(s) do NOT specify SPDX licenses: ${metadata.filesWithoutLicenses.join( + ", " + )}` + ) + ); + } + + if ( + metadata.pragmaDirective !== "" && + metadata.filesWithoutPragmaDirectives.length > 0 + ) { + console.warn( + chalk.yellow( + `\nPragma abicoder directives are defined in some files, but they are not defined in the following ones: ${metadata.filesWithoutPragmaDirectives.join( + ", " + )}` + ) + ); + } + + if (metadata.filesWithDifferentPragmaDirectives.length > 0) { + console.warn( + chalk.yellow( + `\nThe flattened file is using the pragma abicoder directive '${ + metadata.pragmaDirective + }' but these files have a different pragma abicoder directive: ${metadata.filesWithDifferentPragmaDirectives.join( + ", " + )}` + ) + ); + } }); diff --git a/packages/hardhat-core/src/builtin-tasks/help.ts b/packages/hardhat-core/src/builtin-tasks/help.ts index 0fe0a2fac7..85218e15ea 100644 --- a/packages/hardhat-core/src/builtin-tasks/help.ts +++ b/packages/hardhat-core/src/builtin-tasks/help.ts @@ -1,30 +1,72 @@ import { HelpPrinter } from "../internal/cli/HelpPrinter"; import { HARDHAT_EXECUTABLE_NAME, HARDHAT_NAME } from "../internal/constants"; import { task } from "../internal/core/config/config-env"; +import { HardhatError } from "../internal/core/errors"; +import { ERRORS } from "../internal/core/errors-list"; import { HARDHAT_PARAM_DEFINITIONS } from "../internal/core/params/hardhat-params"; import { TASK_HELP } from "./task-names"; task(TASK_HELP, "Prints this message") + .addOptionalPositionalParam( + "scopeOrTask", + "An optional scope or task to print more info about" + ) .addOptionalPositionalParam( "task", "An optional task to print more info about" ) .setAction( - async ({ task: taskName }: { task?: string }, { tasks, version }) => { + async ( + { scopeOrTask, task: taskName }: { scopeOrTask?: string; task?: string }, + { tasks, scopes, version } + ) => { const helpPrinter = new HelpPrinter( HARDHAT_NAME, HARDHAT_EXECUTABLE_NAME, version, HARDHAT_PARAM_DEFINITIONS, - tasks + tasks, + scopes ); - if (taskName !== undefined) { - helpPrinter.printTaskHelp(taskName); + if (scopeOrTask === undefined) { + // no params, print global help + helpPrinter.printGlobalHelp(); + return; + } + + const taskDefinition = tasks[scopeOrTask]; + if (taskDefinition !== undefined) { + // the first param is a valid task + helpPrinter.printTaskHelp(tasks[scopeOrTask]); + return; + } + + const scopeDefinition = scopes[scopeOrTask]; + if (scopeDefinition === undefined) { + // if the first parameter is neither a task nor a scope, + // we don't know what the user was trying to print, + // so we assume that it's an unrecognized task + throw new HardhatError(ERRORS.ARGUMENTS.UNRECOGNIZED_TASK, { + task: scopeOrTask, + }); + } + + if (taskName === undefined) { + // if the second parameter is not present, print scope help + helpPrinter.printScopeHelp(scopeDefinition); return; } - helpPrinter.printGlobalHelp(); + const scopedTaskDefinition = scopeDefinition.tasks[taskName]; + if (scopedTaskDefinition === undefined) { + throw new HardhatError(ERRORS.ARGUMENTS.UNRECOGNIZED_SCOPED_TASK, { + scope: scopeOrTask, + task: taskName, + }); + } + + helpPrinter.printTaskHelp(scopedTaskDefinition); } ); diff --git a/packages/hardhat-core/src/builtin-tasks/node.ts b/packages/hardhat-core/src/builtin-tasks/node.ts index 03edd41d3b..b5a9d44be7 100644 --- a/packages/hardhat-core/src/builtin-tasks/node.ts +++ b/packages/hardhat-core/src/builtin-tasks/node.ts @@ -109,13 +109,10 @@ subtask(TASK_NODE_GET_PROVIDER) let provider = network.provider; if (network.name !== HARDHAT_NETWORK_NAME) { - const networkConfig = config.networks[HARDHAT_NETWORK_NAME]; - log(`Creating hardhat provider for JSON-RPC server`); - provider = createProvider( + provider = await createProvider( + config, HARDHAT_NETWORK_NAME, - networkConfig, - config.paths, artifacts ); } @@ -377,7 +374,7 @@ task(TASK_NODE, "Starts a JSON-RPC server on top of Hardhat Network") ); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } } diff --git a/packages/hardhat-core/src/builtin-tasks/run.ts b/packages/hardhat-core/src/builtin-tasks/run.ts index 239a863175..d91c1c741b 100644 --- a/packages/hardhat-core/src/builtin-tasks/run.ts +++ b/packages/hardhat-core/src/builtin-tasks/run.ts @@ -49,7 +49,7 @@ task(TASK_RUN, "Runs a user-defined script after compiling the project") ); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } } diff --git a/packages/hardhat-core/src/builtin-tasks/task-names.ts b/packages/hardhat-core/src/builtin-tasks/task-names.ts index 901fb71ce3..790df3311c 100644 --- a/packages/hardhat-core/src/builtin-tasks/task-names.ts +++ b/packages/hardhat-core/src/builtin-tasks/task-names.ts @@ -14,6 +14,7 @@ export const TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES = export const TASK_COMPILE_SOLIDITY_READ_FILE = "compile:solidity:read-file"; export const TASK_COMPILE_TRANSFORM_IMPORT_NAME = "compile:solidity:transform-import-name"; +export const TASK_COMPILE_GET_REMAPPINGS = "compile:solidity:get-remappings"; export const TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH = "compile:solidity:get-dependency-graph"; export const TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS = @@ -68,6 +69,8 @@ export const TASK_CONSOLE = "console"; export const TASK_FLATTEN = "flatten"; export const TASK_FLATTEN_GET_FLATTENED_SOURCE = "flatten:get-flattened-sources"; +export const TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA = + "flatten:get-flattened-sources-and-metadata"; export const TASK_FLATTEN_GET_DEPENDENCY_GRAPH = "flatten:get-dependency-graph"; export const TASK_HELP = "help"; diff --git a/packages/hardhat-core/src/builtin-tasks/test.ts b/packages/hardhat-core/src/builtin-tasks/test.ts index 35c4ae217f..d6a5577571 100644 --- a/packages/hardhat-core/src/builtin-tasks/test.ts +++ b/packages/hardhat-core/src/builtin-tasks/test.ts @@ -7,7 +7,11 @@ import { HARDHAT_NETWORK_NAME } from "../internal/constants"; import { subtask, task } from "../internal/core/config/config-env"; import { HardhatError } from "../internal/core/errors"; import { ERRORS } from "../internal/core/errors-list"; -import { isRunningWithTypescript } from "../internal/core/typescript-support"; +import { + isJavascriptFile, + isRunningWithTypescript, + isTypescriptFile, +} from "../internal/core/typescript-support"; import { getForkCacheDirPath } from "../internal/hardhat-network/provider/utils/disk-cache"; import { showForkRecommendationsBannerIfNecessary } from "../internal/hardhat-network/provider/utils/fork-recomendations-banner"; import { pluralize } from "../internal/util/strings"; @@ -40,15 +44,16 @@ subtask(TASK_TEST_GET_TEST_FILES) const jsFiles = await getAllFilesMatching( config.paths.tests, - (f) => f.endsWith(".js") || f.endsWith(".cjs") || f.endsWith(".mjs") + isJavascriptFile ); if (!isRunningWithTypescript(config)) { return jsFiles; } - const tsFiles = await getAllFilesMatching(config.paths.tests, (f) => - f.endsWith(".ts") + const tsFiles = await getAllFilesMatching( + config.paths.tests, + isTypescriptFile ); return [...jsFiles, ...tsFiles]; diff --git a/packages/hardhat-core/src/builtin-tasks/vars.ts b/packages/hardhat-core/src/builtin-tasks/vars.ts new file mode 100644 index 0000000000..9a5d5e9128 --- /dev/null +++ b/packages/hardhat-core/src/builtin-tasks/vars.ts @@ -0,0 +1,54 @@ +import { HardhatError } from "../internal/core/errors"; +import { scope } from "../internal/core/config/config-env"; +import { ERRORS } from "../internal/core/errors-list"; + +const varsScope = scope("vars", "Manage your configuration variables"); + +varsScope + .task("set", "Set the value of a configuration variable") + .addPositionalParam("var", "The name of the variable") + .addOptionalPositionalParam( + "value", + "The value to store. Omit to be prompted for it." + ) + .setAction(async () => { + throw new HardhatError(ERRORS.VARS.ONLY_MANAGED_IN_CLI); + }); + +varsScope + .task("get", "Get the value of a configuration variable") + .addPositionalParam("var", "The name of the variable") + .setAction(async () => { + throw new HardhatError(ERRORS.VARS.ONLY_MANAGED_IN_CLI); + }); + +varsScope + .task("list", "List all the configuration variables") + .setAction(async () => { + throw new HardhatError(ERRORS.VARS.ONLY_MANAGED_IN_CLI); + }); + +varsScope + .task("delete", "Delete a configuration variable") + .addPositionalParam("var", "The name of the variable") + .setAction(async () => { + throw new HardhatError(ERRORS.VARS.ONLY_MANAGED_IN_CLI); + }); + +varsScope + .task( + "path", + "Show the path of the file where all the configuration variables are stored" + ) + .setAction(async () => { + throw new HardhatError(ERRORS.VARS.ONLY_MANAGED_IN_CLI); + }); + +varsScope + .task( + "setup", + "Show how to setup the configuration variables used by this project" + ) + .setAction(async () => { + throw new HardhatError(ERRORS.VARS.ONLY_MANAGED_IN_CLI); + }); diff --git a/packages/hardhat-core/src/common/bigInt.ts b/packages/hardhat-core/src/common/bigInt.ts index 95cd0958af..5546a488bd 100644 --- a/packages/hardhat-core/src/common/bigInt.ts +++ b/packages/hardhat-core/src/common/bigInt.ts @@ -1,4 +1,4 @@ -import type { BigNumber as EthersBigNumberType } from "ethers"; +import type { BigNumber as EthersBigNumberType } from "ethers-v5"; // eslint-disable-next-line import/no-extraneous-dependencies import type { BigNumber as BigNumberJsType } from "bignumber.js"; // eslint-disable-next-line import/no-extraneous-dependencies diff --git a/packages/hardhat-core/src/internal/artifacts.ts b/packages/hardhat-core/src/internal/artifacts.ts index 7f6f6a0bad..702711b537 100644 --- a/packages/hardhat-core/src/internal/artifacts.ts +++ b/packages/hardhat-core/src/internal/artifacts.ts @@ -78,7 +78,18 @@ export class Artifacts implements IArtifacts { } public async artifactExists(name: string): Promise { - const artifactPath = await this._getArtifactPath(name); + let artifactPath; + try { + artifactPath = await this._getArtifactPath(name); + } catch (e) { + if (HardhatError.isHardhatError(e)) { + return false; + } + + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error + throw e; + } + return fsExtra.pathExists(artifactPath); } @@ -143,14 +154,8 @@ export class Artifacts implements IArtifacts { return cached; } - const buildInfosDir = path.join(this._artifactsPath, BUILD_INFO_DIR_NAME); - - const paths = await getAllFilesMatching( - this._artifactsPath, - (f) => - f.endsWith(".json") && - !f.startsWith(buildInfosDir) && - !f.endsWith(".dbg.json") + const paths = await getAllFilesMatching(this._artifactsPath, (f) => + this._isArtifactPath(f) ); const result = paths.sort(); @@ -407,6 +412,7 @@ export class Artifacts implements IArtifacts { /** * Returns the absolute path to the given artifact + * @throws {HardhatError} If the name is not fully qualified. */ public formArtifactPathFromFullyQualifiedName( fullyQualifiedName: string @@ -444,8 +450,6 @@ export class Artifacts implements IArtifacts { const buildInfoFile = await this._getBuildInfoFromDebugFile(debugFile); if (buildInfoFile !== undefined) { return path.resolve(path.dirname(debugFile), buildInfoFile); - } else { - return undefined; } }) ); @@ -492,6 +496,11 @@ export class Artifacts implements IArtifacts { * If the name is fully qualified, the path is computed from it. If not, an * artifact that matches the given name is searched in the existing artifacts. * If there is an ambiguity, an error is thrown. + * + * @throws {HardhatError} with descriptor: + * - {@link ERRORS.ARTIFACTS.WRONG_CASING} if the path case doesn't match the one in the filesystem. + * - {@link ERRORS.ARTIFACTS.MULTIPLE_FOUND} if there are multiple artifacts matching the given contract name. + * - {@link ERRORS.ARTIFACTS.NOT_FOUND} if the artifact is not found. */ private async _getArtifactPath(name: string): Promise { const cached = this._cache?.artifactNameToArtifactPathCache.get(name); @@ -548,14 +557,8 @@ export class Artifacts implements IArtifacts { return cached; } - const buildInfosDir = path.join(this._artifactsPath, BUILD_INFO_DIR_NAME); - - const paths = getAllFilesMatchingSync( - this._artifactsPath, - (f) => - f.endsWith(".json") && - !f.startsWith(buildInfosDir) && - !f.endsWith(".dbg.json") + const paths = getAllFilesMatchingSync(this._artifactsPath, (f) => + this._isArtifactPath(f) ); const result = paths.sort(); @@ -605,6 +608,16 @@ export class Artifacts implements IArtifacts { return path.join(this._artifactsPath, sourceName, `${contractName}.json`); } + /** + * Returns the absolute path to the artifact that corresponds to the given + * fully qualified name. + * @param fullyQualifiedName The fully qualified name of the contract. + * @returns The absolute path to the artifact. + * @throws {HardhatError} with descriptor: + * - {@link ERRORS.CONTRACT_NAMES.INVALID_FULLY_QUALIFIED_NAME} If the name is not fully qualified. + * - {@link ERRORS.ARTIFACTS.WRONG_CASING} If the path case doesn't match the one in the filesystem. + * - {@link ERRORS.ARTIFACTS.NOT_FOUND} If the artifact is not found. + */ private async _getValidArtifactPathFromFullyQualifiedName( fullyQualifiedName: string ): Promise { @@ -635,7 +648,7 @@ export class Artifacts implements IArtifacts { ); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw e; } } @@ -668,6 +681,9 @@ Please replace "${contractName}" for the correct contract name wherever you are } } + /** + * @throws {HardhatError} with a list of similar contract names. + */ private _handleWrongArtifactForFullyQualifiedName( fullyQualifiedName: string ): never { @@ -684,6 +700,9 @@ Please replace "${contractName}" for the correct contract name wherever you are }); } + /** + * @throws {HardhatError} with a list of similar contract names. + */ private _handleWrongArtifactForContractName( contractName: string, files: string[] @@ -806,7 +825,7 @@ Please replace "${contractName}" for the correct contract name wherever you are ); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw e; } } @@ -815,6 +834,12 @@ Please replace "${contractName}" for the correct contract name wherever you are return artifactPath.replace(/\.json$/, ".dbg.json"); } + /** + * Gets the path to the artifact file for the given contract name. + * @throws {HardhatError} with descriptor: + * - {@link ERRORS.ARTIFACTS.NOT_FOUND} if there are no artifacts matching the given contract name. + * - {@link ERRORS.ARTIFACTS.MULTIPLE_FOUND} if there are multiple artifacts matching the given contract name. + */ private _getArtifactPathFromFiles( contractName: string, files: string[] @@ -859,20 +884,14 @@ Please replace "${contractName}" for the correct contract name wherever you are } /** - * Remove the artifact file, its debug file and, if it exists, its build - * info file. + * Remove the artifact file and its debug file. */ private async _removeArtifactFiles(artifactPath: string) { await fsExtra.remove(artifactPath); const debugFilePath = this._getDebugFilePath(artifactPath); - const buildInfoPath = await this._getBuildInfoFromDebugFile(debugFilePath); await fsExtra.remove(debugFilePath); - - if (buildInfoPath !== undefined) { - await fsExtra.remove(buildInfoPath); - } } /** @@ -903,6 +922,15 @@ Please replace "${contractName}" for the correct contract name wherever you are return undefined; } + + private _isArtifactPath(file: string) { + return ( + file.endsWith(".json") && + file !== path.join(this._artifactsPath, "package.json") && + !file.startsWith(path.join(this._artifactsPath, BUILD_INFO_DIR_NAME)) && + !file.endsWith(".dbg.json") + ); + } } /** diff --git a/packages/hardhat-core/src/internal/cli/ArgumentsParser.ts b/packages/hardhat-core/src/internal/cli/ArgumentsParser.ts index c141178a98..1402a2c1fe 100644 --- a/packages/hardhat-core/src/internal/cli/ArgumentsParser.ts +++ b/packages/hardhat-core/src/internal/cli/ArgumentsParser.ts @@ -1,11 +1,14 @@ +import { TASK_HELP } from "../../builtin-tasks/task-names"; import { CLIArgumentType, HardhatArguments, HardhatParamDefinitions, ParamDefinition, ParamDefinitionsMap, + ScopesMap, TaskArguments, TaskDefinition, + TasksMap, } from "../../types"; import { HardhatError } from "../core/errors"; import { ERRORS } from "../core/errors-list"; @@ -50,19 +53,20 @@ export class ArgumentsParser { rawCLAs: string[] ): { hardhatArguments: HardhatArguments; - taskName?: string; - unparsedCLAs: string[]; + scopeOrTaskName: string | undefined; + allUnparsedCLAs: string[]; } { const hardhatArguments: Partial = {}; - let taskName: string | undefined; - const unparsedCLAs: string[] = []; + let scopeOrTaskName: string | undefined; + const allUnparsedCLAs: string[] = []; for (let i = 0; i < rawCLAs.length; i++) { const arg = rawCLAs[i]; - if (taskName === undefined) { + if (scopeOrTaskName === undefined) { if (!this._hasCLAParamNameFormat(arg)) { - taskName = arg; + scopeOrTaskName = arg; + allUnparsedCLAs.push(arg); continue; } @@ -78,11 +82,11 @@ export class ArgumentsParser { i, hardhatParamDefinitions, hardhatArguments, - taskName + scopeOrTaskName ); } else { if (!this._isCLAParamName(arg, hardhatParamDefinitions)) { - unparsedCLAs.push(arg); + allUnparsedCLAs.push(arg); continue; } @@ -91,7 +95,7 @@ export class ArgumentsParser { i, hardhatParamDefinitions, hardhatArguments, - taskName + scopeOrTaskName ); } } @@ -102,11 +106,73 @@ export class ArgumentsParser { envVariableArguments, hardhatArguments ), - taskName, - unparsedCLAs, + scopeOrTaskName, + allUnparsedCLAs, }; } + public parseScopeAndTaskNames( + allUnparsedCLAs: string[], + taskDefinitions: TasksMap, + scopeDefinitions: ScopesMap + ): { + scopeName?: string; + taskName: string; + unparsedCLAs: string[]; + } { + const [firstCLA, secondCLA] = allUnparsedCLAs; + + if (allUnparsedCLAs.length === 0) { + return { + taskName: TASK_HELP, + unparsedCLAs: [], + }; + } else if (allUnparsedCLAs.length === 1) { + if (scopeDefinitions[firstCLA] !== undefined) { + // this is a bit of a hack, but it's the easiest way to print + // the help of a scope when no task is specified + return { + taskName: TASK_HELP, + unparsedCLAs: [firstCLA], + }; + } else if (taskDefinitions[firstCLA] !== undefined) { + return { + taskName: firstCLA, + unparsedCLAs: allUnparsedCLAs.slice(1), + }; + } else { + throw new HardhatError(ERRORS.ARGUMENTS.UNRECOGNIZED_TASK, { + task: firstCLA, + }); + } + } else { + const scopeDefinition = scopeDefinitions[firstCLA]; + if (scopeDefinition !== undefined) { + if (scopeDefinition.tasks[secondCLA] !== undefined) { + return { + scopeName: firstCLA, + taskName: secondCLA, + unparsedCLAs: allUnparsedCLAs.slice(2), + }; + } else { + throw new HardhatError(ERRORS.ARGUMENTS.UNRECOGNIZED_SCOPED_TASK, { + scope: firstCLA, + task: secondCLA, + }); + } + } else if (taskDefinitions[firstCLA] !== undefined) { + return { + taskName: firstCLA, + unparsedCLAs: allUnparsedCLAs.slice(1), + }; + } else { + throw new HardhatError(ERRORS.ARGUMENTS.UNRECOGNIZED_TASK, { + task: firstCLA, + }); + } + } + } + public parseTaskArguments( taskDefinition: TaskDefinition, rawCLAs: string[] @@ -207,7 +273,7 @@ export class ArgumentsParser { index: number, paramDefinitions: ParamDefinitionsMap, parsedArguments: TaskArguments, - taskName?: string + scopeOrTaskName?: string ) { const claArg = rawCLAs[index]; const paramName = ArgumentsParser.cLAToParamName(claArg); @@ -228,7 +294,7 @@ export class ArgumentsParser { if (value === undefined) { throw new HardhatError(ERRORS.ARGUMENTS.MISSING_TASK_ARGUMENT, { param: ArgumentsParser.paramNameToCLA(paramName), - task: taskName ?? "help", + task: scopeOrTaskName ?? "help", }); } diff --git a/packages/hardhat-core/src/internal/cli/HelpPrinter.ts b/packages/hardhat-core/src/internal/cli/HelpPrinter.ts index ebd5aaff13..2086a5e1f1 100644 --- a/packages/hardhat-core/src/internal/cli/HelpPrinter.ts +++ b/packages/hardhat-core/src/internal/cli/HelpPrinter.ts @@ -2,6 +2,9 @@ import { HardhatParamDefinitions, ParamDefinition, ParamDefinitionsMap, + ScopeDefinition, + ScopesMap, + TaskDefinition, TasksMap, } from "../../types"; import { HardhatError } from "../core/errors"; @@ -15,55 +18,69 @@ export class HelpPrinter { private readonly _executableName: string, private readonly _version: string, private readonly _hardhatParamDefinitions: HardhatParamDefinitions, - private readonly _tasks: TasksMap + private readonly _tasks: TasksMap, + private readonly _scopes: ScopesMap ) {} public printGlobalHelp(includeSubtasks = false) { console.log(`${this._programName} version ${this._version}\n`); console.log( - `Usage: ${this._executableName} [GLOBAL OPTIONS] [TASK OPTIONS]\n` + `Usage: ${this._executableName} [GLOBAL OPTIONS] [SCOPE] [TASK OPTIONS]\n` ); console.log("GLOBAL OPTIONS:\n"); - this._printParamDetails(this._hardhatParamDefinitions); + let length = this._printParamDetails(this._hardhatParamDefinitions); console.log("\n\nAVAILABLE TASKS:\n"); - const tasksToShow: TasksMap = {}; - for (const [taskName, taskDefinition] of Object.entries(this._tasks)) { - if (includeSubtasks || !taskDefinition.isSubtask) { - tasksToShow[taskName] = taskDefinition; - } - } - - const nameLength = Object.keys(tasksToShow) - .map((n) => n.length) - .reduce((a, b) => Math.max(a, b), 0); + length = this._printTasks(this._tasks, includeSubtasks, length); - for (const name of Object.keys(tasksToShow).sort()) { - const { description = "" } = this._tasks[name]; + if (Object.keys(this._scopes).length > 0) { + console.log("\n\nAVAILABLE TASK SCOPES:\n"); - console.log(` ${name.padEnd(nameLength)}\t${description}`); + this._printScopes(this._scopes, length); } console.log(""); console.log( - `To get help for a specific task run: npx ${this._executableName} help [task]\n` + `To get help for a specific task run: npx ${this._executableName} help [SCOPE] \n` ); } - public printTaskHelp(taskName: string) { - const taskDefinition = this._tasks[taskName]; + public printScopeHelp( + scopeDefinition: ScopeDefinition, + includeSubtasks = false + ) { + const name = scopeDefinition.name; + const description = scopeDefinition.description ?? ""; + + console.log(`${this._programName} version ${this._version}`); - if (taskDefinition === undefined) { - throw new HardhatError(ERRORS.ARGUMENTS.UNRECOGNIZED_TASK, { - task: taskName, + console.log( + `\nUsage: hardhat [GLOBAL OPTIONS] ${name} [TASK OPTIONS]` + ); + + console.log(`\nAVAILABLE TASKS:\n`); + + if (this._scopes[name] === undefined) { + throw new HardhatError(ERRORS.ARGUMENTS.UNRECOGNIZED_SCOPE, { + scope: name, }); } + this._printTasks(this._scopes[name].tasks, includeSubtasks); + + console.log(`\n${name}: ${description}`); + + console.log( + `\nFor global options help run: ${this._executableName} help\n` + ); + } + + public printTaskHelp(taskDefinition: TaskDefinition) { const { description = "", name, @@ -78,8 +95,11 @@ export class HelpPrinter { positionalParamDefinitions ); + const scope = + taskDefinition.scope !== undefined ? `${taskDefinition.scope} ` : ""; + console.log( - `Usage: ${this._executableName} [GLOBAL OPTIONS] ${name}${paramsList}${positionalParamsList}\n` + `Usage: ${this._executableName} [GLOBAL OPTIONS] ${scope}${name}${paramsList}${positionalParamsList}\n` ); if (Object.keys(paramDefinitions).length > 0) { @@ -103,6 +123,49 @@ export class HelpPrinter { console.log(`For global options help run: ${this._executableName} help\n`); } + private _printTasks( + tasksMap: TasksMap, + includeSubtasks: boolean, + length: number = 0 + ) { + const taskNameList = Object.entries(tasksMap) + .filter( + ([, taskDefinition]) => includeSubtasks || !taskDefinition.isSubtask + ) + .map(([taskName]) => taskName) + .sort(); + + const nameLength = taskNameList + .map((n) => n.length) + .reduce((a, b) => Math.max(a, b), length); + + for (const name of taskNameList) { + const { description = "" } = tasksMap[name]; + + console.log(` ${name.padEnd(nameLength)}\t${description}`); + } + + return nameLength; + } + + private _printScopes(scopesMap: ScopesMap, length: number) { + const scopeNamesList = Object.entries(scopesMap) + .map(([scopeName]) => scopeName) + .sort(); + + const nameLength = scopeNamesList + .map((n) => n.length) + .reduce((a, b) => Math.max(a, b), length); + + for (const name of scopeNamesList) { + const { description = "" } = scopesMap[name]; + + console.log(` ${name.padEnd(nameLength)}\t${description}`); + } + + return nameLength; + } + private _getParamValueDescription(paramDefinition: ParamDefinition) { return `<${paramDefinition.type.name.toUpperCase()}>`; } @@ -162,7 +225,7 @@ export class HelpPrinter { return paramsList; } - private _printParamDetails(paramDefinitions: ParamDefinitionsMap) { + private _printParamDetails(paramDefinitions: ParamDefinitionsMap): number { const paramsNameLength = Object.keys(paramDefinitions) .map((n) => ArgumentsParser.paramNameToCLA(n).length) .reduce((a, b) => Math.max(a, b), 0); @@ -185,6 +248,8 @@ export class HelpPrinter { console.log(msg); } + + return paramsNameLength; } private _printPositionalParamDetails( diff --git a/packages/hardhat-core/src/internal/cli/analytics.ts b/packages/hardhat-core/src/internal/cli/analytics.ts index 3516b57a10..6c9817e312 100644 --- a/packages/hardhat-core/src/internal/cli/analytics.ts +++ b/packages/hardhat-core/src/internal/cli/analytics.ts @@ -1,12 +1,10 @@ import type { request as RequestT } from "undici"; -import AbortController from "abort-controller"; import debug from "debug"; -import os from "os"; -import qs from "qs"; -import { v4 as uuid } from "uuid"; +import os from "node:os"; +import { join } from "node:path"; +import { spawn } from "node:child_process"; -import * as builtinTaskNames from "../../builtin-tasks/task-names"; import { isLocalDev } from "../core/execution-mode"; import { isRunningOnCiServer } from "../util/ci-detection"; import { @@ -14,42 +12,76 @@ import { readFirstLegacyAnalyticsId, readSecondLegacyAnalyticsId, writeAnalyticsId, + writeTelemetryConsent, } from "../util/global-dir"; import { getPackageJson } from "../util/packageInfo"; +import { confirmTelemetryConsent } from "./prompt"; const log = debug("hardhat:core:analytics"); -// VERY IMPORTANT: -// The documentation doesn't say so, but the user-agent parameter is required (ua). -// If you don't send it, you won't get an error or anything, Google will *silently* drop your hit. -// -// https://stackoverflow.com/questions/27357954/google-analytics-measurement-protocol-not-working -interface RawAnalytics { - v: "1"; - tid: string; - cid: string; - dp: string; - dh: string; - t: string; - ua: string; - cs: string; - cm: string; - cd1: string; - cd2: string; - cd3: string; +/* eslint-disable @typescript-eslint/naming-convention */ +interface AnalyticsPayload { + client_id: string; + user_id: string; + user_properties: {}; + events: Array<{ + name: string; + params: { + engagement_time_msec?: string; + session_id?: string; + }; + }>; } -type AbortAnalytics = () => void; +interface TaskHitPayload extends AnalyticsPayload { + user_properties: { + projectId: { + value?: string; + }; + userType: { + value?: string; + }; + hardhatVersion: { + value?: string; + }; + operatingSystem: { + value?: string; + }; + nodeVersion: { + value?: string; + }; + }; + events: Array<{ + name: "task"; + params: { + engagement_time_msec?: string; + session_id?: string; + scope?: string; + task?: string; + }; + }>; +} -const googleAnalyticsUrl = "https://www.google-analytics.com/collect"; +interface TelemetryConsentHitPayload extends AnalyticsPayload { + events: Array<{ + name: "TelemetryConsentResponse"; + params: { + engagement_time_msec?: string; + session_id?: string; + userConsent: "yes" | "no"; + }; + }>; +} + +type AbortAnalytics = () => void; export class Analytics { public static async getInstance(telemetryConsent: boolean | undefined) { - const analytics: Analytics = new Analytics({ - clientId: await getClientId(), + const analytics: Analytics = new Analytics( + await getClientId(), telemetryConsent, - userType: getUserType(), - }); + getUserType() + ); return analytics; } @@ -57,22 +89,22 @@ export class Analytics { private readonly _clientId: string; private readonly _enabled: boolean; private readonly _userType: string; - // Hardhat's tracking id. I guess there's no other choice than keeping it here. - private readonly _trackingId: string = "UA-117668706-3"; - - private constructor({ - clientId, - telemetryConsent, - userType, - }: { - clientId: string; - telemetryConsent: boolean | undefined; - userType: string; - }) { + private readonly _analyticsUrl: string = + "https://www.google-analytics.com/mp/collect"; + private readonly _apiSecret: string = "fQ5joCsDRTOp55wX8a2cVw"; + private readonly _measurementId: string = "G-8LQ007N2QJ"; + private _sessionId: string; + + private constructor( + clientId: string, + telemetryConsent: boolean | undefined, + userType: string + ) { this._clientId = clientId; this._enabled = !isLocalDev() && !isRunningOnCiServer() && telemetryConsent === true; this._userType = userType; + this._sessionId = Math.random().toString(); } /** @@ -83,106 +115,107 @@ export class Analytics { * * Trying to abort a successfully completed request is a no-op, so it's always safe to call it. * - * @param taskName The name of the task to be logged - * * @returns The abort function */ public async sendTaskHit( + scopeName: string | undefined, taskName: string ): Promise<[AbortAnalytics, Promise]> { - if (this._isABuiltinTaskName(taskName)) { - taskName = "builtin"; - } else { - taskName = "custom"; - } - if (!this._enabled) { return [() => {}, Promise.resolve()]; } - return this._sendHit(await this._taskHit(taskName)); + let eventParams = {}; + if (scopeName === "ignition" && taskName === "deploy") { + eventParams = { + scope: scopeName, + task: taskName, + }; + } + + return this._sendHit(await this._buildTaskHitPayload(eventParams)); } - private _isABuiltinTaskName(taskName: string) { - return Object.values(builtinTaskNames).includes(taskName); + public async sendTelemetryConsentHit( + userConsent: "yes" | "no" + ): Promise<[AbortAnalytics, Promise]> { + const telemetryConsentHitPayload: TelemetryConsentHitPayload = { + client_id: "hardhat_telemetry_consent", + user_id: "hardhat_telemetry_consent", + user_properties: {}, + events: [ + { + name: "TelemetryConsentResponse", + params: { + userConsent, + }, + }, + ], + }; + return this._sendHit(telemetryConsentHitPayload); } - private async _taskHit(taskName: string): Promise { + private async _buildTaskHitPayload( + eventParams: { + scope?: string; + task?: string; + } = {} + ): Promise { return { - // Measurement protocol version. - v: "1", - - // Hit type, we're only using pageviews for now. - t: "pageview", - - // Hardhat's tracking Id. - tid: this._trackingId, - - // Client Id. - cid: this._clientId, - - // Document path, must start with a '/'. - dp: `/task/${taskName}`, - - // Host name. - dh: "cli.hardhat.org", - - // User agent, must be present. - // We use it to inform Node version used and OS. - // Example: - // Node/v8.12.0 (Darwin 17.7.0) - ua: getUserAgent(), - - // We're using the following values (Campaign source, Campaign medium) to track - // whether the user is a Developer or CI, as Custom Dimensions are not working for us atm. - cs: this._userType, - cm: "User Type", - - // We're using custom dimensions for tracking different user projects, and user types (Developer/CI). - // - // See the following link for docs on these paremeters: - // https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#pr_cd_ - // - // See the following link for setting up our custom dimensions in the Google Analytics dashboard - // https://support.google.com/tagmanager/answer/6164990 - // - // Custom dimension 1: Project Id - cd1: "hardhat-project", - // Custom dimension 2: User type - // Possible values: "CI", "Developer". - cd2: this._userType, - // Custom dimension 3: Hardhat Version - // Example: "Hardhat 1.0.0". - cd3: await getHardhatVersion(), + client_id: this._clientId, + user_id: this._clientId, + user_properties: { + projectId: { value: "hardhat-project" }, + userType: { value: this._userType }, + hardhatVersion: { value: await getHardhatVersion() }, + operatingSystem: { value: os.platform() }, + nodeVersion: { value: process.version }, + }, + events: [ + { + name: "task", + params: { + // From the GA docs: amount of time someone spends with your web + // page in focus or app screen in the foreground + // The parameter has no use for our app, but it's required in order + // for user activity to display in standard reports like Realtime + engagement_time_msec: "10000", + session_id: this._sessionId, + ...eventParams, + }, + }, + ], }; } - private _sendHit(hit: RawAnalytics): [AbortAnalytics, Promise] { + private _sendHit(payload: AnalyticsPayload): [AbortAnalytics, Promise] { const { request } = require("undici") as { request: typeof RequestT }; - log(`Sending hit for ${hit.dp}`); + const eventName = payload.events[0].name; + log(`Sending hit for ${eventName}`); const controller = new AbortController(); const abortAnalytics = () => { - log(`Aborting hit for ${JSON.stringify(hit.dp)}`); + log(`Aborting hit for ${eventName}`); controller.abort(); }; - const hitPayload = qs.stringify(hit); + log(`Hit payload: ${JSON.stringify(payload)}`); - log(`Hit payload: ${JSON.stringify(hit)}`); - - const hitPromise = request(googleAnalyticsUrl, { - body: hitPayload, + const hitPromise = request(this._analyticsUrl, { + query: { + api_secret: this._apiSecret, + measurement_id: this._measurementId, + }, + body: JSON.stringify(payload), method: "POST", signal: controller.signal, }) .then(() => { - log(`Hit for ${JSON.stringify(hit.dp)} sent successfully`); + log(`Hit for ${eventName} sent successfully`); }) - // We're not really interested in handling failed analytics requests .catch(() => { log("Hit request failed"); }); @@ -200,6 +233,7 @@ async function getClientId() { (await readFirstLegacyAnalyticsId()); if (clientId === undefined) { + const { v4: uuid } = await import("uuid"); log("Client Id not found, generating a new one"); clientId = uuid(); } @@ -214,31 +248,38 @@ function getUserType(): string { return isRunningOnCiServer() ? "CI" : "Developer"; } -/** - * At the moment, we couldn't find a reliably way to report the OS () in Node, - * as the versions reported by the various `os` APIs (`os.platform()`, `os.type()`, etc) - * return values different to those expected by Google Analytics - * We decided to take the compromise of just reporting the OS Platform (OSX/Linux/Windows) for now (version information is bogus for now). - */ -function getOperatingSystem(): string { - switch (os.type()) { - case "Windows_NT": - return "(Windows NT 6.1; Win64; x64)"; - case "Darwin": - return "(Macintosh; Intel Mac OS X 10_13_6)"; - case "Linux": - return "(X11; Linux x86_64)"; - default: - return "(Unknown)"; - } -} - -function getUserAgent(): string { - return `Node/${process.version} ${getOperatingSystem()}`; -} - async function getHardhatVersion(): Promise { const { version } = await getPackageJson(); return `Hardhat ${version}`; } + +export async function requestTelemetryConsent() { + const telemetryConsent = await confirmTelemetryConsent(); + + if (telemetryConsent === undefined) { + return; + } + + writeTelemetryConsent(telemetryConsent); + + const reportTelemetryConsentPath = join( + __dirname, + "..", + "util", + "report-telemetry-consent.js" + ); + + const subprocess = spawn( + process.execPath, + [reportTelemetryConsentPath, telemetryConsent ? "yes" : "no"], + { + detached: true, + stdio: "ignore", + } + ); + + subprocess.unref(); + + return telemetryConsent; +} diff --git a/packages/hardhat-core/src/internal/cli/autocomplete.ts b/packages/hardhat-core/src/internal/cli/autocomplete.ts index a5bbf7772a..10ebe09b38 100644 --- a/packages/hardhat-core/src/internal/cli/autocomplete.ts +++ b/packages/hardhat-core/src/internal/cli/autocomplete.ts @@ -2,7 +2,7 @@ import findup from "find-up"; import * as fs from "fs-extra"; import * as path from "path"; -import { HardhatRuntimeEnvironment } from "../../types"; +import { HardhatRuntimeEnvironment, TaskDefinition } from "../../types"; import { HARDHAT_PARAM_DEFINITIONS } from "../core/params/hardhat-params"; import { getCacheDir } from "../util/global-dir"; import { createNonCryptographicHashBasedIdentifier } from "../util/hash"; @@ -22,19 +22,30 @@ interface CompletionEnv { point: number; } +interface Task { + name: string; + description: string; + isSubtask: boolean; + paramDefinitions: { + [paramName: string]: { + name: string; + description: string; + isFlag: boolean; + }; + }; +} + interface CompletionData { networks: string[]; tasks: { - [taskName: string]: { + [taskName: string]: Task; + }; + scopes: { + [scopeName: string]: { name: string; description: string; - isSubtask: boolean; - paramDefinitions: { - [paramName: string]: { - name: string; - description: string; - isFlag: boolean; - }; + tasks: { + [taskName: string]: Task; }; }; }; @@ -63,12 +74,12 @@ export async function complete({ return []; } - const { networks, tasks } = completionData; + const { networks, tasks, scopes } = completionData; const words = line.split(/\s+/).filter((x) => x.length > 0); const wordsBeforeCursor = line.slice(0, point).split(/\s+/); - // examples: + // 'prev' and 'last' variables examples: // `hh compile --network|` => prev: "compile" last: "--network" // `hh compile --network |` => prev: "--network" last: "" // `hh compile --network ha|` => prev: "--network" last: "ha" @@ -83,28 +94,58 @@ export async function complete({ })) .filter((x) => !words.includes(x.name)); - // check if the user entered a task - let task: string | undefined; + // Get the task or scope if the user has entered one + let taskName: string | undefined; + let scopeName: string | undefined; + let index = 1; while (index < words.length) { - if (isGlobalFlag(words[index])) { + const word = words[index]; + + if (isGlobalFlag(word)) { index += 1; - } else if (isGlobalParam(words[index])) { + } else if (isGlobalParam(word)) { index += 2; - } else if (words[index].startsWith("--")) { + } else if (word.startsWith("--")) { index += 1; } else { - task = words[index]; - break; + // Possible scenarios: + // - no task or scope: `hh ` + // - only a task: `hh task ` + // - only a scope: `hh scope ` + // - both a scope and a task (the task always follow the scope): `hh scope task ` + // Between a scope and a task there could be other words, e.g.: `hh scope --flag task ` + if (scopeName === undefined) { + if (tasks[word] !== undefined) { + taskName = word; + break; + } else if (scopes[word] !== undefined) { + scopeName = word; + } + } else { + taskName = word; + break; + } + + index += 1; } } - // if a task was found but it's equal to the last word, it means - // that the cursor is after the task, we ignore the task in this - // case because if you have a task `foo` and `foobar` and the - // line is: `hh foo|`, we want tasks to be suggested - if (task === last) { - task = undefined; + // If a task or a scope is found and it is equal to the last word, + // this indicates that the cursor is positioned after the task or scope. + // In this case, we ignore the task or scope. For instance, if you have a task or a scope named 'foo' and 'foobar', + // and the line is 'hh foo|', we want to suggest the value for 'foo' and 'foobar'. + // Possible scenarios: + // - no task or scope: `hh ` -> task and scope already undefined + // - only a task: `hh task ` -> task set to undefined, scope already undefined + // - only a scope: `hh scope ` -> scope set to undefined, task already undefined + // - both a scope and a task (the task always follow the scope): `hh scope task ` -> task set to undefined, scope stays defined + if (taskName === last || scopeName === last) { + if (taskName !== undefined && scopeName !== undefined) { + [taskName, scopeName] = [undefined, scopeName]; + } else { + [taskName, scopeName] = [undefined, undefined]; + } } if (prev === "--network") { @@ -114,6 +155,16 @@ export async function complete({ })); } + const scopeDefinition = + scopeName === undefined ? undefined : scopes[scopeName]; + + const taskDefinition = + taskName === undefined + ? undefined + : scopeDefinition === undefined + ? tasks[taskName] + : scopeDefinition.tasks[taskName]; + // if the previous word is a param, then a value is expected // we don't complete anything here if (prev.startsWith("-")) { @@ -125,39 +176,60 @@ export async function complete({ } const isTaskParam = - task !== undefined && - tasks[task]?.paramDefinitions[paramName]?.isFlag === false; + taskDefinition?.paramDefinitions[paramName]?.isFlag === false; if (isTaskParam) { return HARDHAT_COMPLETE_FILES; } } - // if there's no task, we complete either tasks or params - if (task === undefined || tasks[task] === undefined) { + // If there's no task or scope, we complete either tasks and scopes or params + if (taskDefinition === undefined && scopeDefinition === undefined) { + if (last.startsWith("-")) { + return coreParams.filter((param) => startsWithLast(param.name)); + } + const taskSuggestions = Object.values(tasks) .filter((x) => !x.isSubtask) .map((x) => ({ name: x.name, description: x.description, })); - if (last.startsWith("-")) { - return coreParams.filter((param) => startsWithLast(param.name)); - } - return taskSuggestions.filter((x) => startsWithLast(x.name)); + + const scopeSuggestions = Object.values(scopes).map((x) => ({ + name: x.name, + description: x.description, + })); + + return taskSuggestions + .concat(scopeSuggestions) + .filter((x) => startsWithLast(x.name)); + } + + // If there's a scope but not a task, we complete with the scopes'tasks + if (taskDefinition === undefined && scopeDefinition !== undefined) { + return Object.values(scopes[scopeName!].tasks) + .filter((x) => !x.isSubtask) + .map((x) => ({ + name: x.name, + description: x.description, + })) + .filter((x) => startsWithLast(x.name)); } if (!last.startsWith("-")) { return HARDHAT_COMPLETE_FILES; } - // if there's a task and the last word starts with -, we complete its params and the global params - const taskParams = Object.values(tasks[task].paramDefinitions) - .map((param) => ({ - name: ArgumentsParser.paramNameToCLA(param.name), - description: param.description, - })) - .filter((x) => !words.includes(x.name)); + const taskParams = + taskDefinition === undefined + ? [] + : Object.values(taskDefinition.paramDefinitions) + .map((param) => ({ + name: ArgumentsParser.paramNameToCLA(param.name), + description: param.description, + })) + .filter((x) => !words.includes(x.name)); return [...taskParams, ...coreParams].filter((suggestion) => startsWithLast(suggestion.name) @@ -195,20 +267,20 @@ async function getCompletionData(): Promise { // we extract the tasks data explicitly to make sure everything // is serializable and to avoid saving unnecessary things from the HRE - const tasks: CompletionData["tasks"] = mapValues(hre.tasks, (task) => ({ - name: task.name, - description: task.description ?? "", - isSubtask: task.isSubtask, - paramDefinitions: mapValues(task.paramDefinitions, (paramDefinition) => ({ - name: paramDefinition.name, - description: paramDefinition.description ?? "", - isFlag: paramDefinition.isFlag, - })), + const tasks: CompletionData["tasks"] = mapValues(hre.tasks, (task) => + getTaskFromTaskDefinition(task) + ); + + const scopes: CompletionData["scopes"] = mapValues(hre.scopes, (scope) => ({ + name: scope.name, + description: scope.description ?? "", + tasks: mapValues(scope.tasks, (task) => getTaskFromTaskDefinition(task)), })); const completionData: CompletionData = { networks, tasks, + scopes, }; await saveCachedCompletionData(projectId, completionData, mtimes); @@ -216,6 +288,22 @@ async function getCompletionData(): Promise { return completionData; } +function getTaskFromTaskDefinition(taskDef: TaskDefinition): Task { + return { + name: taskDef.name, + description: taskDef.description ?? "", + isSubtask: taskDef.isSubtask, + paramDefinitions: mapValues( + taskDef.paramDefinitions, + (paramDefinition) => ({ + name: paramDefinition.name, + description: paramDefinition.description ?? "", + isFlag: paramDefinition.isFlag, + }) + ), + }; +} + function getProjectId(): string | undefined { const packageJsonPath = findup.sync("package.json"); diff --git a/packages/hardhat-core/src/internal/cli/bootstrap.ts b/packages/hardhat-core/src/internal/cli/bootstrap.ts index f4ed6e50e8..ef3d5d2e39 100644 --- a/packages/hardhat-core/src/internal/cli/bootstrap.ts +++ b/packages/hardhat-core/src/internal/cli/bootstrap.ts @@ -2,12 +2,12 @@ import semver from "semver"; import chalk from "chalk"; -const SUPPORTED_NODE_VERSIONS = ["^14.0.0", "^16.0.0", "^18.0.0"]; +import { SUPPORTED_NODE_VERSIONS } from "./constants"; if (!semver.satisfies(process.version, SUPPORTED_NODE_VERSIONS.join(" || "))) { console.warn( chalk.yellow.bold(`WARNING:`), - `You are using a version of Node.js that is not supported, and it may work incorrectly, or not work at all. See https://hardhat.org/nodejs-versions` + `You are currently using Node.js ${process.version}, which is not supported by Hardhat. This can lead to unexpected behavior. See https://hardhat.org/nodejs-versions` ); console.log(); console.log(); diff --git a/packages/hardhat-core/src/internal/cli/cli.ts b/packages/hardhat-core/src/internal/cli/cli.ts index 0410c61740..350b66d28d 100755 --- a/packages/hardhat-core/src/internal/cli/cli.ts +++ b/packages/hardhat-core/src/internal/cli/cli.ts @@ -1,7 +1,6 @@ import chalk from "chalk"; import debug from "debug"; import "source-map-support/register"; - import { TASK_COMPILE, TASK_HELP, @@ -23,7 +22,10 @@ import { ERRORS, getErrorCode } from "../core/errors-list"; import { isHardhatInstalledLocallyOrLinked } from "../core/execution-mode"; import { getEnvHardhatArguments } from "../core/params/env-variables"; import { HARDHAT_PARAM_DEFINITIONS } from "../core/params/hardhat-params"; -import { isCwdInsideProject } from "../core/project-structure"; +import { + getUserConfigPath, + isCwdInsideProject, +} from "../core/project-structure"; import { Environment } from "../core/runtime-environment"; import { loadTsNode, willRunWithTypescript } from "../core/typescript-support"; import { Reporter } from "../sentry/reporter"; @@ -32,21 +34,21 @@ import { hasConsentedTelemetry, hasPromptedForHHVSCode, writePromptedForHHVSCode, - writeTelemetryConsent, } from "../util/global-dir"; import { getPackageJson } from "../util/packageInfo"; import { saveFlamegraph } from "../core/flamegraph"; -import { Analytics } from "./analytics"; +import { Analytics, requestTelemetryConsent } from "./analytics"; import { ArgumentsParser } from "./ArgumentsParser"; import { enableEmoji } from "./emoji"; -import { createProject } from "./project-creation"; -import { confirmHHVSCodeInstallation, confirmTelemetryConsent } from "./prompt"; +import { createProject, showSoliditySurveyMessage } from "./project-creation"; +import { confirmHHVSCodeInstallation } from "./prompt"; import { InstallationState, installHardhatVSCode, isHardhatVSCodeInstalled, } from "./hardhat-vscode-installation"; +import { handleVars } from "./vars"; const log = debug("hardhat:core:cli"); @@ -124,15 +126,12 @@ async function main() { const argumentsParser = new ArgumentsParser(); - const { - hardhatArguments, - taskName: parsedTaskName, - unparsedCLAs, - } = argumentsParser.parseHardhatArguments( - HARDHAT_PARAM_DEFINITIONS, - envVariableArguments, - process.argv.slice(2) - ); + const { hardhatArguments, scopeOrTaskName, allUnparsedCLAs } = + argumentsParser.parseHardhatArguments( + HARDHAT_PARAM_DEFINITIONS, + envVariableArguments, + process.argv.slice(2) + ); if (hardhatArguments.verbose) { Reporter.setVerbose(true); @@ -151,25 +150,45 @@ async function main() { return; } - if (hardhatArguments.config === undefined && !isCwdInsideProject()) { + // ATTENTION! DEPRECATED CODE! + // The command `npx hardhat`, when used to create a new Hardhat project, will be removed with Hardhat V3. + // It will become `npx hardhat init`. + // The code marked with the tag #INIT-DEP can be deleted after HarhatV3 is out. + + // Create a new Hardhat project + if (scopeOrTaskName === "init") { + return await createNewProject(); + } + // #INIT-DEP - START OF DEPRECATED CODE + else { if ( - process.stdout.isTTY === true || - process.env.HARDHAT_CREATE_JAVASCRIPT_PROJECT_WITH_DEFAULTS !== - undefined || - process.env.HARDHAT_CREATE_TYPESCRIPT_PROJECT_WITH_DEFAULTS !== - undefined + scopeOrTaskName === undefined && + hardhatArguments.config === undefined && + !isCwdInsideProject() ) { - await createProject(); + await createNewProject(); + + // Warning for Hardhat V3 deprecation + console.warn( + chalk.yellow.bold("\n\nDEPRECATION WARNING\n\n"), + chalk.yellow( + `Initializing a project with ${chalk.white.italic( + "npx hardhat" + )} is deprecated and will be removed in the future.\n` + ), + chalk.yellow( + `Please use ${chalk.white.italic("npx hardhat init")} instead.\n\n` + ) + ); + return; } + } + // #INIT-DEP - END OF DEPRECATED CODE - // Many terminal emulators in windows fail to run the createProject() - // workflow, and don't present themselves as TTYs. If we are in this - // situation we throw a special error instructing the user to use WSL or - // powershell to initialize the project. - if (process.platform === "win32") { - throw new HardhatError(ERRORS.GENERAL.NOT_INSIDE_PROJECT_ON_WINDOWS); - } + // Tasks are only allowed inside a Hardhat project (except the init task) + if (hardhatArguments.config === undefined && !isCwdInsideProject()) { + throw new HardhatError(ERRORS.GENERAL.NOT_INSIDE_PROJECT); } if ( @@ -190,21 +209,33 @@ async function main() { } } - let taskName = parsedTaskName ?? TASK_HELP; - - const showEmptyConfigWarning = true; - const showSolidityConfigWarnings = taskName === TASK_COMPILE; - const ctx = HardhatContext.createHardhatContext(); + if (scopeOrTaskName === "vars" && allUnparsedCLAs.length > 1) { + process.exit(await handleVars(allUnparsedCLAs, hardhatArguments.config)); + } + const { resolvedConfig, userConfig } = loadConfigAndTasks( hardhatArguments, { - showEmptyConfigWarning, - showSolidityConfigWarnings, + showEmptyConfigWarning: true, + showSolidityConfigWarnings: scopeOrTaskName === TASK_COMPILE, } ); + const envExtenders = ctx.environmentExtenders; + const providerExtenders = ctx.providerExtenders; + const taskDefinitions = ctx.tasksDSL.getTaskDefinitions(); + const scopesDefinitions = ctx.tasksDSL.getScopesDefinitions(); + + // eslint-disable-next-line prefer-const + let { scopeName, taskName, unparsedCLAs } = + argumentsParser.parseScopeAndTaskNames( + allUnparsedCLAs, + taskDefinitions, + scopesDefinitions + ); + let telemetryConsent: boolean | undefined = hasConsentedTelemetry(); const isHelpCommand = hardhatArguments.help || taskName === TASK_HELP; @@ -212,13 +243,10 @@ async function main() { telemetryConsent === undefined && !isHelpCommand && !isRunningOnCiServer() && - process.stdout.isTTY === true + process.stdout.isTTY === true && + process.env.HARDHAT_DISABLE_TELEMETRY_PROMPT !== "true" ) { - telemetryConsent = await confirmTelemetryConsent(); - - if (telemetryConsent !== undefined) { - writeTelemetryConsent(telemetryConsent); - } + telemetryConsent = await requestTelemetryConsent(); } const analytics = await Analytics.getInstance(telemetryConsent); @@ -228,21 +256,37 @@ async function main() { Reporter.setEnabled(true); } - const envExtenders = ctx.extendersManager.getExtenders(); - const taskDefinitions = ctx.tasksDSL.getTaskDefinitions(); - - const [abortAnalytics, hitPromise] = await analytics.sendTaskHit(taskName); + const [abortAnalytics, hitPromise] = await analytics.sendTaskHit( + scopeName, + taskName + ); let taskArguments: TaskArguments; // --help is a also special case if (hardhatArguments.help && taskName !== TASK_HELP) { - taskArguments = { task: taskName }; + // we "move" the task and scope names to the task arguments, + // and run the help task + if (scopeName !== undefined) { + taskArguments = { scopeOrTask: scopeName, task: taskName }; + } else { + taskArguments = { scopeOrTask: taskName }; + } taskName = TASK_HELP; + scopeName = undefined; } else { - const taskDefinition = taskDefinitions[taskName]; + const taskDefinition = ctx.tasksDSL.getTaskDefinition( + scopeName, + taskName + ); if (taskDefinition === undefined) { + if (scopeName !== undefined) { + throw new HardhatError(ERRORS.ARGUMENTS.UNRECOGNIZED_SCOPED_TASK, { + scope: scopeName, + task: taskName, + }); + } throw new HardhatError(ERRORS.ARGUMENTS.UNRECOGNIZED_TASK, { task: taskName, }); @@ -264,9 +308,11 @@ async function main() { resolvedConfig, hardhatArguments, taskDefinitions, + scopesDefinitions, envExtenders, ctx.experimentalHardhatNetworkMessageTraceHooks, - userConfig + userConfig, + providerExtenders ); ctx.setHardhatRuntimeEnvironment(env); @@ -274,7 +320,7 @@ async function main() { try { const timestampBeforeRun = new Date().getTime(); - await env.run(taskName, taskArguments); + await env.run({ scope: scopeName, task: taskName }, taskArguments); const timestampAfterRun = new Date().getTime(); @@ -307,6 +353,16 @@ async function main() { ) { await suggestInstallingHardhatVscode(); + // we show the solidity survey message if the tests failed and only + // 1/3 of the time + if ( + process.exitCode !== 0 && + Math.random() < 0.3333 && + process.env.HARDHAT_HIDE_SOLIDITY_SURVEY_MESSAGE !== "true" + ) { + showSoliditySurveyMessage(); + } + // we show the viaIR warning only if the tests failed if (process.exitCode !== 0) { showViaIRWarning(resolvedConfig); @@ -374,6 +430,35 @@ async function main() { } } +async function createNewProject() { + if (isCwdInsideProject()) { + throw new HardhatError(ERRORS.GENERAL.HARDHAT_PROJECT_ALREADY_CREATED, { + hardhatProjectRootPath: getUserConfigPath(), + }); + } + + if ( + process.stdout.isTTY === true || + process.env.HARDHAT_CREATE_JAVASCRIPT_PROJECT_WITH_DEFAULTS !== undefined || + process.env.HARDHAT_CREATE_TYPESCRIPT_PROJECT_WITH_DEFAULTS !== undefined || + process.env.HARDHAT_CREATE_TYPESCRIPT_VIEM_PROJECT_WITH_DEFAULTS !== + undefined + ) { + await createProject(); + return; + } + + // Many terminal emulators in windows fail to run the createProject() + // workflow, and don't present themselves as TTYs. If we are in this + // situation we throw a special error instructing the user to use WSL or + // powershell to initialize the project. + if (process.platform === "win32") { + throw new HardhatError(ERRORS.GENERAL.NOT_INSIDE_PROJECT_ON_WINDOWS); + } + + throw new HardhatError(ERRORS.GENERAL.NOT_IN_INTERACTIVE_SHELL); +} + main() .then(() => process.exit(process.exitCode)) .catch((error) => { diff --git a/packages/hardhat-core/src/internal/cli/constants.ts b/packages/hardhat-core/src/internal/cli/constants.ts new file mode 100644 index 0000000000..8a88eaea8b --- /dev/null +++ b/packages/hardhat-core/src/internal/cli/constants.ts @@ -0,0 +1 @@ +export const SUPPORTED_NODE_VERSIONS = ["^16.0.0", "^18.0.0", "^20.0.0"]; diff --git a/packages/hardhat-core/src/internal/cli/project-creation.ts b/packages/hardhat-core/src/internal/cli/project-creation.ts index 513438b2db..5f750bfe9b 100644 --- a/packages/hardhat-core/src/internal/cli/project-creation.ts +++ b/packages/hardhat-core/src/internal/cli/project-creation.ts @@ -1,6 +1,5 @@ import chalk from "chalk"; import fsExtra from "fs-extra"; -import os from "os"; import path from "path"; import { HARDHAT_NAME } from "../constants"; @@ -8,10 +7,7 @@ import { assertHardhatInvariant, HardhatError } from "../core/errors"; import { ERRORS } from "../core/errors-list"; import { getRecommendedGitIgnore } from "../core/project-structure"; import { getAllFilesMatching } from "../util/fs-utils"; -import { - hasConsentedTelemetry, - writeTelemetryConsent, -} from "../util/global-dir"; +import { hasConsentedTelemetry } from "../util/global-dir"; import { fromEntries } from "../util/lang"; import { getPackageJson, @@ -19,46 +15,61 @@ import { PackageJson, } from "../util/packageInfo"; import { pluralize } from "../util/strings"; +import { isRunningOnCiServer } from "../util/ci-detection"; import { confirmRecommendedDepsInstallation, - confirmTelemetryConsent, confirmProjectCreation, } from "./prompt"; import { emoji } from "./emoji"; import { Dependencies, PackageManager } from "./types"; +import { requestTelemetryConsent } from "./analytics"; enum Action { CREATE_JAVASCRIPT_PROJECT_ACTION = "Create a JavaScript project", CREATE_TYPESCRIPT_PROJECT_ACTION = "Create a TypeScript project", + CREATE_TYPESCRIPT_VIEM_PROJECT_ACTION = "Create a TypeScript project (with Viem)", CREATE_EMPTY_HARDHAT_CONFIG_ACTION = "Create an empty hardhat.config.js", QUIT_ACTION = "Quit", } type SampleProjectTypeCreationAction = | Action.CREATE_JAVASCRIPT_PROJECT_ACTION - | Action.CREATE_TYPESCRIPT_PROJECT_ACTION; + | Action.CREATE_TYPESCRIPT_PROJECT_ACTION + | Action.CREATE_TYPESCRIPT_VIEM_PROJECT_ACTION; const HARDHAT_PACKAGE_NAME = "hardhat"; -const PROJECT_DEPENDENCIES: Dependencies = { - "@nomicfoundation/hardhat-toolbox": "^2.0.0", +const PROJECT_DEPENDENCIES: Dependencies = {}; + +const ETHERS_PROJECT_DEPENDENCIES: Dependencies = { + "@nomicfoundation/hardhat-toolbox": "^4.0.0", +}; + +const VIEM_PROJECT_DEPENDENCIES: Dependencies = { + "@nomicfoundation/hardhat-toolbox-viem": "^2.0.0", }; const PEER_DEPENDENCIES: Dependencies = { - hardhat: "^2.11.1", + hardhat: "^2.14.0", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", chai: "^4.2.0", - ethers: "^5.4.7", "hardhat-gas-reporter": "^1.0.8", "solidity-coverage": "^0.8.0", - "@typechain/hardhat": "^6.1.2", - typechain: "^8.1.0", - "@typechain/ethers-v5": "^10.1.0", - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", +}; + +const ETHERS_PEER_DEPENDENCIES: Dependencies = { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + ethers: "^6.4.0", + "@typechain/hardhat": "^9.0.0", + typechain: "^8.3.0", + "@typechain/ethers-v6": "^0.5.0", +}; + +const VIEM_PEER_DEPENDENCIES: Dependencies = { + "@nomicfoundation/hardhat-viem": "^1.0.0", + viem: "^1.15.1", }; const TYPESCRIPT_DEPENDENCIES: Dependencies = {}; @@ -66,11 +77,20 @@ const TYPESCRIPT_DEPENDENCIES: Dependencies = {}; const TYPESCRIPT_PEER_DEPENDENCIES: Dependencies = { "@types/chai": "^4.2.0", "@types/mocha": ">=9.1.0", - "@types/node": ">=12.0.0", + "@types/node": ">=16.0.0", "ts-node": ">=8.0.0", typescript: ">=4.5.0", }; +const TYPESCRIPT_ETHERS_PEER_DEPENDENCIES: Dependencies = { + typescript: ">=4.5.0", +}; + +const TYPESCRIPT_VIEM_PEER_DEPENDENCIES: Dependencies = { + "@types/chai-as-promised": "^7.1.6", + typescript: "~5.0.4", +}; + // generated with the "colossal" font function printAsciiLogo() { console.log( @@ -132,6 +152,8 @@ async function copySampleProject( false, "Shouldn't try to create a TypeScript project in an ESM based project" ); + } else if (projectType === Action.CREATE_TYPESCRIPT_VIEM_PROJECT_ACTION) { + sampleProjectName = "typescript-viem"; } else { sampleProjectName = "typescript"; } @@ -229,7 +251,7 @@ async function printRecommendedDepsInstallationInstructions( // exported so we can test that it uses the latest supported version of solidity export const EMPTY_HARDHAT_CONFIG = `/** @type import('hardhat/config').HardhatUserConfig */ module.exports = { - solidity: "0.8.18", + solidity: "0.8.19", }; `; @@ -254,6 +276,11 @@ async function getAction(isEsm: boolean): Promise { process.env.HARDHAT_CREATE_TYPESCRIPT_PROJECT_WITH_DEFAULTS !== undefined ) { return Action.CREATE_TYPESCRIPT_PROJECT_ACTION; + } else if ( + process.env.HARDHAT_CREATE_TYPESCRIPT_VIEM_PROJECT_WITH_DEFAULTS !== + undefined + ) { + return Action.CREATE_TYPESCRIPT_VIEM_PROJECT_ACTION; } const { default: enquirer } = await import("enquirer"); @@ -264,26 +291,36 @@ async function getAction(isEsm: boolean): Promise { type: "select", message: "What do you want to do?", initial: 0, - choices: Object.values(Action).map((a: Action) => { - let message: string; - if (isEsm) { - if (a === Action.CREATE_EMPTY_HARDHAT_CONFIG_ACTION) { - message = a.replace(".js", ".cjs"); - } else if (a === Action.CREATE_TYPESCRIPT_PROJECT_ACTION) { - message = `${a} (not available for ESM projects)`; + choices: Object.values(Action) + .filter((a: Action) => { + if (isEsm && a === Action.CREATE_TYPESCRIPT_VIEM_PROJECT_ACTION) { + // we omit the viem option for ESM projects to avoid showing + // two disabled options + return false; + } + + return true; + }) + .map((a: Action) => { + let message: string; + if (isEsm) { + if (a === Action.CREATE_EMPTY_HARDHAT_CONFIG_ACTION) { + message = a.replace(".js", ".cjs"); + } else if (a === Action.CREATE_TYPESCRIPT_PROJECT_ACTION) { + message = `${a} (not available for ESM projects)`; + } else { + message = a; + } } else { message = a; } - } else { - message = a; - } - - return { - name: a, - message, - value: a, - }; - }), + + return { + name: a, + message, + value: a, + }; + }), }, ]); @@ -299,7 +336,7 @@ async function getAction(isEsm: boolean): Promise { return Action.QUIT_ACTION; } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw e; } } @@ -317,12 +354,26 @@ async function createPackageJson() { function showStarOnGitHubMessage() { console.log( chalk.cyan("Give Hardhat a star on Github if you're enjoying it!") + - emoji(" 💞✨") + emoji(" ⭐️✨") ); console.log(); console.log(chalk.cyan(" https://github.com/NomicFoundation/hardhat")); } +export function showSoliditySurveyMessage() { + if (new Date() > new Date("2024-01-07 23:39")) { + // the survey has finished + return; + } + + console.log(); + console.log( + chalk.cyan( + "Please take a moment to complete the 2023 Solidity Survey: https://hardhat.org/solidity-survey-2023" + ) + ); +} + export async function createProject() { printAsciiLogo(); @@ -368,6 +419,7 @@ export async function createProject() { console.log(); showStarOnGitHubMessage(); + showSoliditySurveyMessage(); return; } @@ -379,7 +431,9 @@ export async function createProject() { const useDefaultPromptResponses = process.env.HARDHAT_CREATE_JAVASCRIPT_PROJECT_WITH_DEFAULTS !== undefined || - process.env.HARDHAT_CREATE_TYPESCRIPT_PROJECT_WITH_DEFAULTS !== undefined; + process.env.HARDHAT_CREATE_TYPESCRIPT_PROJECT_WITH_DEFAULTS !== undefined || + process.env.HARDHAT_CREATE_TYPESCRIPT_VIEM_PROJECT_WITH_DEFAULTS !== + undefined; if (useDefaultPromptResponses) { responses = { @@ -394,7 +448,7 @@ export async function createProject() { return; } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw e; } } @@ -405,12 +459,12 @@ export async function createProject() { await addGitIgnore(projectRoot); } - if (hasConsentedTelemetry() === undefined) { - const telemetryConsent = await confirmTelemetryConsent(); - - if (telemetryConsent !== undefined) { - writeTelemetryConsent(telemetryConsent); - } + if ( + process.env.HARDHAT_DISABLE_TELEMETRY_PROMPT !== "true" && + !isRunningOnCiServer() && + hasConsentedTelemetry() === undefined + ) { + await requestTelemetryConsent(); } await copySampleProject(projectRoot, action, isEsm); @@ -468,15 +522,11 @@ export async function createProject() { console.log("See the README.md file for some example tasks you can run"); console.log(); showStarOnGitHubMessage(); + showSoliditySurveyMessage(); } async function canInstallRecommendedDeps() { - return ( - (await fsExtra.pathExists("package.json")) && - // TODO: Figure out why this doesn't work on Win - // cf. https://github.com/nomiclabs/hardhat/issues/1698 - os.type() !== "Windows_NT" - ); + return fsExtra.pathExists("package.json"); } function isInstalled(dep: string) { @@ -519,7 +569,7 @@ async function installRecommendedDependencies(dependencies: Dependencies) { console.log(""); // The reason we don't quote the dependencies here is because they are going - // to be used in child_process.sapwn, which doesn't require escaping string, + // to be used in child_process.spawn, which doesn't require escaping string, // and can actually fail if you do. const installCmd = await getRecommendedDependenciesInstallationCommand( dependencies, @@ -538,6 +588,7 @@ async function installDependencies( const childProcess = spawn(packageManager, args, { stdio: "inherit", + shell: true, }); return new Promise((resolve, reject) => { @@ -587,12 +638,13 @@ async function getDependencies( !(await doesNpmAutoInstallPeerDependencies()); const shouldInstallTypescriptDependencies = - projectType === Action.CREATE_TYPESCRIPT_PROJECT_ACTION; + projectType === Action.CREATE_TYPESCRIPT_PROJECT_ACTION || + projectType === Action.CREATE_TYPESCRIPT_VIEM_PROJECT_ACTION; const shouldInstallTypescriptPeerDependencies = shouldInstallTypescriptDependencies && shouldInstallPeerDependencies; - return { + const commonDependencies: Dependencies = { [HARDHAT_PACKAGE_NAME]: `^${(await getPackageJson()).version}`, ...PROJECT_DEPENDENCIES, ...(shouldInstallPeerDependencies ? PEER_DEPENDENCIES : {}), @@ -601,4 +653,33 @@ async function getDependencies( ? TYPESCRIPT_PEER_DEPENDENCIES : {}), }; + + // At the moment, the default toolbox is the ethers based toolbox + const shouldInstallDefaultToolbox = + projectType !== Action.CREATE_TYPESCRIPT_VIEM_PROJECT_ACTION; + + const ethersToolboxDependencies: Dependencies = { + ...ETHERS_PROJECT_DEPENDENCIES, + ...(shouldInstallPeerDependencies ? ETHERS_PEER_DEPENDENCIES : {}), + ...(shouldInstallTypescriptPeerDependencies + ? TYPESCRIPT_ETHERS_PEER_DEPENDENCIES + : {}), + }; + + const viemToolboxDependencies: Dependencies = { + ...VIEM_PROJECT_DEPENDENCIES, + ...(shouldInstallPeerDependencies ? VIEM_PEER_DEPENDENCIES : {}), + ...(shouldInstallTypescriptPeerDependencies + ? TYPESCRIPT_VIEM_PEER_DEPENDENCIES + : {}), + }; + + const toolboxDependencies: Dependencies = shouldInstallDefaultToolbox + ? ethersToolboxDependencies + : viemToolboxDependencies; + + return { + ...commonDependencies, + ...toolboxDependencies, + }; } diff --git a/packages/hardhat-core/src/internal/cli/prompt.ts b/packages/hardhat-core/src/internal/cli/prompt.ts index 2df75d0045..bb6312f7b4 100644 --- a/packages/hardhat-core/src/internal/cli/prompt.ts +++ b/packages/hardhat-core/src/internal/cli/prompt.ts @@ -58,7 +58,7 @@ export async function confirmRecommendedDepsInstallation( return false; } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw e; } @@ -135,7 +135,7 @@ async function confirmationPromptWithTimeout( return undefined; } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw e; } } diff --git a/packages/hardhat-core/src/internal/cli/vars.ts b/packages/hardhat-core/src/internal/cli/vars.ts new file mode 100644 index 0000000000..7a36f80920 --- /dev/null +++ b/packages/hardhat-core/src/internal/cli/vars.ts @@ -0,0 +1,301 @@ +import chalk from "chalk"; +import debug from "debug"; +import { HardhatError, assertHardhatInvariant } from "../core/errors"; +import { ERRORS } from "../core/errors-list"; +import { HardhatContext } from "../context"; +import { VarsManagerSetup } from "../core/vars/vars-manager-setup"; +import { + importCsjOrEsModule, + resolveConfigPath, +} from "../core/config/config-loading"; +import { getVarsFilePath } from "../util/global-dir"; +import { ArgumentsParser } from "./ArgumentsParser"; +import { emoji } from "./emoji"; + +const log = debug("hardhat:cli:vars"); + +export async function handleVars( + allUnparsedCLAs: string[], + configPath: string | undefined +): Promise { + const { taskDefinition, taskArguments } = + await getTaskDefinitionAndTaskArguments(allUnparsedCLAs); + + switch (taskDefinition.name) { + case "set": + return set(taskArguments.var, taskArguments.value); + case "get": + return get(taskArguments.var); + case "list": + return list(); + case "delete": + return del(taskArguments.var); + case "path": + return path(); + case "setup": + return setup(configPath); + default: + console.error(chalk.red(`Invalid task '${taskDefinition.name}'`)); + return 1; // Error code + } +} + +async function set(key: string, value?: string): Promise { + const varsManager = HardhatContext.getHardhatContext().varsManager; + + varsManager.validateKey(key); + + varsManager.set(key, value ?? (await getVarValue())); + + if (process.stdout.isTTY) { + console.warn( + `The configuration variable has been stored in ${varsManager.getStoragePath()}` + ); + } + + return 0; +} + +function get(key: string): number { + const value = HardhatContext.getHardhatContext().varsManager.get(key); + + if (value !== undefined) { + console.log(value); + return 0; + } + + console.warn( + chalk.yellow( + `The configuration variable '${key}' is not set in ${HardhatContext.getHardhatContext().varsManager.getStoragePath()}` + ) + ); + return 1; +} + +function list(): number { + const keys = HardhatContext.getHardhatContext().varsManager.list(); + const varsStoragePath = + HardhatContext.getHardhatContext().varsManager.getStoragePath(); + + if (keys.length > 0) { + keys.forEach((k) => console.log(k)); + + if (process.stdout.isTTY) { + console.warn( + `\nAll configuration variables are stored in ${varsStoragePath}` + ); + } + } else { + if (process.stdout.isTTY) { + console.warn( + chalk.yellow( + `There are no configuration variables stored in ${varsStoragePath}` + ) + ); + } + } + + return 0; +} + +function del(key: string): number { + const varsStoragePath = + HardhatContext.getHardhatContext().varsManager.getStoragePath(); + + if (HardhatContext.getHardhatContext().varsManager.delete(key)) { + if (process.stdout.isTTY) { + console.warn( + `The configuration variable was deleted from ${varsStoragePath}` + ); + } + return 0; + } + + console.warn( + chalk.yellow( + `There is no configuration variable '${key}' to delete from ${varsStoragePath}` + ) + ); + + return 1; +} + +function path() { + console.log(HardhatContext.getHardhatContext().varsManager.getStoragePath()); + return 0; +} + +function setup(configPath: string | undefined) { + log("Switching to SetupVarsManager to collect vars"); + + const varsManagerSetup = new VarsManagerSetup(getVarsFilePath()); + + HardhatContext.getHardhatContext().varsManager = varsManagerSetup; + + try { + log("Loading config and tasks to trigger vars collection"); + loadConfigFile(configPath); + } catch (err: any) { + console.error( + chalk.red( + "There is an error in your Hardhat configuration file. Please double check it.\n" + ) + ); + + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error + throw err; + } + + listVarsToSetup(varsManagerSetup); + + return 0; +} + +// The code below duplicates a section from the 'loadConfigAndTasks' function. +// While we could have refactored the 'config-loading.ts' module to make this logic reusable, +// it would have added complexity and potentially made the code harder to understand. +function loadConfigFile(configPath: string | undefined) { + const configEnv = require(`../core/config/config-env`); + + // Load all the functions and objects exported by the 'config-env' file in a global scope + const globalAsAny: any = global; + Object.entries(configEnv).forEach( + ([key, value]) => (globalAsAny[key] = value) + ); + + const resolvedConfigPath = resolveConfigPath(configPath); + importCsjOrEsModule(resolvedConfigPath); +} + +async function getVarValue(): Promise { + const { default: enquirer } = await import("enquirer"); + + const response: { value: string } = await enquirer.prompt({ + type: "password", + name: "value", + message: "Enter value:", + }); + + return response.value; +} + +function listVarsToSetup(varsManagerSetup: VarsManagerSetup) { + const HH_SET_COMMAND = "npx hardhat vars set"; + + const requiredKeysToSet = varsManagerSetup.getRequiredVarsToSet(); + const optionalKeysToSet = varsManagerSetup.getOptionalVarsToSet(); + + if (requiredKeysToSet.length === 0 && optionalKeysToSet.length === 0) { + console.log( + chalk.green( + "There are no configuration variables that need to be set for this project" + ) + ); + console.log(); + printAlreadySetKeys(varsManagerSetup); + return; + } + + if (requiredKeysToSet.length > 0) { + console.log( + chalk.bold( + `${emoji("❗ ")}The following configuration variables need to be set:\n` + ) + ); + console.log( + requiredKeysToSet.map((k) => ` ${HH_SET_COMMAND} ${k}`).join("\n") + ); + console.log(); + } + + if (optionalKeysToSet.length > 0) { + console.log( + chalk.bold( + `${emoji("💡 ")}The following configuration variables are optional:\n` + ) + ); + console.log( + optionalKeysToSet.map((k) => ` ${HH_SET_COMMAND} ${k}`).join("\n") + ); + console.log(); + } + + printAlreadySetKeys(varsManagerSetup); +} + +function printAlreadySetKeys(varsManagerSetup: VarsManagerSetup) { + const requiredKeysAlreadySet = varsManagerSetup.getRequiredVarsAlreadySet(); + const optionalKeysAlreadySet = varsManagerSetup.getOptionalVarsAlreadySet(); + const envVars = varsManagerSetup.getEnvVars(); + + if ( + requiredKeysAlreadySet.length === 0 && + optionalKeysAlreadySet.length === 0 && + envVars.length === 0 + ) { + return; + } + + console.log( + `${chalk.bold(`${emoji("✔️ ")}Configuration variables already set:`)}` + ); + console.log(); + + if (requiredKeysAlreadySet.length > 0) { + console.log(" Mandatory:"); + console.log(requiredKeysAlreadySet.map((x) => ` ${x}`).join("\n")); + console.log(); + } + + if (optionalKeysAlreadySet.length > 0) { + console.log(" Optional:"); + console.log(optionalKeysAlreadySet.map((x) => ` ${x}`).join("\n")); + console.log(); + } + + if (envVars.length > 0) { + console.log(" Set via environment variables:"); + console.log(envVars.map((x) => ` ${x}`).join("\n")); + console.log(); + } +} + +async function getTaskDefinitionAndTaskArguments(allUnparsedCLAs: string[]) { + const ctx = HardhatContext.getHardhatContext(); + ctx.setConfigLoadingAsStarted(); + require("../../builtin-tasks/vars"); + ctx.setConfigLoadingAsFinished(); + + const argumentsParser = new ArgumentsParser(); + + const taskDefinitions = ctx.tasksDSL.getTaskDefinitions(); + const scopesDefinitions = ctx.tasksDSL.getScopesDefinitions(); + + const { scopeName, taskName, unparsedCLAs } = + argumentsParser.parseScopeAndTaskNames( + allUnparsedCLAs, + taskDefinitions, + scopesDefinitions + ); + + assertHardhatInvariant( + scopeName === "vars", + "This function should only be called to handle tasks under the 'vars' scope" + ); + + const taskDefinition = ctx.tasksDSL.getTaskDefinition(scopeName, taskName); + + if (taskDefinition === undefined) { + throw new HardhatError(ERRORS.ARGUMENTS.UNRECOGNIZED_SCOPED_TASK, { + scope: scopeName, + task: taskName, + }); + } + + const taskArguments = argumentsParser.parseTaskArguments( + taskDefinition, + unparsedCLAs + ); + + return { taskDefinition, taskArguments }; +} diff --git a/packages/hardhat-core/src/internal/cli/version-notifier.ts b/packages/hardhat-core/src/internal/cli/version-notifier.ts new file mode 100644 index 0000000000..1ac7ececee --- /dev/null +++ b/packages/hardhat-core/src/internal/cli/version-notifier.ts @@ -0,0 +1,268 @@ +import boxen from "boxen"; +import chalk from "chalk"; +import fsExtra from "fs-extra"; +import { join } from "node:path"; +import { mkdir, readFile, writeFile } from "node:fs/promises"; +import semver from "semver"; + +import { getCacheDir } from "../util/global-dir"; +import { getHardhatVersion } from "../util/packageInfo"; + +const GITHUB_API_URL = "https://api.github.com"; +const GITHUB_OWNER = "NomicFoundation"; +const GITHUB_REPO = "hardhat"; +const V3_RELEASE_TAG = "hardhat@3.0.0"; +const V3_RELEASE_VERSION_NOTIFIER_ASSET_NAME = "version-notifier-message.txt"; +const V3_RELEASE_MAX_TIMES_SHOWN = 5; +const CURRENT_HARDHAT_MAJOR_VERSION = 2; + +const boxenOptions = { + padding: 1, + borderStyle: "round", + borderColor: "yellow", +} as const; + +interface VersionNotifierCache { + lastCheck: string | 0; + v3TimesShown: number; + v3Release?: Release; + v3ReleaseMessage?: string; +} + +/* eslint-disable @typescript-eslint/naming-convention */ +interface Release { + name: string; + tag_name: string; + draft: boolean; + prerelease: boolean; + published_at: string; + html_url: string; + assets: Array<{ + name: string; + browser_download_url: string; + }>; + body: string; // release notes +} +/* eslint-enable @typescript-eslint/naming-convention */ + +export async function showNewVersionNotification() { + const cache = await readCache(); + + const lastCheckDate = new Date(cache.lastCheck); + const now = new Date(); + const oneDay = 1000 * 60 * 60 * 24; + + if (now.getTime() - lastCheckDate.getTime() < oneDay) { + return; + } + + const hardhatVersion = getHardhatVersion(); + + const releases = await getReleases(); + + const sortedV2Versions = releases + // filter and map releases to versions + .flatMap((release) => { + const [packageName, rawPackageVersion] = release.tag_name.split("@"); + + const packageVersion = semver.valid(rawPackageVersion); + + // filter out a release if: + // - it's not a hardhat-core release + // - it's a draft or a prerelease + // - the version is invalid + // - the major version is not the current major + if ( + packageName !== GITHUB_REPO || + release.draft || + release.prerelease || + packageVersion === null || + semver.major(packageVersion) !== CURRENT_HARDHAT_MAJOR_VERSION + ) { + return []; + } + + return [packageVersion]; + }) + // sort in descending order by version + .sort((releaseAVersion, releaseBVersion) => { + return semver.rcompare(releaseAVersion, releaseBVersion); + }); + + const latestV2Version: string | undefined = sortedV2Versions[0]; + + const v3Release = cache.v3Release ?? (await getV3Release()); + + if (latestV2Version === undefined && v3Release === undefined) { + // this should never happen unless the github api is down + return; + } + + if ( + latestV2Version !== undefined && + semver.gt(latestV2Version, hardhatVersion) + ) { + let installationCommand = "npm install"; + if (await fsExtra.pathExists("yarn.lock")) { + installationCommand = "yarn add"; + } else if (await fsExtra.pathExists("pnpm-lock.yaml")) { + installationCommand = "pnpm install"; + } + + console.log( + boxen( + `New Hardhat release available! ${chalk.red( + hardhatVersion + )} -> ${chalk.green(latestV2Version)}. + +Changelog: https://hardhat.org/release/${latestV2Version} + +Run "${installationCommand} hardhat@latest" to update.`, + boxenOptions + ) + ); + } + + if ( + v3Release !== undefined && + cache.v3TimesShown < V3_RELEASE_MAX_TIMES_SHOWN + ) { + const releaseVersion = semver.valid(v3Release.tag_name.split("@")[1]); + + if (releaseVersion !== null) { + cache.v3ReleaseMessage ??= await getV3ReleaseMessage(v3Release); + if (cache.v3ReleaseMessage !== undefined) { + console.log(boxen(cache.v3ReleaseMessage, boxenOptions)); + cache.v3TimesShown++; + } + } + } + + await writeCache({ + ...cache, + lastCheck: now.toISOString(), + v3Release, + }); +} + +async function readCache(): Promise { + const cacheDir = await getCacheDir(); + const versionNotifierCachePath = join(cacheDir, "version-notifier.json"); + + let cache: VersionNotifierCache = { + lastCheck: 0, // new Date(0) represents the unix epoch + v3TimesShown: 0, + }; + try { + const fileContents = await readFile(versionNotifierCachePath, "utf-8"); + const { lastCheck, v3TimesShown } = JSON.parse(fileContents); + + cache = { + lastCheck: typeof lastCheck === "string" ? lastCheck : 0, + v3TimesShown: typeof v3TimesShown === "number" ? v3TimesShown : 0, + }; + } catch (error: any) { + // We don't care if it fails + } + + return cache; +} + +async function writeCache(cache: VersionNotifierCache) { + const cacheDir = await getCacheDir(); + const versionNotifierCachePath = join(cacheDir, "version-notifier.json"); + + try { + await mkdir(cacheDir, { recursive: true }); + await writeFile(versionNotifierCachePath, JSON.stringify(cache, null, 2)); + } catch (error) { + // We don't care if it fails + } +} + +async function getReleases(): Promise { + const { request } = await import("undici"); + let releases: Release[] = []; + + try { + const githubResponse = await request( + `${GITHUB_API_URL}/repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases`, + { + method: "GET", + headers: { + "User-Agent": "Hardhat", + "X-GitHub-Api-Version": "2022-11-28", + }, + query: { + per_page: 100, + }, + } + ); + releases = (await githubResponse.body.json()) as Release[]; + } catch (error: any) { + // We don't care if it fails + } + + return releases; +} + +async function getV3Release(): Promise { + const { request } = await import("undici"); + let v3Release: Release | undefined; + + try { + const githubResponse = await request( + `${GITHUB_API_URL}/repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases/tags/${V3_RELEASE_TAG}`, + { + method: "GET", + headers: { + "User-Agent": "Hardhat", + "X-GitHub-Api-Version": "2022-11-28", + }, + } + ); + + const jsonResponse = (await githubResponse.body.json()) as any; + if (jsonResponse.message === "Not Found") { + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error + throw new Error("Not Found"); + } + + v3Release = jsonResponse as Release; + } catch (error: any) { + // We don't care if it fails + } + + return v3Release; +} + +async function getV3ReleaseMessage( + v3Release: Release +): Promise { + const { request } = await import("undici"); + + const versionNotifierAsset = v3Release.assets.find( + ({ name }) => name === V3_RELEASE_VERSION_NOTIFIER_ASSET_NAME + ); + + if (versionNotifierAsset === undefined) { + return; + } + + let v3ReleaseMessage; + try { + const githubResponse = await request( + versionNotifierAsset.browser_download_url, + { + method: "GET", + maxRedirections: 10, + } + ); + + v3ReleaseMessage = await githubResponse.body.text(); + } catch (error: any) { + // We don't care if it fails + } + + return v3ReleaseMessage; +} diff --git a/packages/hardhat-core/src/internal/context.ts b/packages/hardhat-core/src/internal/context.ts index 0cc8dc12de..c144662acd 100644 --- a/packages/hardhat-core/src/internal/context.ts +++ b/packages/hardhat-core/src/internal/context.ts @@ -1,13 +1,17 @@ import { ConfigExtender, + EnvironmentExtender, ExperimentalHardhatNetworkMessageTraceHook, HardhatRuntimeEnvironment, + ProviderExtender, } from "../types"; -import { ExtenderManager } from "./core/config/extenders"; import { assertHardhatInvariant, HardhatError } from "./core/errors"; import { ERRORS } from "./core/errors-list"; +import { VarsManagerSetup } from "./core/vars/vars-manager-setup"; +import { VarsManager } from "./core/vars/vars-manager"; import { TasksDSL } from "./core/tasks/dsl"; +import { getVarsFilePath } from "./util/global-dir"; import { getRequireCachedFiles } from "./util/platform"; export type GlobalWithHardhatContext = typeof global & { @@ -15,6 +19,10 @@ export type GlobalWithHardhatContext = typeof global & { }; export class HardhatContext { + constructor() { + this.varsManager = new VarsManager(getVarsFilePath()); + } + public static isCreated(): boolean { const globalWithHardhatContext = global as GlobalWithHardhatContext; return globalWithHardhatContext.__hardhatContext !== undefined; @@ -45,8 +53,11 @@ export class HardhatContext { } public readonly tasksDSL = new TasksDSL(); - public readonly extendersManager = new ExtenderManager(); + public readonly environmentExtenders: EnvironmentExtender[] = []; public environment?: HardhatRuntimeEnvironment; + public readonly providerExtenders: ProviderExtender[] = []; + public varsManager: VarsManager | VarsManagerSetup; + public readonly configExtenders: ConfigExtender[] = []; // NOTE: This is experimental and will be removed. Please contact our team if diff --git a/packages/hardhat-core/src/internal/core/config/config-env.ts b/packages/hardhat-core/src/internal/core/config/config-env.ts index d86511df2a..9db4535ff4 100644 --- a/packages/hardhat-core/src/internal/core/config/config-env.ts +++ b/packages/hardhat-core/src/internal/core/config/config-env.ts @@ -1,12 +1,16 @@ import { ActionType, ConfigExtender, + ConfigurableScopeDefinition, ConfigurableTaskDefinition, EnvironmentExtender, ExperimentalHardhatNetworkMessageTraceHook, + ProviderExtender, TaskArguments, } from "../../../types"; import { HardhatContext } from "../../context"; +import { HardhatError } from "../errors"; +import { ERRORS } from "../errors-list"; import * as argumentTypes from "../params/argumentTypes"; /** @@ -115,6 +119,16 @@ export function subtask( // Backwards compatibility alias export const internalTask = subtask; +export function scope( + name: string, + description?: string +): ConfigurableScopeDefinition { + const ctx = HardhatContext.getHardhatContext(); + const dsl = ctx.tasksDSL; + + return dsl.scope(name, description); +} + export const types = argumentTypes; /** @@ -126,15 +140,33 @@ export const types = argumentTypes; */ export function extendEnvironment(extender: EnvironmentExtender) { const ctx = HardhatContext.getHardhatContext(); - const extenderManager = ctx.extendersManager; - extenderManager.add(extender); + ctx.environmentExtenders.push(extender); } +/** + * Register a config extender what will be run after the + * Hardhat Runtime Environment is initialized. + * + * @param extender A function that receives the resolved config + * to be modified and the config provided by the user + */ export function extendConfig(extender: ConfigExtender) { const ctx = HardhatContext.getHardhatContext(); ctx.configExtenders.push(extender); } +/** + * Register a provider extender what will be run after the + * Hardhat Runtime Environment is initialized. + * + * @param extender A function that receives the current provider + * and returns a new one. + */ +export function extendProvider(extender: ProviderExtender) { + const ctx = HardhatContext.getHardhatContext(); + ctx.providerExtenders.push(extender); +} + // NOTE: This is experimental and will be removed. Please contact our team // if you are planning to use it. export function experimentalAddHardhatNetworkMessageTraceHook( @@ -143,3 +175,55 @@ export function experimentalAddHardhatNetworkMessageTraceHook( const ctx = HardhatContext.getHardhatContext(); ctx.experimentalHardhatNetworkMessageTraceHooks.push(hook); } + +/** + * This object provides methods to interact with the configuration variables. + */ +export const vars = { + has: hasVar, + get: getVar, +}; + +/** + * Checks if a configuration variable exists. + * + * @remarks + * This method, when used during setup (via `npx hardhat vars setup`), will mark the variable as optional. + * + * @param varName - The name of the variable to check. + * + * @returns `true` if the variable exists, `false` otherwise. + */ +function hasVar(varName: string): boolean { + // varsManager will be an instance of VarsManager or VarsManagerSetup depending on the context (vars setup mode or not) + return HardhatContext.getHardhatContext().varsManager.has(varName, true); +} + +/** + * Gets the value of the given configuration variable. + * + * @remarks + * This method, when used during setup (via `npx hardhat vars setup`), will mark the variable as required, + * unless a default value is provided. + * + * @param varName - The name of the variable to retrieve. + * @param [defaultValue] - An optional default value to return if the variable does not exist. + * + * @returns The value of the configuration variable if it exists, or the default value if provided. + * + * @throws HH1201 if the variable does not exist and no default value is set. + */ +function getVar(varName: string, defaultValue?: string): string { + // varsManager will be an instance of VarsManager or VarsManagerSetup depending on the context (vars setup mode or not) + const value = HardhatContext.getHardhatContext().varsManager.get( + varName, + defaultValue, + true + ); + + if (value !== undefined) return value; + + throw new HardhatError(ERRORS.VARS.VALUE_NOT_FOUND_FOR_VAR, { + value: varName, + }); +} diff --git a/packages/hardhat-core/src/internal/core/config/config-loading.ts b/packages/hardhat-core/src/internal/core/config/config-loading.ts index e77b448c06..02eba85506 100644 --- a/packages/hardhat-core/src/internal/core/config/config-loading.ts +++ b/packages/hardhat-core/src/internal/core/config/config-loading.ts @@ -25,7 +25,7 @@ import { DEFAULT_SOLC_VERSION } from "./default-config"; const log = debug("hardhat:core:config"); -function importCsjOrEsModule(filePath: string): any { +export function importCsjOrEsModule(filePath: string): any { try { const imported = require(filePath); return imported.default !== undefined ? imported.default : imported; @@ -38,7 +38,7 @@ function importCsjOrEsModule(filePath: string): any { ); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw e; } } @@ -95,7 +95,7 @@ export function loadConfigAndTasks( } catch (e) { analyzeModuleNotFoundError(e, configPath); - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw e; } finally { ctx.setConfigLoadingAsFinished(); @@ -218,7 +218,10 @@ export function analyzeModuleNotFoundError(error: any, configPath: string) { const missingPeerDependencies: { [name: string]: string } = {}; for (const [peerDependency, version] of Object.entries(peerDependencies)) { - const peerDependencyPackageJson = readPackageJson(peerDependency); + const peerDependencyPackageJson = readPackageJson( + peerDependency, + configPath + ); if (peerDependencyPackageJson === undefined) { missingPeerDependencies[peerDependency] = version; } @@ -244,10 +247,18 @@ interface PackageJson { }; } -function readPackageJson(packageName: string): PackageJson | undefined { +function readPackageJson( + packageName: string, + configPath: string +): PackageJson | undefined { + const resolve = require("resolve") as typeof import("resolve"); + try { - const packageJsonPath = require.resolve( - path.join(packageName, "package.json") + const packageJsonPath = resolve.sync( + path.join(packageName, "package.json"), + { + basedir: path.dirname(configPath), + } ); return require(packageJsonPath); diff --git a/packages/hardhat-core/src/internal/core/config/config-resolution.ts b/packages/hardhat-core/src/internal/core/config/config-resolution.ts index eb5991aefe..b4f0e04fb8 100644 --- a/packages/hardhat-core/src/internal/core/config/config-resolution.ts +++ b/packages/hardhat-core/src/internal/core/config/config-resolution.ts @@ -1,5 +1,6 @@ import cloneDeep from "lodash/cloneDeep"; import path from "path"; +import semver from "semver"; import { HardhatConfig, @@ -385,6 +386,10 @@ function resolveCompiler(compiler: SolcUserConfig): SolcConfig { settings: compiler.settings ?? {}, }; + if (semver.gte(resolved.version, "0.8.20")) { + resolved.settings.evmVersion = compiler.settings?.evmVersion ?? "paris"; + } + resolved.settings.optimizer = { enabled: false, runs: 200, diff --git a/packages/hardhat-core/src/internal/core/config/default-config.ts b/packages/hardhat-core/src/internal/core/config/default-config.ts index ec014daf62..b4f2a90e9a 100644 --- a/packages/hardhat-core/src/internal/core/config/default-config.ts +++ b/packages/hardhat-core/src/internal/core/config/default-config.ts @@ -60,13 +60,22 @@ export const defaultHardhatNetworkParams: Omit< 1, // mainnet { hardforkHistory: new Map([ - [HardforkName.BYZANTIUM, 4370000], - [HardforkName.CONSTANTINOPLE, 7280000], - [HardforkName.PETERSBURG, 7280000], - [HardforkName.ISTANBUL, 9069000], - [HardforkName.MUIR_GLACIER, 9200000], - [HardforkName.BERLIN, 12244000], - [HardforkName.LONDON, 12965000], + [HardforkName.FRONTIER, 0], + [HardforkName.HOMESTEAD, 1_150_000], + [HardforkName.DAO, 1_920_000], + [HardforkName.TANGERINE_WHISTLE, 2_463_000], + [HardforkName.SPURIOUS_DRAGON, 2_675_000], + [HardforkName.BYZANTIUM, 4_370_000], + [HardforkName.CONSTANTINOPLE, 7_280_000], + [HardforkName.PETERSBURG, 7_280_000], + [HardforkName.ISTANBUL, 9_069_000], + [HardforkName.MUIR_GLACIER, 9_200_000], + [HardforkName.BERLIN, 1_2244_000], + [HardforkName.LONDON, 12_965_000], + [HardforkName.ARROW_GLACIER, 13_773_000], + [HardforkName.GRAY_GLACIER, 15_050_000], + [HardforkName.MERGE, 15_537_394], + [HardforkName.SHANGHAI, 17_034_870], ]), }, ], diff --git a/packages/hardhat-core/src/internal/core/errors-list.ts b/packages/hardhat-core/src/internal/core/errors-list.ts index 838f622c90..99c930ab78 100644 --- a/packages/hardhat-core/src/internal/core/errors-list.ts +++ b/packages/hardhat-core/src/internal/core/errors-list.ts @@ -41,6 +41,7 @@ export const ERROR_RANGES: { INTERNAL: { min: 900, max: 999, title: "Internal Hardhat errors" }, SOURCE_NAMES: { min: 1000, max: 1099, title: "Source name errors" }, CONTRACT_NAMES: { min: 1100, max: 1199, title: "Contract name errors" }, + VARS: { min: 1200, max: 1299, title: "Connfiguration variables errors" }, }; export const ERRORS = { @@ -269,6 +270,43 @@ Rename the file to use the .cjs to fix this problem.`, description: `Your project is an ESM project (you have "type": "module" set in your package.json) and you are trying to initialize a TypeScript project. This is not supported yet.`, shouldBeReported: false, }, + UNINITIALIZED_PROVIDER: { + number: 21, + message: + "You tried to access an uninitialized provider. To initialize the provider, make sure you first call `.init()` or any method that hits a node like request, send or sendAsync.", + title: "Uninitialized provider", + description: `You tried to access an uninitialized provider. This is most likely caused by using the internal wrapped provider directly before using it to send a request or initializing it. +To initialize the provider, make sure you first call \`.init()\` or any method that hits a node like request, send or sendAsync.`, + shouldBeReported: true, + }, + INVALID_READ_OF_DIRECTORY: { + number: 22, + message: + "Invalid file path %absolutePath%. Attempting to read a directory instead of a file.", + title: "Invalid read: a directory cannot be read", + description: `An attempt was made to read a file, but a path to a directory was provided. + +Please double check the file path.`, + shouldBeReported: false, + }, + HARDHAT_PROJECT_ALREADY_CREATED: { + number: 23, + message: + "You are trying to initialize a project inside an existing Hardhat project. The path to the project's configuration file is: %hardhatProjectRootPath%.", + title: "Hardhat project already created", + description: `Cannot create a new Hardhat project, the current folder is already associated with a project.`, + shouldBeReported: false, + }, + NOT_IN_INTERACTIVE_SHELL: { + number: 24, + message: + "You are trying to initialize a project but you are not in an interactive shell.", + title: "Not inside an interactive shell", + description: `You are trying to initialize a project but you are not in an interactive shell. + +Please re-run the command inside an interactive shell.`, + shouldBeReported: false, + }, }, NETWORK: { CONFIG_NOT_FOUND: { @@ -576,11 +614,37 @@ Please double check your task definitions.`, What makes these types special is that they can be represented as strings, so you can write them down in the terminal.`, shouldBeReported: false, }, + TASK_SCOPE_CLASH: { + number: 213, + message: + "A clash was found while creating scope '%scopeName%', since a task with that name already exists.", + title: "Attempted to create a scope with a name already used by a task", + description: `You can't create a scope if a task with that name already exists. +Please double check your task definitions.`, + shouldBeReported: false, + }, + SCOPE_TASK_CLASH: { + number: 214, + message: + "A clash was found while creating task '%taskName%', since a scope with that name already exists.", + title: "Attempted to create a task with a name already used by a scope", + description: `You can't create a task if a scope with that name already exists. +Please double check your task definitions.`, + shouldBeReported: false, + }, + DEPRECATED_TRANSFORM_IMPORT_TASK: { + number: 215, + title: "Use of deprecated remapping task", + message: + "Task TASK_COMPILE_TRANSFORM_IMPORT_NAME is deprecated. Please update your @nomicfoundation/hardhat-foundry plugin version.", + description: `This task has been deprecated in favor of a new approach.`, + shouldBeReported: true, + }, }, ARGUMENTS: { INVALID_ENV_VAR_VALUE: { number: 300, - message: "Invalid environment variable %varName%'s value: %value%", + message: "Invalid environment variable '%varName%' with value: '%value%'", title: "Invalid environment variable value", description: `You are setting one of Hardhat's arguments using an environment variable, but it has an incorrect value. @@ -609,7 +673,7 @@ Please double check your arguments.`, }, UNRECOGNIZED_TASK: { number: 303, - message: "Unrecognized task %task%", + message: "Unrecognized task '%task%'", title: "Unrecognized task", description: `Tried to run a nonexistent task. @@ -711,6 +775,24 @@ This is not supported. Please run the help task to see the available options.`, This flag can only be used in typescript projects.`, shouldBeReported: false, }, + UNRECOGNIZED_SCOPE: { + number: 314, + message: "Unrecognized scope '%scope%'", + title: "Unrecognized scope", + description: `Tried to run a task from a nonexistent scope. + +Please double check the scope of the task you are trying to run.`, + shouldBeReported: false, + }, + UNRECOGNIZED_SCOPED_TASK: { + number: 315, + message: "Unrecognized task '%task%' under scope '%scope%'", + title: "Unrecognized scoped task", + description: `Tried to run a nonexistent scoped task. + +Please double check the name of the task you are trying to run.`, + shouldBeReported: false, + }, }, RESOLVER: { FILE_NOT_FOUND: { @@ -846,6 +928,26 @@ Use a relative import instead of referencing the package's name.`, Please double check your imports and installed libraries.`, shouldBeReported: false, }, + INVALID_IMPORT_OF_DIRECTORY: { + number: 414, + message: + "Invalid import %imported% from %from%. Attempting to import a directory. Directories cannot be imported.", + title: "Invalid import: a directory cannot be imported", + description: `A Solidity file is attempting to import a directory, which is not possible. + +Please double check your imports.`, + shouldBeReported: false, + }, + AMBIGUOUS_SOURCE_NAMES: { + number: 415, + message: + "Two different source names (%sourcenames%) resolve to the same file (%file%).", + title: "Ambiguous source names", + description: `Two different source names map to the same file. + +This is probably caused by multiple remappings pointing to the same source file.`, + shouldBeReported: false, + }, }, SOLC: { INVALID_VERSION: { @@ -1197,6 +1299,43 @@ A fully qualified name should look like file.sol:Contract`, shouldBeReported: false, }, }, + VARS: { + ONLY_MANAGED_IN_CLI: { + number: 1200, + title: "Configuration variables can only be managed from the CLI", + message: + "Configuration variables can only be managed from the CLI. They cannot be modified programmatically.", + description: `Configuration variables can only be managed from the CLI. They cannot be modified programmatically.`, + shouldBeReported: false, + }, + VALUE_NOT_FOUND_FOR_VAR: { + number: 1201, + title: "Configuration variable is not set", + message: + "Cannot find a value for the configuration variable '%value%'. Use 'npx hardhat vars set %value%' to set it or 'npx hardhat vars setup' to list all the configuration variables used by this project.", + description: `Cannot find a value for a mandatory configuration variable. + +Use 'npx hardhat vars set VAR' to set it or 'npx hardhat vars setup' to list all the configuration variables used by this project.`, + shouldBeReported: false, + }, + INVALID_CONFIG_VAR_NAME: { + number: 1202, + title: "Invalid name for a configuration variable", + message: + "Invalid name for a configuration variable: '%value%'. Configuration variables can only have alphanumeric characters and underscores, and they cannot start with a number.", + description: `Invalid name for a configuration variable. + +Configuration variables can only have alphanumeric characters and underscores, and they cannot start with a number.`, + shouldBeReported: false, + }, + INVALID_EMPTY_VALUE: { + number: 1203, + title: "Invalid empty value for configuration variable", + message: "A configuration variable cannot have an empty value.", + description: "A configuration variable cannot have an empty value.", + shouldBeReported: false, + }, + }, }; /** diff --git a/packages/hardhat-core/src/internal/core/jsonrpc/types/base-types.ts b/packages/hardhat-core/src/internal/core/jsonrpc/types/base-types.ts index 380bee6d7e..3dbedfba0e 100644 --- a/packages/hardhat-core/src/internal/core/jsonrpc/types/base-types.ts +++ b/packages/hardhat-core/src/internal/core/jsonrpc/types/base-types.ts @@ -40,6 +40,17 @@ export const rpcStorageSlot = new t.Type( t.identity ); +// This type is necessary because objects' keys need to be either strings or numbers to be properly handled by the 'io-ts' module. +// If they are not defined as strings or numbers, the type definition will result in an empty object without the required properties. +// For example, instead of displaying { ke1: value1 }, it will display {} +export const rpcStorageSlotHexString = new t.Type( + "Storage slot hex string", + (x): x is string => typeof x === "string", + (u, c) => + validateRpcStorageSlotHexString(u) ? t.success(u) : t.failure(u, c), + t.identity +); + function validateStorageSlot(u: unknown, c: t.Context): t.Validation { if (typeof u !== "string") { return t.failure( @@ -185,6 +196,10 @@ export function rpcDataToBuffer(data: string): Buffer { // Type guards +function validateRpcStorageSlotHexString(u: unknown): u is string { + return typeof u === "string" && /^0x([0-9a-fA-F]){64}$/.test(u); +} + function isRpcQuantityString(u: unknown): u is string { return ( typeof u === "string" && diff --git a/packages/hardhat-core/src/internal/core/jsonrpc/types/input/callRequest.ts b/packages/hardhat-core/src/internal/core/jsonrpc/types/input/callRequest.ts index 647ab5a261..2dadffd42a 100644 --- a/packages/hardhat-core/src/internal/core/jsonrpc/types/input/callRequest.ts +++ b/packages/hardhat-core/src/internal/core/jsonrpc/types/input/callRequest.ts @@ -2,7 +2,14 @@ import * as t from "io-ts"; import { optionalOrNullable } from "../../../../util/io-ts"; import { rpcAccessList } from "../access-list"; -import { rpcAddress, rpcData, rpcQuantity } from "../base-types"; +import { + rpcAddress, + rpcData, + rpcQuantity, + rpcStorageSlot, + rpcStorageSlotHexString, +} from "../base-types"; +import { address } from "../../../config/config-validation"; // Type used by eth_call and eth_estimateGas export const rpcCallRequest = t.type( @@ -21,3 +28,30 @@ export const rpcCallRequest = t.type( ); export type RpcCallRequest = t.TypeOf; + +// Types used by eth_call to configure the state override set +export const stateProperties = t.record( + rpcStorageSlotHexString, + rpcStorageSlot +); + +export const stateOverrideOptions = t.type( + { + balance: optionalOrNullable(rpcQuantity), + nonce: optionalOrNullable(rpcQuantity), + code: optionalOrNullable(rpcData), + state: optionalOrNullable(stateProperties), + stateDiff: optionalOrNullable(stateProperties), + }, + "stateOverrideOptions" +); + +export const stateOverrideSet = t.record(address, stateOverrideOptions); +export const optionalStateOverrideSet = optionalOrNullable(stateOverrideSet); + +export type StateProperties = t.TypeOf; +export type StateOverrideOptions = t.TypeOf; +export type StateOverrideSet = t.TypeOf; +export type OptionalStateOverrideSet = t.TypeOf< + typeof optionalStateOverrideSet +>; diff --git a/packages/hardhat-core/src/internal/core/jsonrpc/types/input/debugTraceTransaction.ts b/packages/hardhat-core/src/internal/core/jsonrpc/types/input/debugTraceTransaction.ts index 4aa4e8151b..fa021a97ac 100644 --- a/packages/hardhat-core/src/internal/core/jsonrpc/types/input/debugTraceTransaction.ts +++ b/packages/hardhat-core/src/internal/core/jsonrpc/types/input/debugTraceTransaction.ts @@ -5,6 +5,7 @@ import { optionalOrNullable } from "../../../../util/io-ts"; export const rpcDebugTracingConfig = optionalOrNullable( t.type( { + tracer: optionalOrNullable(t.string), disableStorage: optionalOrNullable(t.boolean), disableMemory: optionalOrNullable(t.boolean), disableStack: optionalOrNullable(t.boolean), diff --git a/packages/hardhat-core/src/internal/core/jsonrpc/types/input/validation.ts b/packages/hardhat-core/src/internal/core/jsonrpc/types/input/validation.ts index e87d4b0cfd..85db06ecca 100644 --- a/packages/hardhat-core/src/internal/core/jsonrpc/types/input/validation.ts +++ b/packages/hardhat-core/src/internal/core/jsonrpc/types/input/validation.ts @@ -3,7 +3,7 @@ import { PathReporter } from "io-ts/lib/PathReporter"; import { InvalidArgumentsError } from "../../../providers/errors"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ /** * This function validates a list of params, throwing InvalidArgumentsError diff --git a/packages/hardhat-core/src/internal/core/jsonrpc/types/output/decodeJsonRpcResponse.ts b/packages/hardhat-core/src/internal/core/jsonrpc/types/output/decodeJsonRpcResponse.ts index bca887bda9..9d68ad33b8 100644 --- a/packages/hardhat-core/src/internal/core/jsonrpc/types/output/decodeJsonRpcResponse.ts +++ b/packages/hardhat-core/src/internal/core/jsonrpc/types/output/decodeJsonRpcResponse.ts @@ -3,7 +3,7 @@ import { PathReporter } from "io-ts/lib/PathReporter"; import { InvalidResponseError } from "../../../providers/errors"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ /** * This function decodes an RPC out type, throwing InvalidResponseError if it's not valid. diff --git a/packages/hardhat-core/src/internal/core/params/argumentTypes.ts b/packages/hardhat-core/src/internal/core/params/argumentTypes.ts index d2067b3d9a..7d3dfb53c3 100644 --- a/packages/hardhat-core/src/internal/core/params/argumentTypes.ts +++ b/packages/hardhat-core/src/internal/core/params/argumentTypes.ts @@ -181,7 +181,7 @@ export const inputFile: CLIArgumentType = { if (stats.isDirectory()) { // This is caught and encapsulated in a hardhat error. - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new Error(`${strValue} is a directory, not a file`); } } catch (error) { @@ -196,7 +196,7 @@ export const inputFile: CLIArgumentType = { ); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } @@ -229,7 +229,7 @@ export const inputFile: CLIArgumentType = { ); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } }, @@ -252,7 +252,7 @@ export const json: CLIArgumentType = { ); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } }, diff --git a/packages/hardhat-core/src/internal/core/params/env-variables.ts b/packages/hardhat-core/src/internal/core/params/env-variables.ts index c54fa7d01a..fc3147fe86 100644 --- a/packages/hardhat-core/src/internal/core/params/env-variables.ts +++ b/packages/hardhat-core/src/internal/core/params/env-variables.ts @@ -59,7 +59,7 @@ export function getEnvHardhatArguments( ); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } } else { diff --git a/packages/hardhat-core/src/internal/core/project-structure.ts b/packages/hardhat-core/src/internal/core/project-structure.ts index 450173357d..1ccf6ecfec 100644 --- a/packages/hardhat-core/src/internal/core/project-structure.ts +++ b/packages/hardhat-core/src/internal/core/project-structure.ts @@ -10,10 +10,12 @@ import { ERRORS } from "./errors-list"; const JS_CONFIG_FILENAME = "hardhat.config.js"; const CJS_CONFIG_FILENAME = "hardhat.config.cjs"; const TS_CONFIG_FILENAME = "hardhat.config.ts"; +const CTS_CONFIG_FILENAME = "hardhat.config.cts"; export function isCwdInsideProject() { return ( findUp.sync(TS_CONFIG_FILENAME) !== null || + findUp.sync(CTS_CONFIG_FILENAME) !== null || findUp.sync(CJS_CONFIG_FILENAME) !== null || findUp.sync(JS_CONFIG_FILENAME) !== null ); @@ -25,6 +27,11 @@ export function getUserConfigPath() { return tsConfigPath; } + const ctsConfigPath = findUp.sync(CTS_CONFIG_FILENAME); + if (ctsConfigPath !== null) { + return ctsConfigPath; + } + const cjsConfigPath = findUp.sync(CJS_CONFIG_FILENAME); if (cjsConfigPath !== null) { return cjsConfigPath; diff --git a/packages/hardhat-core/src/internal/core/providers/backwards-compatibility.ts b/packages/hardhat-core/src/internal/core/providers/backwards-compatibility.ts index c65cbe66d6..9dc7c66901 100644 --- a/packages/hardhat-core/src/internal/core/providers/backwards-compatibility.ts +++ b/packages/hardhat-core/src/internal/core/providers/backwards-compatibility.ts @@ -58,7 +58,7 @@ export class BackwardsCompatibilityProviderAdapter }); } catch (error: any) { if (error.code === undefined) { - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } diff --git a/packages/hardhat-core/src/internal/core/providers/construction.ts b/packages/hardhat-core/src/internal/core/providers/construction.ts index 9820cd65e1..10f3f7dade 100644 --- a/packages/hardhat-core/src/internal/core/providers/construction.ts +++ b/packages/hardhat-core/src/internal/core/providers/construction.ts @@ -3,12 +3,13 @@ import type { BoundExperimentalHardhatNetworkMessageTraceHook, EIP1193Provider, EthereumProvider, + HardhatConfig, HardhatNetworkConfig, HDAccountsUserConfig, HttpNetworkAccountsUserConfig, HttpNetworkConfig, NetworkConfig, - ProjectPathsConfig, + ProviderExtender, } from "../../../types"; import type { @@ -46,14 +47,16 @@ function importProvider( return mod[name]; } -export function createProvider( +export async function createProvider( + config: HardhatConfig, networkName: string, - networkConfig: NetworkConfig, - paths?: ProjectPathsConfig, artifacts?: Artifacts, - experimentalHardhatNetworkMessageTraceHooks: BoundExperimentalHardhatNetworkMessageTraceHook[] = [] -): EthereumProvider { + experimentalHardhatNetworkMessageTraceHooks: BoundExperimentalHardhatNetworkMessageTraceHook[] = [], + extenders: ProviderExtender[] = [] +): Promise { let eip1193Provider: EIP1193Provider; + const networkConfig = config.networks[networkName]; + const paths = config.paths; if (networkName === HARDHAT_NETWORK_NAME) { const hardhatNetConfig = networkConfig as HardhatNetworkConfig; @@ -113,6 +116,8 @@ export function createProvider( forkConfig, forkCachePath: paths !== undefined ? getForkCacheDirPath(paths) : undefined, + enableTransientStorage: + hardhatNetConfig.enableTransientStorage ?? false, }, new ModulesLogger(hardhatNetConfig.loggingEnabled), artifacts @@ -132,7 +137,17 @@ export function createProvider( ); } - const wrappedProvider = applyProviderWrappers(eip1193Provider, networkConfig); + let wrappedProvider = eip1193Provider; + + for (const extender of extenders) { + wrappedProvider = await extender(wrappedProvider, config, networkName); + } + + wrappedProvider = applyProviderWrappers( + wrappedProvider, + networkConfig, + extenders + ); const BackwardsCompatibilityProviderAdapter = importProvider< typeof import("./backwards-compatibility"), @@ -144,7 +159,8 @@ export function createProvider( export function applyProviderWrappers( provider: EIP1193Provider, - netConfig: Partial + netConfig: Partial, + extenders: ProviderExtender[] ): EIP1193Provider { // These dependencies are lazy-loaded because they are really big. const LocalAccountsProvider = importProvider< @@ -226,8 +242,10 @@ export function applyProviderWrappers( // fields, as the missing ones will be resolved there. // // Hardhat Network handles this in a more performant way, so we don't use - // the AutomaticGasPriceProvider for it. - if (isResolvedHttpNetworkConfig(netConfig)) { + // the AutomaticGasPriceProvider for it unless there are provider extenders. + // The reason for this is that some extenders (like hardhat-ledger's) might + // do the signing themselves, and that needs the gas price to be set. + if (isResolvedHttpNetworkConfig(netConfig) || extenders.length > 0) { provider = new AutomaticGasPriceProvider(provider); } } else { diff --git a/packages/hardhat-core/src/internal/core/providers/gas-providers.ts b/packages/hardhat-core/src/internal/core/providers/gas-providers.ts index 1339cafa60..cbe5e37bde 100644 --- a/packages/hardhat-core/src/internal/core/providers/gas-providers.ts +++ b/packages/hardhat-core/src/internal/core/providers/gas-providers.ts @@ -91,7 +91,7 @@ abstract class MultipliedGasEstimationProvider extends ProviderWrapper { } } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } } @@ -254,6 +254,25 @@ export class AutomaticGasPriceProvider extends ProviderWrapper { ], })) as { baseFeePerGas: string[]; reward: string[][] }; + let maxPriorityFeePerGas = rpcQuantityToBigInt(response.reward[0][0]); + + if (maxPriorityFeePerGas === 0n) { + try { + const suggestedMaxPriorityFeePerGas = + (await this._wrappedProvider.request({ + method: "eth_maxPriorityFeePerGas", + params: [], + })) as string; + + maxPriorityFeePerGas = rpcQuantityToBigInt( + suggestedMaxPriorityFeePerGas + ); + } catch { + // if eth_maxPriorityFeePerGas does not exist, use 1 wei + maxPriorityFeePerGas = 1n; + } + } + return { // Each block increases the base fee by 1/8 at most, when full. // We have the next block's base fee, so we compute a cap for the @@ -268,7 +287,7 @@ export class AutomaticGasPriceProvider extends ProviderWrapper { (AutomaticGasPriceProvider.EIP1559_BASE_FEE_MAX_FULL_BLOCKS_PREFERENCE - 1n), - maxPriorityFeePerGas: rpcQuantityToBigInt(response.reward[0][0]), + maxPriorityFeePerGas, }; } catch { this._nodeHasFeeHistory = false; diff --git a/packages/hardhat-core/src/internal/core/providers/http.ts b/packages/hardhat-core/src/internal/core/providers/http.ts index 6d2f11493e..32ae1ab143 100644 --- a/packages/hardhat-core/src/internal/core/providers/http.ts +++ b/packages/hardhat-core/src/internal/core/providers/http.ts @@ -68,7 +68,7 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider { if (e instanceof TypeError && e.message === "Invalid URL") { e.message += ` ${url.origin}`; } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw e; } } @@ -90,7 +90,7 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider { jsonRpcResponse.error.code ); error.data = jsonRpcResponse.error.data; - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } @@ -133,7 +133,7 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider { stackSavingError ); error.data = response.error.data; - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } } @@ -203,12 +203,12 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider { // https://undici.nodejs.org/#/?id=garbage-collection // It's not clear how to "cancel", so we'll just consume: await response.body.text(); - const seconds = this._getRetryAfterSeconds(response); + const seconds = this._getRetryAfterSeconds(response, retryNumber); if (seconds !== undefined && this._shouldRetry(retryNumber, seconds)) { return await this._retry(request, seconds, retryNumber); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new ProviderError( `Too Many Requests error received from ${url.hostname}`, -32005 // Limit exceeded according to EIP1474 @@ -229,7 +229,7 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider { throw new HardhatError(ERRORS.NETWORK.NETWORK_TIMEOUT, {}, error); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } } @@ -272,12 +272,15 @@ export class HttpProvider extends EventEmitter implements EIP1193Provider { } private _getRetryAfterSeconds( - response: Undici.Dispatcher.ResponseData + response: Undici.Dispatcher.ResponseData, + retryNumber: number ): number | undefined { const header = response.headers["retry-after"]; if (header === undefined || header === null || Array.isArray(header)) { - return undefined; + // if the response doesn't have a retry-after header, we do + // an exponential backoff + return Math.min(2 ** retryNumber, MAX_RETRY_AWAIT_SECONDS); } const parsed = parseInt(header, 10); diff --git a/packages/hardhat-core/src/internal/core/providers/lazy-initialization.ts b/packages/hardhat-core/src/internal/core/providers/lazy-initialization.ts new file mode 100644 index 0000000000..cd0943c478 --- /dev/null +++ b/packages/hardhat-core/src/internal/core/providers/lazy-initialization.ts @@ -0,0 +1,178 @@ +import { EventEmitter } from "events"; +import { + EthereumProvider, + JsonRpcRequest, + JsonRpcResponse, + RequestArguments, +} from "../../../types"; +import { HardhatError } from "../errors"; +import { ERRORS } from "../errors-list"; + +export type ProviderFactory = () => Promise; +export type Listener = (...args: any[]) => void; + +/** + * A class that delays the (async) creation of its internal provider until the first call + * to a JSON RPC method via request/send/sendAsync or the init method is called. + */ +export class LazyInitializationProviderAdapter implements EthereumProvider { + protected provider: EthereumProvider | undefined; + private _emitter: EventEmitter = new EventEmitter(); + private _initializingPromise: Promise | undefined; + + constructor(private _providerFactory: ProviderFactory) {} + + /** + * Gets the internal wrapped provider. + * Using it directly is discouraged and should be done with care, + * use the public methods from the class like `request` and all event emitter methods instead + */ + public get _wrapped(): EventEmitter { + if (this.provider === undefined) { + throw new HardhatError(ERRORS.GENERAL.UNINITIALIZED_PROVIDER); + } + return this.provider; + } + + public async init(): Promise { + if (this.provider === undefined) { + if (this._initializingPromise === undefined) { + this._initializingPromise = this._providerFactory(); + } + this.provider = await this._initializingPromise; + } + return this.provider; + } + + // Provider methods + + public async request(args: RequestArguments): Promise { + const provider = await this._getOrInitProvider(); + return provider.request(args); + } + + public async send(method: string, params?: any[]): Promise { + const provider = await this._getOrInitProvider(); + return provider.send(method, params); + } + + public sendAsync( + payload: JsonRpcRequest, + callback: (error: any, response: JsonRpcResponse) => void + ): void { + this._getOrInitProvider().then( + (provider) => { + provider.sendAsync(payload, callback); + }, + (e) => { + callback(e, null as any); + } + ); + } + + // EventEmitter methods + + public addListener(event: string | symbol, listener: EventListener): this { + this._getEmitter().addListener(event, listener); + return this; + } + + public on(event: string | symbol, listener: EventListener): this { + this._getEmitter().on(event, listener); + return this; + } + + public once(event: string | symbol, listener: Listener): this { + this._getEmitter().once(event, listener); + return this; + } + + public prependListener(event: string | symbol, listener: Listener): this { + this._getEmitter().prependListener(event, listener); + return this; + } + + public prependOnceListener(event: string | symbol, listener: Listener): this { + this._getEmitter().prependOnceListener(event, listener); + return this; + } + + public removeListener(event: string | symbol, listener: Listener): this { + this._getEmitter().removeListener(event, listener); + return this; + } + + public off(event: string | symbol, listener: Listener): this { + this._getEmitter().off(event, listener); + return this; + } + + public removeAllListeners(event?: string | symbol | undefined): this { + this._getEmitter().removeAllListeners(event); + return this; + } + + public setMaxListeners(n: number): this { + this._getEmitter().setMaxListeners(n); + return this; + } + + public getMaxListeners(): number { + return this._getEmitter().getMaxListeners(); + } + + // disable ban-types to satisfy the EventEmitter interface + // eslint-disable-next-line @typescript-eslint/ban-types + public listeners(event: string | symbol): Function[] { + return this._getEmitter().listeners(event); + } + + // disable ban-types to satisfy the EventEmitter interface + // eslint-disable-next-line @typescript-eslint/ban-types + public rawListeners(event: string | symbol): Function[] { + return this._getEmitter().rawListeners(event); + } + + public emit(event: string | symbol, ...args: any[]): boolean { + return this._getEmitter().emit(event, ...args); + } + + public eventNames(): Array { + return this._getEmitter().eventNames(); + } + + public listenerCount(type: string | symbol): number { + return this._getEmitter().listenerCount(type); + } + + private _getEmitter(): EventEmitter { + return this.provider === undefined ? this._emitter : this.provider; + } + + private async _getOrInitProvider(): Promise { + // This is here to avoid multiple calls to send async stacking and re-creating the provider + // over and over again. It shouldn't run for request or send + if (this._initializingPromise !== undefined) { + await this._initializingPromise; + } + + if (this.provider === undefined) { + this.provider = await this.init(); + + // Copy any event emitter events before initialization over to the provider + const recordedEvents = this._emitter.eventNames(); + + for (const event of recordedEvents) { + const listeners = this._emitter.rawListeners(event) as Listener[]; + for (const listener of listeners) { + this.provider.on(event, listener); + this._emitter.removeListener(event, listener); + } + } + + this.provider.setMaxListeners(this._emitter.getMaxListeners()); + } + + return this.provider; + } +} diff --git a/packages/hardhat-core/src/internal/core/providers/wrapper.ts b/packages/hardhat-core/src/internal/core/providers/wrapper.ts index 682266f1d0..cf13777d4e 100644 --- a/packages/hardhat-core/src/internal/core/providers/wrapper.ts +++ b/packages/hardhat-core/src/internal/core/providers/wrapper.ts @@ -3,6 +3,12 @@ import { EventEmitterWrapper } from "../../util/event-emitter"; import { InvalidInputError } from "./errors"; +/** + * A wrapper class that makes it easy to implement the EIP1193 (Javascript Ethereum Provider) standard. + * It comes baked in with all EventEmitter methods needed, + * which will be added to the provider supplied in the constructor. + * It also provides the interface for the standard .request() method as an abstract method. + */ export abstract class ProviderWrapper extends EventEmitterWrapper implements EIP1193Provider @@ -13,6 +19,10 @@ export abstract class ProviderWrapper public abstract request(args: RequestArguments): Promise; + /** + * Extract the params from RequestArguments and optionally type them. + * It defaults to an empty array if no params are found. + */ protected _getParams( args: RequestArguments ): ParamsT | [] { @@ -23,7 +33,7 @@ export abstract class ProviderWrapper } if (!Array.isArray(params)) { - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new InvalidInputError( "Hardhat Network doesn't support JSON-RPC params sent as an object" ); diff --git a/packages/hardhat-core/src/internal/core/runtime-environment.ts b/packages/hardhat-core/src/internal/core/runtime-environment.ts index 30696f7690..69b863a357 100644 --- a/packages/hardhat-core/src/internal/core/runtime-environment.ts +++ b/packages/hardhat-core/src/internal/core/runtime-environment.ts @@ -10,22 +10,24 @@ import { HardhatUserConfig, Network, ParamDefinition, + ProviderExtender, RunSuperFunction, RunTaskFunction, SubtaskArguments, TaskArguments, TaskDefinition, TasksMap, + ScopesMap, } from "../../types"; import { Artifacts } from "../artifacts"; import { MessageTrace } from "../hardhat-network/stack-traces/message-trace"; -import { lazyObject } from "../util/lazy"; import { getHardhatVersion } from "../util/packageInfo"; import { analyzeModuleNotFoundError } from "./config/config-loading"; import { HardhatError } from "./errors"; import { ERRORS } from "./errors-list"; import { createProvider } from "./providers/construction"; +import { LazyInitializationProviderAdapter } from "./providers/lazy-initialization"; import { OverriddenTaskDefinition } from "./tasks/task-definitions"; import { completeTaskProfile, @@ -33,6 +35,7 @@ import { createTaskProfile, TaskProfile, } from "./task-profiling"; +import { parseTaskIdentifier } from "./tasks/util"; const log = debug("hardhat:core:hre"); @@ -48,7 +51,7 @@ export class Environment implements HardhatRuntimeEnvironment { public artifacts: IArtifacts; - private readonly _extenders: EnvironmentExtender[]; + private readonly _environmentExtenders: EnvironmentExtender[]; public entryTaskProfile?: TaskProfile; @@ -64,15 +67,19 @@ export class Environment implements HardhatRuntimeEnvironment { * @param config The hardhat's config object. * @param hardhatArguments The parsed hardhat's arguments. * @param tasks A map of tasks. - * @param extenders A list of extenders. + * @param scopes A map of scopes. + * @param environmentExtenders A list of environment extenders. + * @param providerExtenders A list of provider extenders. */ constructor( public readonly config: HardhatConfig, public readonly hardhatArguments: HardhatArguments, public readonly tasks: TasksMap, - extenders: EnvironmentExtender[] = [], + public readonly scopes: ScopesMap, + environmentExtenders: EnvironmentExtender[] = [], experimentalHardhatNetworkMessageTraceHooks: ExperimentalHardhatNetworkMessageTraceHook[] = [], - public readonly userConfig: HardhatUserConfig = {} + public readonly userConfig: HardhatUserConfig = {}, + providerExtenders: ProviderExtender[] = [] ) { log("Creating HardhatRuntimeEnvironment"); @@ -91,35 +98,35 @@ export class Environment implements HardhatRuntimeEnvironment { this.artifacts = new Artifacts(config.paths.artifacts); - const provider = lazyObject(() => { + const provider = new LazyInitializationProviderAdapter(async () => { log(`Creating provider for network ${networkName}`); return createProvider( + config, networkName, - networkConfig, - this.config.paths, this.artifacts, experimentalHardhatNetworkMessageTraceHooks.map( (hook) => (trace: MessageTrace, isCallMessageTrace: boolean) => hook(this, trace, isCallMessageTrace) - ) + ), + providerExtenders ); }); this.network = { name: networkName, - config: config.networks[networkName], + config: networkConfig, provider, }; - this._extenders = extenders; + this._environmentExtenders = environmentExtenders; - extenders.forEach((extender) => extender(this)); + environmentExtenders.forEach((extender) => extender(this)); } /** * Executes the task with the given name. * - * @param name The task's name. + * @param taskIdentifier The task or scoped task to be executed. * @param taskArguments A map of task's arguments. * @param subtaskArguments A map of subtasks to their arguments. * @@ -127,18 +134,39 @@ export class Environment implements HardhatRuntimeEnvironment { * @returns a promise with the task's execution result. */ public readonly run: RunTaskFunction = async ( - name, + taskIdentifier, taskArguments = {}, subtaskArguments = {}, callerTaskProfile?: TaskProfile ) => { - const taskDefinition = this.tasks[name]; + const { scope, task } = parseTaskIdentifier(taskIdentifier); - log("Running task %s", name); + let taskDefinition; + if (scope === undefined) { + taskDefinition = this.tasks[task]; + log("Running task %s", task); + } else { + const scopeDefinition = this.scopes[scope]; + if (scopeDefinition === undefined) { + throw new HardhatError(ERRORS.ARGUMENTS.UNRECOGNIZED_SCOPE, { + scope, + }); + } + + taskDefinition = scopeDefinition.tasks?.[task]; + log("Running scoped task %s %s", scope, task); + } if (taskDefinition === undefined) { + if (scope !== undefined) { + throw new HardhatError(ERRORS.ARGUMENTS.UNRECOGNIZED_SCOPED_TASK, { + scope, + task, + }); + } + throw new HardhatError(ERRORS.ARGUMENTS.UNRECOGNIZED_TASK, { - task: name, + task, }); } @@ -150,7 +178,7 @@ export class Environment implements HardhatRuntimeEnvironment { let taskProfile: TaskProfile | undefined; if (this.hardhatArguments.flamegraph === true) { - taskProfile = createTaskProfile(name); + taskProfile = createTaskProfile(task); if (callerTaskProfile !== undefined) { callerTaskProfile.children.push(taskProfile); @@ -169,7 +197,7 @@ export class Environment implements HardhatRuntimeEnvironment { } catch (e) { analyzeModuleNotFoundError(e, this.config.paths.configFile); - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw e; } finally { if (taskProfile !== undefined) { diff --git a/packages/hardhat-core/src/internal/core/tasks/builtin-tasks.ts b/packages/hardhat-core/src/internal/core/tasks/builtin-tasks.ts index 1b44ea0059..b292eaa71d 100644 --- a/packages/hardhat-core/src/internal/core/tasks/builtin-tasks.ts +++ b/packages/hardhat-core/src/internal/core/tasks/builtin-tasks.ts @@ -6,4 +6,5 @@ import "../../../builtin-tasks/flatten"; import "../../../builtin-tasks/help"; import "../../../builtin-tasks/node"; import "../../../builtin-tasks/run"; +import "../../../builtin-tasks/vars"; import "../../../builtin-tasks/test"; diff --git a/packages/hardhat-core/src/internal/core/tasks/dsl.ts b/packages/hardhat-core/src/internal/core/tasks/dsl.ts index 892479e3aa..12a82e165f 100644 --- a/packages/hardhat-core/src/internal/core/tasks/dsl.ts +++ b/packages/hardhat-core/src/internal/core/tasks/dsl.ts @@ -1,14 +1,21 @@ import { ActionType, + ScopeDefinition, + ScopesMap, TaskArguments, TaskDefinition, + TaskIdentifier, TasksMap, } from "../../../types"; +import { HardhatError, assertHardhatInvariant } from "../errors"; +import { ERRORS } from "../errors-list"; import { OverriddenTaskDefinition, + SimpleScopeDefinition, SimpleTaskDefinition, } from "./task-definitions"; +import { parseTaskIdentifier } from "./util"; /** * This class defines the DSL used in Hardhat config files @@ -18,6 +25,7 @@ export class TasksDSL { public readonly internalTask = this.subtask; private readonly _tasks: TasksMap = {}; + private readonly _scopes: ScopesMap = {}; /** * Creates a task, overriding any previous task with the same name. @@ -56,6 +64,8 @@ export class TasksDSL { descriptionOrAction?: string | ActionType, action?: ActionType ): TaskDefinition { + // if this function is updated, update the corresponding callback + // passed to `new SimpleScopeDefinition` return this._addTask(name, descriptionOrAction, action, false); } @@ -96,9 +106,56 @@ export class TasksDSL { descriptionOrAction?: string | ActionType, action?: ActionType ): TaskDefinition { + // if this function is updated, update the corresponding callback + // passed to `new SimpleScopeDefinition` return this._addTask(name, descriptionOrAction, action, true); } + public scope(name: string, description?: string): ScopeDefinition { + if (this._tasks[name] !== undefined) { + throw new HardhatError(ERRORS.TASK_DEFINITIONS.TASK_SCOPE_CLASH, { + scopeName: name, + }); + } + + const scopeDefinition = this._scopes[name]; + + if (scopeDefinition !== undefined) { + // if the scope already exists, the only thing we might + // do is to update its description + if (description !== undefined) { + scopeDefinition.setDescription(description); + } + + return scopeDefinition; + } + + const scope = new SimpleScopeDefinition( + name, + description, + (taskName, descriptionOrAction, action) => + // if this function is updated, update the dsl.task function too + this._addTask( + { scope: name, task: taskName }, + descriptionOrAction, + action, + false + ), + (subtaskName, descriptionOrAction, action) => + // if this function is updated, update the dsl.subtask function too + this._addTask( + { scope: name, task: subtaskName }, + descriptionOrAction, + action, + true + ) + ); + + this._scopes[name] = scope; + + return scope; + } + /** * Retrieves the task definitions. * @@ -108,13 +165,41 @@ export class TasksDSL { return this._tasks; } + /** + * Retrieves the scoped task definitions. + * + * @returns The scoped tasks container. + */ + public getScopesDefinitions(): ScopesMap { + return this._scopes; + } + + public getTaskDefinition( + scope: string | undefined, + name: string + ): TaskDefinition | undefined { + if (scope === undefined) { + return this._tasks[name]; + } else { + return this._scopes[scope]?.tasks?.[name]; + } + } + private _addTask( - name: string, + taskIdentifier: TaskIdentifier, descriptionOrAction?: string | ActionType, action?: ActionType, isSubtask?: boolean ) { - const parentTaskDefinition = this._tasks[name]; + const { scope, task } = parseTaskIdentifier(taskIdentifier); + + if (scope === undefined && this._scopes[task] !== undefined) { + throw new HardhatError(ERRORS.TASK_DEFINITIONS.SCOPE_TASK_CLASH, { + taskName: task, + }); + } + + const parentTaskDefinition = this.getTaskDefinition(scope, task); let taskDefinition: TaskDefinition; @@ -124,7 +209,7 @@ export class TasksDSL { isSubtask ); } else { - taskDefinition = new SimpleTaskDefinition(name, isSubtask); + taskDefinition = new SimpleTaskDefinition(taskIdentifier, isSubtask); } if (descriptionOrAction instanceof Function) { @@ -140,7 +225,17 @@ export class TasksDSL { taskDefinition.setAction(action); } - this._tasks[name] = taskDefinition; + if (scope === undefined) { + this._tasks[task] = taskDefinition; + } else { + const scopeDefinition = this._scopes[scope]; + assertHardhatInvariant( + scopeDefinition !== undefined, + "It shouldn't be possible to create a task in a scope that doesn't exist" + ); + scopeDefinition.tasks[task] = taskDefinition; + } + return taskDefinition; } } diff --git a/packages/hardhat-core/src/internal/core/tasks/task-definitions.ts b/packages/hardhat-core/src/internal/core/tasks/task-definitions.ts index 6bcf277b40..7a9c0d773a 100644 --- a/packages/hardhat-core/src/internal/core/tasks/task-definitions.ts +++ b/packages/hardhat-core/src/internal/core/tasks/task-definitions.ts @@ -4,13 +4,17 @@ import { CLIArgumentType, ParamDefinition, ParamDefinitionsMap, + ScopeDefinition, TaskArguments, TaskDefinition, + TaskIdentifier, + TasksMap, } from "../../../types"; import { HardhatError } from "../errors"; import { ErrorDescriptor, ERRORS } from "../errors-list"; import * as types from "../params/argumentTypes"; import { HARDHAT_PARAM_DEFINITIONS } from "../params/hardhat-params"; +import { parseTaskIdentifier } from "./util"; function isCLIArgumentType( type: ArgumentType @@ -26,6 +30,12 @@ function isCLIArgumentType( * */ export class SimpleTaskDefinition implements TaskDefinition { + public get name() { + return this._task; + } + public get scope() { + return this._scope; + } public get description() { return this._description; } @@ -36,6 +46,8 @@ export class SimpleTaskDefinition implements TaskDefinition { private _positionalParamNames: Set; private _hasVariadicParam: boolean; private _hasOptionalPositionalParam: boolean; + private _scope?: string; + private _task: string; private _description?: string; /** @@ -43,19 +55,22 @@ export class SimpleTaskDefinition implements TaskDefinition { * * This definition will have no params, and will throw a HH205 if executed. * - * @param name The task's name. + * @param taskIdentifier The task's identifier. * @param isSubtask `true` if the task is a subtask, `false` otherwise. */ constructor( - public readonly name: string, + taskIdentifier: TaskIdentifier, public readonly isSubtask: boolean = false ) { this._positionalParamNames = new Set(); this._hasVariadicParam = false; this._hasOptionalPositionalParam = false; + const { scope, task } = parseTaskIdentifier(taskIdentifier); + this._scope = scope; + this._task = task; this.action = () => { throw new HardhatError(ERRORS.TASK_DEFINITIONS.ACTION_NOT_SET, { - taskName: name, + taskName: this._task, }); }; } @@ -562,6 +577,10 @@ export class OverriddenTaskDefinition implements TaskDefinition { this.parentTaskDefinition = parentTaskDefinition; } + /** + * Sets the task's description. + * @param description The description. + */ public setDescription(description: string) { this._description = description; return this; @@ -579,6 +598,13 @@ export class OverriddenTaskDefinition implements TaskDefinition { return this; } + /** + * Retrieves the parent task's scope. + */ + public get scope() { + return this.parentTaskDefinition.scope; + } + /** * Retrieves the parent task's name. */ @@ -734,3 +760,71 @@ export class OverriddenTaskDefinition implements TaskDefinition { }); } } + +type AddTaskFunction = ( + name: string, + descriptionOrAction?: string | ActionType, + action?: ActionType +) => TaskDefinition; + +export class SimpleScopeDefinition implements ScopeDefinition { + public tasks: TasksMap = {}; + + constructor( + public readonly name: string, + private _description: string | undefined, + private _addTask: AddTaskFunction, + private _addSubtask: AddTaskFunction + ) {} + + public get description() { + return this._description; + } + + public setDescription(description: string): this { + this._description = description; + return this; + } + + public task( + name: string, + description?: string, + action?: ActionType + ): TaskDefinition; + public task( + name: string, + action: ActionType + ): TaskDefinition; + public task( + name: string, + descriptionOrAction?: string | ActionType, + action?: ActionType + ) { + const task = this._addTask(name, descriptionOrAction, action); + + this.tasks[name] = task; + + return task; + } + + public subtask( + name: string, + description?: string, + action?: ActionType + ): TaskDefinition; + public subtask( + name: string, + action: ActionType + ): TaskDefinition; + public subtask( + name: string, + descriptionOrAction?: string | ActionType, + action?: ActionType + ) { + const subtask = this._addSubtask(name, descriptionOrAction, action); + + this.tasks[name] = subtask; + + return subtask; + } +} diff --git a/packages/hardhat-core/src/internal/core/tasks/util.ts b/packages/hardhat-core/src/internal/core/tasks/util.ts new file mode 100644 index 0000000000..99cac5c91e --- /dev/null +++ b/packages/hardhat-core/src/internal/core/tasks/util.ts @@ -0,0 +1,18 @@ +import { TaskIdentifier } from "../../../types"; + +export function parseTaskIdentifier(taskIdentifier: TaskIdentifier): { + scope: string | undefined; + task: string; +} { + if (typeof taskIdentifier === "string") { + return { + scope: undefined, + task: taskIdentifier, + }; + } else { + return { + scope: taskIdentifier.scope, + task: taskIdentifier.task, + }; + } +} diff --git a/packages/hardhat-core/src/internal/core/typescript-support.ts b/packages/hardhat-core/src/internal/core/typescript-support.ts index b7de6d4702..cfcd86eadd 100644 --- a/packages/hardhat-core/src/internal/core/typescript-support.ts +++ b/packages/hardhat-core/src/internal/core/typescript-support.ts @@ -13,14 +13,14 @@ let cachedIsTypescriptSupported: boolean | undefined; */ export function willRunWithTypescript(configPath?: string): boolean { const config = resolveConfigPath(configPath); - return isTypescriptFile(config); + return isNonEsmTypescriptFile(config); } /** * Returns true if an Hardhat is already running with typescript. */ export function isRunningWithTypescript(config: HardhatConfig): boolean { - return isTypescriptFile(config.paths.configFile); + return isNonEsmTypescriptFile(config.paths.configFile); } export function isTypescriptSupported() { @@ -80,6 +80,14 @@ export function loadTsNode( require(tsNodeRequirement); } -function isTypescriptFile(path: string): boolean { - return path.endsWith(".ts"); +function isNonEsmTypescriptFile(path: string): boolean { + return /\.(ts|cts)$/i.test(path); +} + +export function isTypescriptFile(path: string): boolean { + return /\.(ts|cts|mts)$/i.test(path); +} + +export function isJavascriptFile(path: string): boolean { + return /\.(js|cjs|mjs)$/i.test(path); } diff --git a/packages/hardhat-core/src/internal/core/vars/vars-manager-setup.ts b/packages/hardhat-core/src/internal/core/vars/vars-manager-setup.ts new file mode 100644 index 0000000000..559eaa7d6a --- /dev/null +++ b/packages/hardhat-core/src/internal/core/vars/vars-manager-setup.ts @@ -0,0 +1,124 @@ +import debug from "debug"; +import { VarsManager } from "./vars-manager"; + +const log = debug("hardhat:core:vars:varsManagerSetup"); + +/** + * This class is ONLY used when collecting the required and optional vars that have to be filled by the user + */ +export class VarsManagerSetup extends VarsManager { + private readonly _getVarsAlreadySet: Set; + private readonly _hasVarsAlreadySet: Set; + private readonly _getVarsWithDefaultValueAlreadySet: Set; + + private readonly _getVarsToSet: Set; + private readonly _hasVarsToSet: Set; + private readonly _getVarsWithDefaultValueToSet: Set; + + constructor(varsFilePath: string) { + log("Creating a new instance of VarsManagerSetup"); + + super(varsFilePath); + + this._getVarsAlreadySet = new Set(); + this._hasVarsAlreadySet = new Set(); + this._getVarsWithDefaultValueAlreadySet = new Set(); + + this._getVarsToSet = new Set(); + this._hasVarsToSet = new Set(); + this._getVarsWithDefaultValueToSet = new Set(); + } + + // Checks if the key exists, and updates sets accordingly. + // Ignore the parameter 'includeEnvs' defined in the parent class because during setup env vars are ignored. + public has(key: string): boolean { + log(`function 'has' called with key '${key}'`); + + const hasKey = super.has(key); + + if (hasKey) { + this._hasVarsAlreadySet.add(key); + } else { + this._hasVarsToSet.add(key); + } + + return hasKey; + } + + // Gets the value for the provided key, and updates sets accordingly. + // Ignore the parameter 'includeEnvs' defined in the parent class because during setup env vars are ignored. + public get(key: string, defaultValue?: string): string { + log(`function 'get' called with key '${key}'`); + + const varAlreadySet = super.has(key); + + if (varAlreadySet) { + if (defaultValue !== undefined) { + this._getVarsWithDefaultValueAlreadySet.add(key); + } else { + this._getVarsAlreadySet.add(key); + } + } else { + if (defaultValue !== undefined) { + this._getVarsWithDefaultValueToSet.add(key); + } else { + this._getVarsToSet.add(key); + } + } + + // Do not return undefined to avoid throwing an error + return super.get(key, defaultValue) ?? ""; + } + + public getRequiredVarsAlreadySet(): string[] { + return this._getRequired(this._getVarsAlreadySet, this._hasVarsAlreadySet); + } + + public getOptionalVarsAlreadySet(): string[] { + return this._getOptionals( + this._getVarsAlreadySet, + this._hasVarsAlreadySet, + this._getVarsWithDefaultValueAlreadySet + ); + } + + public getRequiredVarsToSet(): string[] { + return this._getRequired(this._getVarsToSet, this._hasVarsToSet); + } + + public getOptionalVarsToSet(): string[] { + return this._getOptionals( + this._getVarsToSet, + this._hasVarsToSet, + this._getVarsWithDefaultValueToSet + ); + } + + // How to calculate required and optional variables: + // + // G = get function + // H = has function + // GD = get function with default value + // + // optional variables = H + (GD - G) + // required variables = G - H + private _getRequired(getVars: Set, hasVars: Set): string[] { + return Array.from(getVars).filter((k) => !hasVars.has(k)); + } + + private _getOptionals( + getVars: Set, + hasVars: Set, + getVarsWithDefault: Set + ): string[] { + const result = new Set(hasVars); + + for (const k of getVarsWithDefault) { + if (!getVars.has(k)) { + result.add(k); + } + } + + return Array.from(result); + } +} diff --git a/packages/hardhat-core/src/internal/core/vars/vars-manager.ts b/packages/hardhat-core/src/internal/core/vars/vars-manager.ts new file mode 100644 index 0000000000..513b24f674 --- /dev/null +++ b/packages/hardhat-core/src/internal/core/vars/vars-manager.ts @@ -0,0 +1,152 @@ +import fs from "fs-extra"; +import debug from "debug"; +import { HardhatError } from "../errors"; +import { ERRORS } from "../errors-list"; + +interface Var { + value: string; +} + +interface VarsFile { + _format: string; // Version of the json vars file + vars: Record; +} + +const log = debug("hardhat:core:vars:varsManager"); + +export class VarsManager { + private readonly _VERSION = "hh-vars-1"; + private readonly _ENV_VAR_PREFIX = "HARDHAT_VAR_"; + private readonly _storageCache: VarsFile; + private readonly _envCache: Record; + + constructor(private readonly _varsFilePath: string) { + log("Creating a new instance of VarsManager"); + + this._initializeVarsFile(); + this._storageCache = fs.readJSONSync(this._varsFilePath); + + this._envCache = {}; + this._loadVarsFromEnv(); + } + + public getStoragePath(): string { + return this._varsFilePath; + } + + public set(key: string, value: string) { + this.validateKey(key); + + if (value === "") { + throw new HardhatError(ERRORS.VARS.INVALID_EMPTY_VALUE); + } + + const vars = this._storageCache.vars; + + vars[key] = { value }; + this._writeStoredVars(vars); + } + + public has(key: string, includeEnvs: boolean = false): boolean { + if (includeEnvs && key in this._envCache) { + return true; + } + + return key in this._storageCache.vars; + } + + public get( + key: string, + defaultValue?: string, + includeEnvs: boolean = false + ): string | undefined { + if (includeEnvs && key in this._envCache) { + return this._envCache[key]; + } + + return this._storageCache.vars[key]?.value ?? defaultValue; + } + + public getEnvVars(): string[] { + return Object.keys(this._envCache).map( + (k) => `${this._ENV_VAR_PREFIX}${k}` + ); + } + + public list(): string[] { + return Object.keys(this._storageCache.vars); + } + + public delete(key: string): boolean { + const vars = this._storageCache.vars; + + if (vars[key] === undefined) return false; + + delete vars[key]; + this._writeStoredVars(vars); + + return true; + } + + public validateKey(key: string) { + const KEY_REGEX = /^[a-zA-Z_]+[a-zA-Z0-9_]*$/; + + if (!KEY_REGEX.test(key)) { + throw new HardhatError(ERRORS.VARS.INVALID_CONFIG_VAR_NAME, { + value: key, + }); + } + } + + private _initializeVarsFile() { + if (!fs.pathExistsSync(this._varsFilePath)) { + // Initialize the vars file if it does not exist + log( + `Vars file do not exist. Creating a new one at '${this._varsFilePath}' with version '${this._VERSION}'` + ); + + fs.writeJSONSync(this._varsFilePath, this._getVarsFileStructure(), { + spaces: 2, + }); + } + } + + private _getVarsFileStructure(): VarsFile { + return { + _format: this._VERSION, + vars: {}, + }; + } + + private _loadVarsFromEnv() { + log("Loading ENV variables if any"); + + for (const key in process.env) { + if (key.startsWith(this._ENV_VAR_PREFIX)) { + const envVar = process.env[key]; + + if ( + envVar === undefined || + envVar.replace(/[\s\t]/g, "").length === 0 + ) { + throw new HardhatError(ERRORS.ARGUMENTS.INVALID_ENV_VAR_VALUE, { + varName: key, + value: envVar!, + }); + } + + const envKey = key.replace(this._ENV_VAR_PREFIX, ""); + this.validateKey(envKey); + + // Store only in cache, not in a file, as the vars are sourced from environment variables + this._envCache[envKey] = envVar; + } + } + } + + private _writeStoredVars(vars: Record) { + // ENV variables are not stored in the file + this._storageCache.vars = vars; + fs.writeJSONSync(this._varsFilePath, this._storageCache, { spaces: 2 }); + } +} diff --git a/packages/hardhat-core/src/internal/hardhat-network/jsonrpc/client.ts b/packages/hardhat-core/src/internal/hardhat-network/jsonrpc/client.ts index 21d3c93616..5f489df1d7 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/jsonrpc/client.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/jsonrpc/client.ts @@ -364,7 +364,7 @@ export class JsonRpcClient { return null; } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw err; } } @@ -379,7 +379,7 @@ export class JsonRpcClient { if (this._shouldRetry(isRetryCall, err)) { return this._sendBatch(batch, true); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw err; } } @@ -473,7 +473,7 @@ export class JsonRpcClient { return undefined; } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } } diff --git a/packages/hardhat-core/src/internal/hardhat-network/jsonrpc/handler.ts b/packages/hardhat-core/src/internal/hardhat-network/jsonrpc/handler.ts index 41b6649fc0..9d6ada2fa9 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/jsonrpc/handler.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/jsonrpc/handler.ts @@ -18,7 +18,7 @@ import { JsonRpcResponse, } from "../../util/jsonrpc"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ export class JsonRpcHandler { constructor(private readonly _provider: EIP1193Provider) {} @@ -214,7 +214,7 @@ const _readJsonHttpRequest = async (req: IncomingMessage): Promise => { throw new InvalidJsonInputError(`Parse error: ${error.message}`); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } @@ -230,7 +230,7 @@ const _readWsRequest = (msg: string): JsonRpcRequest | JsonRpcRequest[] => { throw new InvalidJsonInputError(`Parse error: ${error.message}`); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/BlockchainBase.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/BlockchainBase.ts index 8faf34f00e..7b8de9fe8f 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/BlockchainBase.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/BlockchainBase.ts @@ -14,7 +14,7 @@ import * as BigIntUtils from "../../util/bigint"; import { BlockchainData } from "./BlockchainData"; import { RpcReceiptOutput } from "./output"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ export abstract class BlockchainBase { public consensus: Consensus; diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/HardhatBlockchain.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/HardhatBlockchain.ts index a4f4af8be5..b12054f716 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/HardhatBlockchain.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/HardhatBlockchain.ts @@ -8,7 +8,7 @@ import { FilterParams } from "./node-types"; import { RpcLogOutput } from "./output"; import { HardhatBlockchainInterface } from "./types/HardhatBlockchainInterface"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ export class HardhatBlockchain extends BlockchainBase diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/MiningTimer.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/MiningTimer.ts index 77094381bc..1d7ed0f926 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/MiningTimer.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/MiningTimer.ts @@ -5,7 +5,7 @@ enum MiningTimerState { RUNNING, } -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ /** * Timer used to periodically call the given mining function. diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/TransactionQueue.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/TransactionQueue.ts index ef87b07a8b..e8aa37d943 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/TransactionQueue.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/TransactionQueue.ts @@ -64,7 +64,7 @@ function getOrderedTransactionHeap( decreasingOrderComparator(a, b) ); default: - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new InvalidInputError( `Invalid mempool order: ${mempoolOrder as any}` ); @@ -107,7 +107,7 @@ export class TransactionQueue { for (const [address, txList] of pendingTransactions) { if (baseFee === undefined && txList.some((tx) => tx.data.type === 2)) { - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new InternalError( "Trying to initialize and sort a mempool with an EIP-1559 tx but no base fee" ); @@ -135,7 +135,7 @@ export class TransactionQueue { public removeLastSenderTransactions() { if (this._lastTransactionSender === undefined) { - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new InternalError( "TransactionQueue#removeLastSenderTransactions called before TransactionQueue#getNextTransaction" ); diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/TxPool.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/TxPool.ts index 586af40d8b..e51c83c213 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/TxPool.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/TxPool.ts @@ -28,7 +28,7 @@ import { FakeSenderTransaction } from "./transactions/FakeSenderTransaction"; import { reorganizeTransactionsLists } from "./utils/reorganizeTransactionsLists"; import { FakeSenderEIP1559Transaction } from "./transactions/FakeSenderEIP1559Transaction"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ export function serializeTransaction( tx: OrderedTransaction diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts index 6a4b696146..3f43ed569e 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/fork/ForkBlockchain.ts @@ -28,7 +28,7 @@ import { ReadOnlyValidUnknownTypeTransaction } from "../transactions/ReadOnlyVal import { rpcToBlockData } from "./rpcToBlockData"; import { rpcToTxData } from "./rpcToTxData"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ export class ForkBlockchain extends BlockchainBase @@ -348,10 +348,30 @@ export class ForkBlockchain return undefined; } - const transaction = new ReadOnlyValidTransaction( - new Address(rpcTransaction.from), - rpcToTxData(rpcTransaction) - ); + let transaction: TypedTransaction; + + if (rpcTransaction.type === undefined || rpcTransaction.type === 0n) { + transaction = new ReadOnlyValidTransaction( + new Address(rpcTransaction.from), + rpcToTxData(rpcTransaction) + ); + } else if (rpcTransaction.type === 1n) { + transaction = new ReadOnlyValidEIP2930Transaction( + new Address(rpcTransaction.from), + rpcToTxData(rpcTransaction) + ); + } else if (rpcTransaction.type === 2n) { + transaction = new ReadOnlyValidEIP1559Transaction( + new Address(rpcTransaction.from), + rpcToTxData(rpcTransaction) as FeeMarketEIP1559TxData + ); + } else { + transaction = new ReadOnlyValidUnknownTypeTransaction( + new Address(rpcTransaction.from), + Number(rpcTransaction.type), + rpcToTxData(rpcTransaction) + ); + } this._data.addTransaction(transaction); diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/fork/ForkStateManager.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/fork/ForkStateManager.ts index 065c03d1eb..9568cf3f9c 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/fork/ForkStateManager.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/fork/ForkStateManager.ts @@ -29,7 +29,7 @@ const encodeStorageKey = (address: Buffer, position: Buffer): string => { return `${address.toString("hex")}${unpadBuffer(position).toString("hex")}`; }; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ type State = ImmutableMap>; diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/fork/rpcToTxData.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/fork/rpcToTxData.ts index 09782ac180..93d8c2fce9 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/fork/rpcToTxData.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/fork/rpcToTxData.ts @@ -1,11 +1,20 @@ +import type { BigIntLike } from "@nomicfoundation/ethereumjs-util"; + import { AccessListEIP2930TxData, TxData, } from "@nomicfoundation/ethereumjs-tx"; -import { FeeMarketEIP1559TxData } from "@nomicfoundation/ethereumjs-tx/dist/types"; import { RpcTransaction } from "../../../core/jsonrpc/types/output/transaction"; +// the FeeMarketEIP1559TxData interface from ethereum js also has a +// `gasPrice?: never | null` property, which causes a compilation +// error in the latest version of typescript +interface FeeMarketEIP1559TxData extends AccessListEIP2930TxData { + maxPriorityFeePerGas?: BigIntLike; + maxFeePerGas?: BigIntLike; +} + export function rpcToTxData( rpcTransaction: RpcTransaction ): TxData | AccessListEIP2930TxData | FeeMarketEIP1559TxData { diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/base.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/base.ts new file mode 100644 index 0000000000..7e696cf863 --- /dev/null +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/base.ts @@ -0,0 +1,156 @@ +import { Block } from "@nomicfoundation/ethereumjs-block"; +import { + bufferToHex, + toBuffer, + zeroAddress, +} from "@nomicfoundation/ethereumjs-util"; +import { + OptionalRpcNewBlockTag, + RpcNewBlockTag, +} from "../../../core/jsonrpc/types/input/blockTag"; +import { HardhatNode } from "../node"; +import * as BigIntUtils from "../../../util/bigint"; +import { + InvalidArgumentsError, + InvalidInputError, +} from "../../../core/providers/errors"; +import { RpcCallRequest } from "../../../core/jsonrpc/types/input/callRequest"; +import { CallParams } from "../node-types"; +import { RpcAccessList } from "../../../core/jsonrpc/types/access-list"; + +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ + +export class Base { + constructor(protected readonly _node: HardhatNode) {} + + public async resolveNewBlockTag( + newBlockTag: OptionalRpcNewBlockTag, + defaultValue: RpcNewBlockTag = "latest" + ): Promise { + if (newBlockTag === undefined) { + newBlockTag = defaultValue; + } + + if (newBlockTag === "pending") { + return "pending"; + } + + if (newBlockTag === "latest") { + return this._node.getLatestBlockNumber(); + } + + if (newBlockTag === "earliest") { + return 0n; + } + + if (newBlockTag === "safe" || newBlockTag === "finalized") { + this._checkPostMergeBlockTags(newBlockTag); + + return this._node.getLatestBlockNumber(); + } + + if (!BigIntUtils.isBigInt(newBlockTag)) { + if ("blockNumber" in newBlockTag && "blockHash" in newBlockTag) { + throw new InvalidArgumentsError( + "Invalid block tag received. Only one of hash or block number can be used." + ); + } + + if ("blockNumber" in newBlockTag && "requireCanonical" in newBlockTag) { + throw new InvalidArgumentsError( + "Invalid block tag received. requireCanonical only works with hashes." + ); + } + } + + let block: Block | undefined; + if (BigIntUtils.isBigInt(newBlockTag)) { + block = await this._node.getBlockByNumber(newBlockTag); + } else if ("blockNumber" in newBlockTag) { + block = await this._node.getBlockByNumber(newBlockTag.blockNumber); + } else { + block = await this._node.getBlockByHash(newBlockTag.blockHash); + } + + if (block === undefined) { + const latestBlock = this._node.getLatestBlockNumber(); + + throw new InvalidInputError( + `Received invalid block tag ${this._newBlockTagToString( + newBlockTag + )}. Latest block number is ${latestBlock.toString()}` + ); + } + + return block.header.number; + } + + public async rpcCallRequestToNodeCallParams( + rpcCall: RpcCallRequest + ): Promise { + return { + to: rpcCall.to, + from: + rpcCall.from !== undefined + ? rpcCall.from + : await this._getDefaultCallFrom(), + data: rpcCall.data !== undefined ? rpcCall.data : toBuffer([]), + gasLimit: + rpcCall.gas !== undefined ? rpcCall.gas : this._node.getBlockGasLimit(), + value: rpcCall.value !== undefined ? rpcCall.value : 0n, + accessList: + rpcCall.accessList !== undefined + ? this._rpcAccessListToNodeAccessList(rpcCall.accessList) + : undefined, + gasPrice: rpcCall.gasPrice, + maxFeePerGas: rpcCall.maxFeePerGas, + maxPriorityFeePerGas: rpcCall.maxPriorityFeePerGas, + }; + } + + protected _rpcAccessListToNodeAccessList( + rpcAccessList: RpcAccessList + ): Array<[Buffer, Buffer[]]> { + return rpcAccessList.map((tuple) => [ + tuple.address, + tuple.storageKeys ?? [], + ]); + } + + protected _checkPostMergeBlockTags(blockTag: "safe" | "finalized") { + const isPostMerge = this._node.isPostMergeHardfork(); + const hardfork = this._node.hardfork; + + if (!isPostMerge) { + throw new InvalidArgumentsError( + `The '${blockTag}' block tag is not allowed in pre-merge hardforks. You are using the '${hardfork}' hardfork.` + ); + } + } + + protected _newBlockTagToString(tag: RpcNewBlockTag): string { + if (typeof tag === "string") { + return tag; + } + + if (BigIntUtils.isBigInt(tag)) { + return tag.toString(); + } + + if ("blockNumber" in tag) { + return tag.blockNumber.toString(); + } + + return bufferToHex(tag.blockHash); + } + + private async _getDefaultCallFrom(): Promise { + const localAccounts = await this._node.getLocalAccountAddresses(); + + if (localAccounts.length === 0) { + return toBuffer(zeroAddress()); + } + + return toBuffer(localAccounts[0]); + } +} diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/debug.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/debug.ts index f9b4f77357..7e19d10f79 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/debug.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/debug.ts @@ -1,23 +1,39 @@ import { rpcHash } from "../../../core/jsonrpc/types/base-types"; +import { + OptionalRpcNewBlockTag, + optionalRpcNewBlockTag, +} from "../../../core/jsonrpc/types/input/blockTag"; +import { + RpcCallRequest, + rpcCallRequest, +} from "../../../core/jsonrpc/types/input/callRequest"; import { rpcDebugTracingConfig, RpcDebugTracingConfig, } from "../../../core/jsonrpc/types/input/debugTraceTransaction"; import { validateParams } from "../../../core/jsonrpc/types/input/validation"; -import { MethodNotFoundError } from "../../../core/providers/errors"; +import { + InvalidArgumentsError, + MethodNotFoundError, +} from "../../../core/providers/errors"; import { HardhatNode } from "../node"; import { RpcDebugTraceOutput } from "../output"; +import { Base } from "./base"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ -export class DebugModule { - constructor(private readonly _node: HardhatNode) {} +export class DebugModule extends Base { + constructor(_node: HardhatNode) { + super(_node); + } public async processRequest( method: string, params: any[] = [] ): Promise { switch (method) { + case "debug_traceCall": + return this._traceCallAction(...this._traceCallParams(params)); case "debug_traceTransaction": return this._traceTransactionAction( ...this._traceTransactionParams(params) @@ -27,12 +43,48 @@ export class DebugModule { throw new MethodNotFoundError(`Method ${method} not found`); } + // debug_traceCall + + private _traceCallParams( + params: any[] + ): [RpcCallRequest, OptionalRpcNewBlockTag, RpcDebugTracingConfig] { + const validatedParams = validateParams( + params, + rpcCallRequest, + optionalRpcNewBlockTag, + rpcDebugTracingConfig + ); + + this._validateTracerParam(validatedParams[2]); + + return validatedParams; + } + + private async _traceCallAction( + callConfig: RpcCallRequest, + block: OptionalRpcNewBlockTag, + traceConfig: RpcDebugTracingConfig + ): Promise { + const callParams = await this.rpcCallRequestToNodeCallParams(callConfig); + const blockNumber = await this.resolveNewBlockTag(block); + + return this._node.traceCall(callParams, blockNumber, traceConfig); + } + // debug_traceTransaction private _traceTransactionParams( params: any[] ): [Buffer, RpcDebugTracingConfig] { - return validateParams(params, rpcHash, rpcDebugTracingConfig); + const validatedParams = validateParams( + params, + rpcHash, + rpcDebugTracingConfig + ); + + this._validateTracerParam(validatedParams[1]); + + return validatedParams; } private async _traceTransactionAction( @@ -41,4 +93,12 @@ export class DebugModule { ): Promise { return this._node.traceTransaction(hash, config); } + + private _validateTracerParam(config: RpcDebugTracingConfig) { + if (config?.tracer !== undefined) { + throw new InvalidArgumentsError( + "Hardhat currently only supports the default tracer, so no tracer parameter should be passed." + ); + } + } } diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/eth.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/eth.ts index 5dd6875126..dab720f0a5 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/eth.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/eth.ts @@ -5,18 +5,10 @@ import { TransactionFactory, TypedTransaction, } from "@nomicfoundation/ethereumjs-tx"; -import { - Address, - bufferToHex, - toBuffer, - toRpcSig, - zeroAddress, -} from "@nomicfoundation/ethereumjs-util"; +import { Address, toBuffer, toRpcSig } from "@nomicfoundation/ethereumjs-util"; import * as t from "io-ts"; import cloneDeep from "lodash/cloneDeep"; - import { BoundExperimentalHardhatNetworkMessageTraceHook } from "../../../../types"; -import { RpcAccessList } from "../../../core/jsonrpc/types/access-list"; import { bufferToRpcData, numberToRpcQuantity, @@ -37,6 +29,8 @@ import { RpcOldBlockTag, } from "../../../core/jsonrpc/types/input/blockTag"; import { + optionalStateOverrideSet, + OptionalStateOverrideSet, rpcCallRequest, RpcCallRequest, } from "../../../core/jsonrpc/types/input/callRequest"; @@ -67,7 +61,6 @@ import { MessageTrace } from "../../stack-traces/message-trace"; import { LATEST_BLOCK } from "../filter"; import { HardhatNode } from "../node"; import { - CallParams, FilterParams, GatherTracesResult, MineBlockResult, @@ -88,22 +81,25 @@ import { optional } from "../../../util/io-ts"; import * as BigIntUtils from "../../../util/bigint"; import { HardforkName } from "../../../util/hardforks"; import { ModulesLogger } from "./logger"; +import { Base } from "./base"; const EIP1559_MIN_HARDFORK = HardforkName.LONDON; const ACCESS_LIST_MIN_HARDFORK = HardforkName.BERLIN; const EIP155_MIN_HARDFORK = HardforkName.SPURIOUS_DRAGON; const EIP3860_MIN_HARDFORK = HardforkName.SHANGHAI; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ -export class EthModule { +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ +export class EthModule extends Base { constructor( private readonly _common: Common, - private readonly _node: HardhatNode, + _node: HardhatNode, private readonly _throwOnTransactionFailures: boolean, private readonly _throwOnCallFailures: boolean, private readonly _logger: ModulesLogger, private readonly _experimentalHardhatNetworkMessageTraceHooks: BoundExperimentalHardhatNetworkMessageTraceHook[] = [] - ) {} + ) { + super(_node); + } public async processRequest( method: string, @@ -334,26 +330,38 @@ export class EthModule { // eth_call - private _callParams(params: any[]): [RpcCallRequest, OptionalRpcNewBlockTag] { - return validateParams(params, rpcCallRequest, optionalRpcNewBlockTag); + private _callParams( + params: any[] + ): [RpcCallRequest, OptionalRpcNewBlockTag, OptionalStateOverrideSet] { + return validateParams( + params, + rpcCallRequest, + optionalRpcNewBlockTag, + optionalStateOverrideSet + ); } private async _callAction( rpcCall: RpcCallRequest, - blockTag: OptionalRpcNewBlockTag + blockTag: OptionalRpcNewBlockTag, + stateOverrideSet: OptionalStateOverrideSet ): Promise { this._validateTransactionAndCallRequest(rpcCall); - const blockNumberOrPending = await this._resolveNewBlockTag(blockTag); + const blockNumberOrPending = await this.resolveNewBlockTag(blockTag); - const callParams = await this._rpcCallRequestToNodeCallParams(rpcCall); + const callParams = await this.rpcCallRequestToNodeCallParams(rpcCall); const { result: returnData, trace, error, consoleLogMessages, - } = await this._node.runCall(callParams, blockNumberOrPending); + } = await this._node.runCall( + callParams, + blockNumberOrPending, + stateOverrideSet + ); const code = await this._node.getCodeFromTrace(trace, blockNumberOrPending); @@ -420,12 +428,12 @@ export class EthModule { // estimateGas behaves differently when there's no blockTag // it uses "pending" as default instead of "latest" - const blockNumberOrPending = await this._resolveNewBlockTag( + const blockNumberOrPending = await this.resolveNewBlockTag( blockTag, "pending" ); - const callParams = await this._rpcCallRequestToNodeCallParams(callRequest); + const callParams = await this.rpcCallRequestToNodeCallParams(callRequest); const { estimation, error, trace, consoleLogMessages } = await this._node.estimateGas(callParams, blockNumberOrPending); @@ -473,7 +481,7 @@ export class EthModule { address: Buffer, blockTag: OptionalRpcNewBlockTag ): Promise { - const blockNumberOrPending = await this._resolveNewBlockTag(blockTag); + const blockNumberOrPending = await this.resolveNewBlockTag(blockTag); return numberToRpcQuantity( await this._node.getAccountBalance( @@ -598,7 +606,7 @@ export class EthModule { address: Buffer, blockTag: OptionalRpcNewBlockTag ): Promise { - const blockNumberOrPending = await this._resolveNewBlockTag(blockTag); + const blockNumberOrPending = await this.resolveNewBlockTag(blockTag); return bufferToRpcData( await this._node.getCode(new Address(address), blockNumberOrPending) @@ -707,7 +715,7 @@ export class EthModule { slot: bigint, blockTag: OptionalRpcNewBlockTag ): Promise { - const blockNumberOrPending = await this._resolveNewBlockTag(blockTag); + const blockNumberOrPending = await this.resolveNewBlockTag(blockTag); const data = await this._node.getStorageAt( new Address(address), @@ -840,7 +848,7 @@ export class EthModule { address: Buffer, blockTag: OptionalRpcNewBlockTag ): Promise { - const blockNumberOrPending = await this._resolveNewBlockTag(blockTag); + const blockNumberOrPending = await this.resolveNewBlockTag(blockTag); return numberToRpcQuantity( await this._node.getNextConfirmedNonce( @@ -1226,7 +1234,7 @@ export class EthModule { ); } - const resolvedNewestBlock = await this._resolveNewBlockTag(newestBlock); + const resolvedNewestBlock = await this.resolveNewBlockTag(newestBlock); const feeHistory = await this._node.getFeeHistory( blockCount, @@ -1249,29 +1257,6 @@ export class EthModule { // Utility methods - private async _rpcCallRequestToNodeCallParams( - rpcCall: RpcCallRequest - ): Promise { - return { - to: rpcCall.to, - from: - rpcCall.from !== undefined - ? rpcCall.from - : await this._getDefaultCallFrom(), - data: rpcCall.data !== undefined ? rpcCall.data : toBuffer([]), - gasLimit: - rpcCall.gas !== undefined ? rpcCall.gas : this._node.getBlockGasLimit(), - value: rpcCall.value !== undefined ? rpcCall.value : 0n, - accessList: - rpcCall.accessList !== undefined - ? this._rpcAccessListToNodeAccessList(rpcCall.accessList) - : undefined, - gasPrice: rpcCall.gasPrice, - maxFeePerGas: rpcCall.maxFeePerGas, - maxPriorityFeePerGas: rpcCall.maxPriorityFeePerGas, - }; - } - private async _rpcTransactionRequestToNodeTransactionParams( rpcTx: RpcTransactionRequest ): Promise { @@ -1351,15 +1336,6 @@ export class EthModule { }; } - private _rpcAccessListToNodeAccessList( - rpcAccessList: RpcAccessList - ): Array<[Buffer, Buffer[]]> { - return rpcAccessList.map((tuple) => [ - tuple.address, - tuple.storageKeys ?? [], - ]); - } - private async _resolveOldBlockTag( oldBlockTag: RpcOldBlockTag ): Promise { @@ -1471,22 +1447,6 @@ export class EthModule { return blockTag; } - private _newBlockTagToString(tag: RpcNewBlockTag): string { - if (typeof tag === "string") { - return tag; - } - - if (BigIntUtils.isBigInt(tag)) { - return tag.toString(); - } - - if ("blockNumber" in tag) { - return tag.blockNumber.toString(); - } - - return bufferToHex(tag.blockHash); - } - private _extractNormalizedLogTopics( topics: OptionalRpcLogTopics ): Array | null> { @@ -1518,16 +1478,6 @@ export class EthModule { return address; } - private async _getDefaultCallFrom(): Promise { - const localAccounts = await this._node.getLocalAccountAddresses(); - - if (localAccounts.length === 0) { - return toBuffer(zeroAddress()); - } - - return toBuffer(localAccounts[0]); - } - private async _sendTransactionAndReturnHash(tx: TypedTransaction) { let result = await this._node.sendTransaction(tx); @@ -1802,15 +1752,4 @@ You can use them by running Hardhat Network with 'hardfork' ${EIP1559_MIN_HARDFO ); } } - - private _checkPostMergeBlockTags(blockTag: "safe" | "finalized") { - const isPostMerge = this._node.isPostMergeHardfork(); - const hardfork = this._node.hardfork; - - if (!isPostMerge) { - throw new InvalidArgumentsError( - `The '${blockTag}' block tag is not allowed in pre-merge hardforks. You are using the '${hardfork}' hardfork.` - ); - } - } } diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/evm.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/evm.ts index e57bd5ab24..3d8d38b9df 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/evm.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/evm.ts @@ -21,7 +21,7 @@ import { MineBlockResult } from "../node-types"; import { ModulesLogger } from "./logger"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ // Type to accept decimal or hex-encoded params (for test rpc methods only) const rpcQuantityOrNumber = t.union([rpcQuantity, t.number]); diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/hardhat.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/hardhat.ts index 428a92b3c5..84c7a91ae0 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/hardhat.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/hardhat.ts @@ -34,7 +34,7 @@ import { ForkConfig, MineBlockResult } from "../node-types"; import { ModulesLogger } from "./logger"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ export class HardhatModule { constructor( diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/net.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/net.ts index d9a7601169..a4b457ec1e 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/net.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/net.ts @@ -4,7 +4,7 @@ import { numberToRpcQuantity } from "../../../core/jsonrpc/types/base-types"; import { validateParams } from "../../../core/jsonrpc/types/input/validation"; import { MethodNotFoundError } from "../../../core/providers/errors"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ export class NetModule { constructor(private readonly _common: Common) {} diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/personal.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/personal.ts index 9343817e48..8fc5560ca0 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/personal.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/personal.ts @@ -5,7 +5,7 @@ import { validateParams } from "../../../core/jsonrpc/types/input/validation"; import { MethodNotFoundError } from "../../../core/providers/errors"; import { HardhatNode } from "../node"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ export class PersonalModule { constructor(private readonly _node: HardhatNode) {} diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/web3.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/web3.ts index 2728bf4580..7a44c02eb5 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/modules/web3.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/modules/web3.ts @@ -7,7 +7,7 @@ import { MethodNotFoundError } from "../../../core/providers/errors"; import { keccak256 } from "../../../util/keccak"; import { HardhatNode } from "../node"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ export class Web3Module { constructor(private readonly _node: HardhatNode) {} diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/node-types.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/node-types.ts index 3f2605ef42..931da8eec1 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/node-types.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/node-types.ts @@ -32,6 +32,7 @@ interface CommonConfig { coinbase: string; chains: HardhatNetworkChainsConfig; allowBlocksWithSameTimestamp: boolean; + enableTransientStorage: boolean; } export type LocalNodeConfig = CommonConfig; diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/node.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/node.ts index 98c49665ca..4c6668fb89 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/node.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/node.ts @@ -1,5 +1,5 @@ import { Block, HeaderData } from "@nomicfoundation/ethereumjs-block"; -import { Common } from "@nomicfoundation/ethereumjs-common"; +import { Common, CustomCommonOpts } from "@nomicfoundation/ethereumjs-common"; import { AccessListEIP2930Transaction, FeeMarketEIP1559Transaction, @@ -83,6 +83,10 @@ import { VMTracer } from "../stack-traces/vm-tracer"; import "./ethereumjs-workarounds"; import { rpcQuantityToBigInt } from "../../core/jsonrpc/types/base-types"; import { JsonRpcClient } from "../jsonrpc/client"; +import { + StateOverrideSet, + StateProperties, +} from "../../core/jsonrpc/types/input/callRequest"; import { bloomFilter, Filter, filterLogs, LATEST_BLOCK, Type } from "./filter"; import { ForkBlockchain } from "./fork/ForkBlockchain"; import { ForkStateManager } from "./fork/ForkStateManager"; @@ -130,7 +134,7 @@ type ExecResult = EVMResult["execResult"]; const log = debug("hardhat:core:hardhat-network:node"); -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ export class HardhatNode extends EventEmitter { public static async create( @@ -146,6 +150,7 @@ export class HardhatNode extends EventEmitter { networkId, chainId, allowBlocksWithSameTimestamp, + enableTransientStorage, } = config; const allowUnlimitedContractSize = @@ -303,7 +308,8 @@ export class HardhatNode extends EventEmitter { forkBlockNum, forkBlockHash, nextBlockBaseFeePerGas, - forkClient + forkClient, + enableTransientStorage ); return [common, node]; @@ -390,7 +396,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu private _forkBlockNumber?: bigint, private _forkBlockHash?: string, nextBlockBaseFee?: bigint, - private _forkClient?: JsonRpcClient + private _forkClient?: JsonRpcClient, + private readonly _enableTransientStorage: boolean = false ) { super(); @@ -529,7 +536,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu throw new TransactionExecutionError(err); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw err; } @@ -624,7 +631,8 @@ Hardhat Network's forking functionality only works with blocks from at least spu public async runCall( call: CallParams, - blockNumberOrPending: bigint | "pending" + blockNumberOrPending: bigint | "pending", + stateOverrideSet: StateOverrideSet = {} ): Promise { let txParams: TransactionParams; @@ -659,7 +667,13 @@ Hardhat Network's forking functionality only works with blocks from at least spu const result = await this._runInBlockContext( blockNumberOrPending, - async () => this._runTxAndRevertMutations(tx, blockNumberOrPending, true) + async () => + this._runTxAndRevertMutations( + tx, + blockNumberOrPending, + true, + stateOverrideSet + ) ); const traces = await this._gatherTraces(result.execResult); @@ -1363,6 +1377,18 @@ Hardhat Network's forking functionality only works with blocks from at least spu await this._persistIrregularWorldState(); } + public async traceCall( + callParams: CallParams, + block: bigint | "pending", + traceConfig: RpcDebugTracingConfig + ) { + const vmDebugTracer = new VMDebugTracer(this._vm); + + return vmDebugTracer.trace(async () => { + await this.runCall(callParams, block); + }, traceConfig); + } + public async traceTransaction(hash: Buffer, config: RpcDebugTracingConfig) { const block = await this.getBlockByTransactionHash(hash); if (block === undefined) { @@ -1730,7 +1756,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu throw new InvalidInputError(e.message); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw e; } @@ -2354,6 +2380,83 @@ Hardhat Network's forking functionality only works with blocks from at least spu ); } + private async _applyStateOverrideSet(stateOverrideSet: StateOverrideSet) { + // Multiple state override set can be configured for different addresses, hence the loop + for (const [addrToOverride, stateOverrideOptions] of Object.entries( + stateOverrideSet + )) { + const address = new Address(toBuffer(addrToOverride)); + + const { balance, nonce, code, state, stateDiff } = stateOverrideOptions; + + await this._overrideBalanceAndNonce(address, balance, nonce); + await this._overrideCode(address, code); + await this._overrideStateAndStateDiff(address, state, stateDiff); + } + } + + private async _overrideBalanceAndNonce( + address: Address, + balance: bigint | undefined, + nonce: bigint | undefined + ) { + const MAX_NONCE = 2n ** 64n - 1n; + const MAX_BALANCE = 2n ** 256n - 1n; + + if (nonce !== undefined && nonce > MAX_NONCE) { + throw new InvalidInputError( + `The 'nonce' property should occupy a maximum of 8 bytes (nonce=${nonce}).` + ); + } + + if (balance !== undefined && balance > MAX_BALANCE) { + throw new InvalidInputError( + `The 'balance' property should occupy a maximum of 32 bytes (balance=${balance}).` + ); + } + + await this._stateManager.modifyAccountFields(address, { + balance, + nonce, + }); + } + + private async _overrideCode(address: Address, code: Buffer | undefined) { + if (code === undefined) return; + + await this._stateManager.putContractCode(address, code); + } + + private async _overrideStateAndStateDiff( + address: Address, + state: StateProperties | undefined, + stateDiff: StateProperties | undefined + ) { + let newState; + + if (state !== undefined && stateDiff === undefined) { + await this._stateManager.clearContractStorage(address); + newState = state; + } else if (state === undefined && stateDiff !== undefined) { + newState = stateDiff; + } else if (state === undefined && stateDiff === undefined) { + // nothing to do + return; + } else { + throw new InvalidInputError( + "The properties 'state' and 'stateDiff' cannot be used simultaneously when configuring the state override set passed to the eth_call method." + ); + } + + for (const [storageKey, value] of Object.entries(newState)) { + await this._stateManager.putContractStorage( + address, + toBuffer(storageKey), + setLengthLeft(bigIntToBuffer(value), 32) + ); + } + } + /** * This function runs a transaction and reverts all the modifications that it * makes. @@ -2361,10 +2464,13 @@ Hardhat Network's forking functionality only works with blocks from at least spu private async _runTxAndRevertMutations( tx: TypedTransaction, blockNumberOrPending: bigint | "pending", - forceBaseFeeZero = false + forceBaseFeeZero = false, + stateOverrideSet: StateOverrideSet = {} ): Promise { const initialStateRoot = await this._stateManager.getStateRoot(); + await this._applyStateOverrideSet(stateOverrideSet); + let blockContext: Block | undefined; let originalCommon: Common | undefined; @@ -2387,6 +2493,23 @@ Hardhat Network's forking functionality only works with blocks from at least spu // know anything about the txs in the current block } + originalCommon = (this._vm as any)._common; + + (this._vm as any)._common = Common.custom( + { + chainId: + this._forkBlockNumber === undefined || + blockContext.header.number >= this._forkBlockNumber + ? this._configChainId + : this._forkNetworkId, + networkId: this._forkNetworkId ?? this._configNetworkId, + }, + { + hardfork: this._selectHardfork(blockContext.header.number), + ...this._getTransientStorageSettings(), + } + ); + // If this VM is running without EIP4895, but the block has withdrawals, // we remove them and the withdrawal root from the block if ( @@ -2438,22 +2561,6 @@ Hardhat Network's forking functionality only works with blocks from at least spu (blockContext.header as any).baseFeePerGas = 0n; } - originalCommon = (this._vm as any)._common; - - (this._vm as any)._common = Common.custom( - { - chainId: - this._forkBlockNumber === undefined || - blockContext.header.number >= this._forkBlockNumber - ? this._configChainId - : this._forkNetworkId, - networkId: this._forkNetworkId ?? this._configNetworkId, - }, - { - hardfork: this._selectHardfork(blockContext.header.number), - } - ); - return await this._vm.runTx({ block: blockContext, tx, @@ -2740,6 +2847,7 @@ Hardhat Network's forking functionality only works with blocks from at least spu }, { hardfork: this._selectHardfork(BigInt(blockNumber)), + ...this._getTransientStorageSettings(), } ); @@ -2750,4 +2858,12 @@ Hardhat Network's forking functionality only works with blocks from at least spu ); } } + + private _getTransientStorageSettings(): Partial { + if (this._enableTransientStorage) { + return { eips: [1153] }; + } + + return {}; + } } diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/output.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/output.ts index 033f43fb3a..dafddf6db9 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/output.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/output.ts @@ -156,7 +156,7 @@ export interface RpcWithdrawalItem { amount: string; } -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ export function getRpcBlock( block: Block, diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts index 276a52586a..19c06ec9e9 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/provider.ts @@ -54,7 +54,7 @@ const PRIVATE_RPC_METHODS = new Set([ "hardhat_setLoggingEnabled", ]); -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ export const DEFAULT_COINBASE = "0xc014ba5ec014ba5ec014ba5ec014ba5ec014ba5e"; @@ -80,6 +80,7 @@ interface HardhatNetworkProviderConfig { experimentalHardhatNetworkMessageTraceHooks?: BoundExperimentalHardhatNetworkMessageTraceHook[]; forkConfig?: ForkConfig; forkCachePath?: string; + enableTransientStorage: boolean; } export class HardhatNetworkProvider @@ -253,6 +254,7 @@ export class HardhatNetworkProvider coinbase: this._config.coinbase ?? DEFAULT_COINBASE, chains: this._config.chains, allowBlocksWithSameTimestamp: this._config.allowBlocksWithSameTimestamp, + enableTransientStorage: this._config.enableTransientStorage, }; const [common, node] = await HardhatNode.create(config); diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts index 3a0e0edbf7..0aa9e28e51 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.ts @@ -18,7 +18,7 @@ import { } from "../../../core/providers/errors"; import { makeFakeSignature } from "../utils/makeFakeSignature"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ /** * This class is the EIP-2930 version of FakeSenderTransaction. diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts index 4e993d3ea8..70030caa7c 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.ts @@ -17,7 +17,7 @@ import { } from "../../../core/providers/errors"; import { makeFakeSignature } from "../utils/makeFakeSignature"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ /** * This class is the EIP-1559 version of FakeSenderTransaction. diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts index bde8a5d817..97282ccdb0 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/FakeSenderTransaction.ts @@ -9,7 +9,7 @@ import { } from "../../../core/providers/errors"; import { makeFakeSignature } from "../utils/makeFakeSignature"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ /** * This class represents a legacy transaction sent by a sender whose private diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts index 2426f9b6b9..93ab726a94 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.ts @@ -12,7 +12,7 @@ import { import { InternalError } from "../../../core/providers/errors"; import * as BigIntUtils from "../../../util/bigint"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ /** * This class is like `ReadOnlyValidTransaction` but for EIP-1559 transactions. diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts index 28b14dfdb6..86faf07feb 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.ts @@ -10,7 +10,7 @@ import { Address } from "@nomicfoundation/ethereumjs-util"; import { InternalError } from "../../../core/providers/errors"; import * as BigIntUtils from "../../../util/bigint"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ /** * This class is like `ReadOnlyValidTransaction` but for diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts index 4487e62eda..3e834774ab 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.ts @@ -4,7 +4,7 @@ import { Address } from "@nomicfoundation/ethereumjs-util"; import { InternalError } from "../../../core/providers/errors"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ /** * This class represents a transaction that is assumed to be valid. diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.ts index 401543c427..9150360e8a 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.ts @@ -4,7 +4,7 @@ import { Address } from "@nomicfoundation/ethereumjs-util"; import { InternalError } from "../../../core/providers/errors"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ /** * This class is like `ReadOnlyValidTransaction` but for diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/utils/assertions.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/utils/assertions.ts index 7dfad757c0..24939458b5 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/utils/assertions.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/utils/assertions.ts @@ -5,7 +5,7 @@ export function assertHardhatNetworkInvariant( description: string ): asserts invariant { if (!invariant) { - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new InternalError( `Internal Hardhat Network invariant was violated: ${description}` ); diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/utils/makeCommon.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/utils/makeCommon.ts index 9ef1ba8eef..270a6bb6f7 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/utils/makeCommon.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/utils/makeCommon.ts @@ -2,7 +2,14 @@ import { Common } from "@nomicfoundation/ethereumjs-common"; import { LocalNodeConfig } from "../node-types"; -export function makeCommon({ chainId, networkId, hardfork }: LocalNodeConfig) { +export function makeCommon({ + chainId, + networkId, + hardfork, + enableTransientStorage, +}: LocalNodeConfig) { + const otherSettings = enableTransientStorage ? { eips: [1153] } : {}; + const common = Common.custom( { chainId, @@ -10,6 +17,7 @@ export function makeCommon({ chainId, networkId, hardfork }: LocalNodeConfig) { }, { hardfork, + ...otherSettings, } ); diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/utils/makeForkClient.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/utils/makeForkClient.ts index 1db38ed2eb..57a7edae31 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/utils/makeForkClient.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/utils/makeForkClient.ts @@ -44,12 +44,12 @@ export async function makeForkClient( const maxReorg = actualMaxReorg ?? FALLBACK_MAX_REORG; const latestBlock = await getLatestBlockNumber(provider); - const lastSafeBlock = latestBlock - maxReorg; + const lastSafeBlock = getLastSafeBlock(latestBlock, maxReorg); let forkBlockNumber; if (forkConfig.blockNumber !== undefined) { if (forkConfig.blockNumber > latestBlock) { - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new Error( `Trying to initialize a provider with block ${forkConfig.blockNumber} but the current block is ${latestBlock}` ); @@ -127,3 +127,12 @@ async function getLatestBlockNumber(provider: HttpProvider) { const latestBlock = BigInt(latestBlockString); return latestBlock; } + +export function getLastSafeBlock( + latestBlock: bigint, + maxReorg: bigint +): bigint { + // Design choice: if latestBlock - maxReorg results in a negative number then the latestBlock block will be used. + // This decision is based on the assumption that if maxReorg > latestBlock then there is a high probability that the fork is occurring on a devnet. + return latestBlock - maxReorg >= 0 ? latestBlock - maxReorg : latestBlock; +} diff --git a/packages/hardhat-core/src/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.ts b/packages/hardhat-core/src/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.ts index bd91434b1f..8d155bfec2 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.ts @@ -2,7 +2,7 @@ import { InternalError } from "../../../core/providers/errors"; import * as BigIntUtils from "../../../util/bigint"; import { SenderTransactions, SerializedTransaction } from "../PoolState"; -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ /** * Move as many transactions as possible from the queued list diff --git a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/compiler-to-model.ts b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/compiler-to-model.ts index 90745e4a90..e801691fe5 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/compiler-to-model.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/compiler-to-model.ts @@ -689,7 +689,7 @@ function correctSelectors( const fixedSelector = contract.correctSelector(functionName, selector); if (!fixedSelector) { - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new Error( `Failed to compute the selector one or more implementations of ${contract.name}#${functionName}. Hardhat Network can automatically fix this problem if you don't use function overloading.` ); diff --git a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts index e5e9f92236..0826487bbb 100644 --- a/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts +++ b/packages/hardhat-core/src/internal/hardhat-network/stack-traces/consoleLogger.ts @@ -134,7 +134,32 @@ export class ConsoleLogger { return; } - return this._decode(parameters, types); + const consoleLogs = this._decode(parameters, types); + + this._replaceNumberFormatSpecifiers(consoleLogs); + + return consoleLogs; + } + + private _replaceNumberFormatSpecifiers(consoleLogs: ConsoleLogs) { + /** + * Replace the occurrences of %d and %i with %s. This is necessary because if the arguments passed are numbers, + * they could be too large to be formatted as a Number or an Integer, so it is safer to use a String. + * %d and %i are replaced only if there is an odd number of % before the d or i. + * If there is an even number of % then it is assumed that the % is escaped and should not be replaced. + * The regex matches a '%d' or an '%i' that has an even number of + * '%' behind it (including 0). This group of pairs of '%' is captured + * and preserved, while the '%[di]' is replaced with '%s'. + * Naively doing (%%)* is not enough; we also have to use the + * (? 0 && typeof consoleLogs[0] === "string") { + consoleLogs[0] = consoleLogs[0].replace( + /((?; + downloadCompiler( + version: string, + downloadStartedCb: (isCompilerDownloaded: boolean) => Promise, + downloadEndedCb: (isCompilerDownloaded: boolean) => Promise + ): Promise; /** * Returns the compiler, which MUST be downloaded before calling this function. @@ -146,8 +150,24 @@ export class CompilerDownloader implements ICompilerDownloader { return fsExtra.pathExists(downloadPath); } - public async downloadCompiler(version: string): Promise { + public async downloadCompiler( + version: string, + downloadStartedCb: (isCompilerDownloaded: boolean) => Promise, + downloadEndedCb: (isCompilerDownloaded: boolean) => Promise + ): Promise { + // Since only one process at a time can acquire the mutex, we avoid the risk of downloading the same compiler multiple times. + // This is because the mutex blocks access until a compiler has been fully downloaded, preventing any new process + // from checking whether that version of the compiler exists. Without mutex it might incorrectly + // return false, indicating that the compiler isn't present, even though it is currently being downloaded. await this._mutex.use(async () => { + const isCompilerDownloaded = await this.isCompilerDownloaded(version); + + if (isCompilerDownloaded === true) { + return; + } + + await downloadStartedCb(isCompilerDownloaded); + let build = await this._getCompilerBuild(version); if (build === undefined && (await this._shouldDownloadCompilerList())) { @@ -189,6 +209,8 @@ export class CompilerDownloader implements ICompilerDownloader { } await this._postProcessCompilerDownload(build, downloadPath); + + await downloadEndedCb(isCompilerDownloaded); }); } diff --git a/packages/hardhat-core/src/internal/solidity/compiler/solc-info.ts b/packages/hardhat-core/src/internal/solidity/compiler/solc-info.ts new file mode 100644 index 0000000000..fd06e60c43 --- /dev/null +++ b/packages/hardhat-core/src/internal/solidity/compiler/solc-info.ts @@ -0,0 +1,69 @@ +const defaultEvmTargets: { [key: string]: string } = { + "0.5.1": "byzantium", + "0.5.2": "byzantium", + "0.5.3": "byzantium", + "0.5.4": "byzantium", + "0.5.5": "petersburg", + "0.5.6": "petersburg", + "0.5.7": "petersburg", + "0.5.8": "petersburg", + "0.5.9": "petersburg", + "0.5.10": "petersburg", + "0.5.11": "petersburg", + "0.5.12": "petersburg", + "0.5.13": "petersburg", + "0.5.14": "istanbul", + "0.5.15": "istanbul", + "0.5.16": "istanbul", + "0.5.17": "istanbul", + "0.6.0": "istanbul", + "0.6.1": "istanbul", + "0.6.2": "istanbul", + "0.6.3": "istanbul", + "0.6.4": "istanbul", + "0.6.5": "istanbul", + "0.6.6": "istanbul", + "0.6.7": "istanbul", + "0.6.8": "istanbul", + "0.6.9": "istanbul", + "0.6.10": "istanbul", + "0.6.11": "istanbul", + "0.6.12": "istanbul", + "0.7.0": "istanbul", + "0.7.1": "istanbul", + "0.7.2": "istanbul", + "0.7.3": "istanbul", + "0.7.4": "istanbul", + "0.7.5": "istanbul", + "0.7.6": "istanbul", + "0.8.0": "istanbul", + "0.8.1": "istanbul", + "0.8.2": "istanbul", + "0.8.3": "istanbul", + "0.8.4": "istanbul", + "0.8.5": "berlin", + "0.8.6": "berlin", + "0.8.7": "london", + "0.8.8": "london", + "0.8.9": "london", + "0.8.10": "london", + "0.8.11": "london", + "0.8.12": "london", + "0.8.13": "london", + "0.8.14": "london", + "0.8.15": "london", + "0.8.16": "london", + "0.8.17": "london", + "0.8.18": "paris", + "0.8.19": "paris", + "0.8.20": "shanghai", + "0.8.21": "shanghai", + "0.8.22": "shanghai", + "0.8.23": "shanghai", +}; + +export function getEvmVersionFromSolcVersion( + solcVersion: string +): string | undefined { + return defaultEvmTargets[solcVersion]; +} diff --git a/packages/hardhat-core/src/internal/solidity/dependencyGraph.ts b/packages/hardhat-core/src/internal/solidity/dependencyGraph.ts index 0f55ec0a4e..95e3662eb9 100644 --- a/packages/hardhat-core/src/internal/solidity/dependencyGraph.ts +++ b/packages/hardhat-core/src/internal/solidity/dependencyGraph.ts @@ -1,4 +1,6 @@ import * as taskTypes from "../../types/builtin-tasks"; +import { HardhatError } from "../core/errors"; +import { ERRORS } from "../core/errors-list"; import { ResolvedFile, Resolver } from "./resolver"; @@ -22,7 +24,8 @@ export class DependencyGraph implements taskTypes.DependencyGraph { private _resolvedFiles = new Map(); private _dependenciesPerFile = new Map>(); - private readonly _visitedFiles = new Set(); + // map absolute paths to source names + private readonly _visitedFiles = new Map(); private constructor() {} @@ -160,11 +163,20 @@ export class DependencyGraph implements taskTypes.DependencyGraph { resolver: Resolver, file: ResolvedFile ): Promise { - if (this._visitedFiles.has(file.absolutePath)) { + const sourceName = this._visitedFiles.get(file.absolutePath); + + if (sourceName !== undefined) { + if (sourceName !== file.sourceName) { + throw new HardhatError(ERRORS.RESOLVER.AMBIGUOUS_SOURCE_NAMES, { + sourcenames: `'${sourceName}' and '${file.sourceName}'`, + file: file.absolutePath, + }); + } + return; } - this._visitedFiles.add(file.absolutePath); + this._visitedFiles.set(file.absolutePath, file.sourceName); const dependencies = new Set(); this._resolvedFiles.set(file.sourceName, file); diff --git a/packages/hardhat-core/src/internal/solidity/parse.ts b/packages/hardhat-core/src/internal/solidity/parse.ts index 4a09efc876..e8b51be3ec 100644 --- a/packages/hardhat-core/src/internal/solidity/parse.ts +++ b/packages/hardhat-core/src/internal/solidity/parse.ts @@ -42,7 +42,7 @@ export class Parser { throw new HardhatError(ERRORS.GENERAL.CORRUPTED_LOCKFILE); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw e; } } diff --git a/packages/hardhat-core/src/internal/solidity/resolver.ts b/packages/hardhat-core/src/internal/solidity/resolver.ts index 1198ba3920..364083e0d2 100644 --- a/packages/hardhat-core/src/internal/solidity/resolver.ts +++ b/packages/hardhat-core/src/internal/solidity/resolver.ts @@ -21,6 +21,7 @@ import { ERRORS } from "../core/errors-list"; import { createNonCryptographicHashBasedIdentifier } from "../util/hash"; import { getRealPath } from "../util/fs-utils"; +import { applyRemappings } from "../../utils/remappings"; import { Parser } from "./parse"; export interface ResolvedFilesMap { @@ -69,6 +70,7 @@ export class Resolver { constructor( private readonly _projectRoot: string, private readonly _parser: Parser, + private readonly _remappings: Record, private readonly _readFile: (absolutePath: string) => Promise, private readonly _transformImportName: ( importName: string @@ -86,14 +88,22 @@ export class Resolver { return cached; } - validateSourceNameFormat(sourceName); + const remappedSourceName = applyRemappings(this._remappings, sourceName); + + validateSourceNameFormat(remappedSourceName); let resolvedFile: ResolvedFile; - if (await isLocalSourceName(this._projectRoot, sourceName)) { - resolvedFile = await this._resolveLocalSourceName(sourceName); + if (await isLocalSourceName(this._projectRoot, remappedSourceName)) { + resolvedFile = await this._resolveLocalSourceName( + sourceName, + remappedSourceName + ); } else { - resolvedFile = await this._resolveLibrarySourceName(sourceName); + resolvedFile = await this._resolveLibrarySourceName( + sourceName, + remappedSourceName + ); } this._cache.set(sourceName, resolvedFile); @@ -109,7 +119,14 @@ export class Resolver { from: ResolvedFile, importName: string ): Promise { - const imported = await this._transformImportName(importName); + // sanity check for deprecated task + if (importName !== (await this._transformImportName(importName))) { + throw new HardhatError( + ERRORS.TASK_DEFINITIONS.DEPRECATED_TRANSFORM_IMPORT_TASK + ); + } + + const imported = applyRemappings(this._remappings, importName); const scheme = this._getUriScheme(imported); if (scheme !== undefined) { @@ -151,7 +168,7 @@ export class Resolver { if (isRelativeImport) { sourceName = await this._relativeImportToSourceName(from, imported); } else { - sourceName = normalizeSourceName(imported); + sourceName = normalizeSourceName(importName); // The sourceName of the imported file is not transformed } const cached = this._cache.get(sourceName); @@ -169,7 +186,10 @@ export class Resolver { isRelativeImport && !this._isRelativeImportToLibrary(from, imported) ) { - resolvedFile = await this._resolveLocalSourceName(sourceName); + resolvedFile = await this._resolveLocalSourceName( + sourceName, + applyRemappings(this._remappings, sourceName) + ); } else { resolvedFile = await this.resolveSourceName(sourceName); } @@ -241,28 +261,50 @@ export class Resolver { ); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + if ( + HardhatError.isHardhatErrorType( + error, + ERRORS.GENERAL.INVALID_READ_OF_DIRECTORY + ) + ) { + throw new HardhatError( + ERRORS.RESOLVER.INVALID_IMPORT_OF_DIRECTORY, + { + imported, + from: from.sourceName, + }, + error + ); + } + + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } } private async _resolveLocalSourceName( - sourceName: string + sourceName: string, + remappedSourceName: string ): Promise { await this._validateSourceNameExistenceAndCasing( this._projectRoot, - sourceName, + remappedSourceName, false ); - const absolutePath = path.join(this._projectRoot, sourceName); + const absolutePath = path.join(this._projectRoot, remappedSourceName); return this._resolveFile(sourceName, absolutePath); } private async _resolveLibrarySourceName( - sourceName: string + sourceName: string, + remappedSourceName: string ): Promise { - const libraryName = this._getLibraryName(sourceName); + const normalizedSourceName = remappedSourceName.replace( + /^node_modules\//, + "" + ); + const libraryName = this._getLibraryName(normalizedSourceName); let packageJsonPath; try { @@ -288,7 +330,7 @@ export class Resolver { } let nodeModulesPath = path.dirname(path.dirname(packageJsonPath)); - if (this._isScopedPackage(sourceName)) { + if (this._isScopedPackage(normalizedSourceName)) { nodeModulesPath = path.dirname(nodeModulesPath); } @@ -298,7 +340,7 @@ export class Resolver { // cases we handle resolution differently const packageRoot = path.dirname(packageJsonPath); const pattern = new RegExp(`^${libraryName}/?`); - const fileName = sourceName.replace(pattern, ""); + const fileName = normalizedSourceName.replace(pattern, ""); await this._validateSourceNameExistenceAndCasing( packageRoot, @@ -311,10 +353,10 @@ export class Resolver { } else { await this._validateSourceNameExistenceAndCasing( nodeModulesPath, - sourceName, + normalizedSourceName, true ); - absolutePath = path.join(nodeModulesPath, sourceName); + absolutePath = path.join(nodeModulesPath, normalizedSourceName); } const packageInfo: { @@ -514,7 +556,7 @@ export class Resolver { ); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } } diff --git a/packages/hardhat-core/src/internal/util/caller-package.ts b/packages/hardhat-core/src/internal/util/caller-package.ts index 85f2196de9..7c31a91005 100644 --- a/packages/hardhat-core/src/internal/util/caller-package.ts +++ b/packages/hardhat-core/src/internal/util/caller-package.ts @@ -22,7 +22,13 @@ export function getClosestCallerPackage(): string | undefined { for (const callSite of stack) { const fileName = callSite.getFileName(); - if (fileName !== null && path.isAbsolute(fileName)) { + // fileName is string | null in @types/node <=18 + // and string | undefined in @types/node 20 + if ( + fileName !== null && + fileName !== undefined && + path.isAbsolute(fileName) + ) { const callerPackage = findClosestPackageJson(fileName); if (callerPackage === currentPackage) { diff --git a/packages/hardhat-core/src/internal/util/ci-detection.ts b/packages/hardhat-core/src/internal/util/ci-detection.ts index 4f09815aee..3f9df310d1 100644 --- a/packages/hardhat-core/src/internal/util/ci-detection.ts +++ b/packages/hardhat-core/src/internal/util/ci-detection.ts @@ -1,4 +1,5 @@ -import ci from "ci-info"; +import type CiInfoT from "ci-info"; + import os from "os"; // This has been tested in: @@ -17,6 +18,7 @@ import os from "os"; // - Jenkins -- Using process.env.BUILD_NUMBER // - ZEIT Now -- Special case export function isRunningOnCiServer(): boolean { + const ci = require("ci-info") as typeof CiInfoT; return ( ci.isCI || isGithubActions() || diff --git a/packages/hardhat-core/src/internal/util/download.ts b/packages/hardhat-core/src/internal/util/download.ts index 7151b71606..6e77e938f9 100644 --- a/packages/hardhat-core/src/internal/util/download.ts +++ b/packages/hardhat-core/src/internal/util/download.ts @@ -1,9 +1,7 @@ import type { Dispatcher } from "undici"; -import fs from "fs"; import fsExtra from "fs-extra"; import path from "path"; -import util from "util"; import { getHardhatVersion } from "./packageInfo"; import { shouldUseProxy } from "./proxy"; @@ -26,9 +24,7 @@ export async function download( timeoutMillis = 10000, extraHeaders: { [name: string]: string } = {} ) { - const { pipeline } = await import("stream"); const { getGlobalDispatcher, ProxyAgent, request } = await import("undici"); - const streamPipeline = util.promisify(pipeline); let dispatcher: Dispatcher; if (process.env.http_proxy !== undefined && shouldUseProxy(url)) { @@ -52,16 +48,17 @@ export async function download( }); if (response.statusCode >= 200 && response.statusCode <= 299) { + const responseBody = Buffer.from(await response.body.arrayBuffer()); const tmpFilePath = resolveTempFileName(filePath); await fsExtra.ensureDir(path.dirname(filePath)); - await streamPipeline(response.body, fs.createWriteStream(tmpFilePath)); + await fsExtra.writeFile(tmpFilePath, responseBody); return fsExtra.move(tmpFilePath, filePath, { overwrite: true }); } // undici's response bodies must always be consumed to prevent leaks const text = await response.body.text(); - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new Error( `Failed to download ${url} - ${response.statusCode} received. ${text}` ); diff --git a/packages/hardhat-core/src/internal/util/fs-utils.ts b/packages/hardhat-core/src/internal/util/fs-utils.ts index d48d75d765..d45e73c428 100644 --- a/packages/hardhat-core/src/internal/util/fs-utils.ts +++ b/packages/hardhat-core/src/internal/util/fs-utils.ts @@ -30,11 +30,11 @@ export async function getRealPath(absolutePath: string): Promise { return await fsPromises.realpath(path.normalize(absolutePath)); } catch (e: any) { if (e.code === "ENOENT") { - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new FileNotFoundError(absolutePath, e); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new FileSystemAccessError(e.message, e); } } @@ -51,11 +51,11 @@ export function getRealPathSync(absolutePath: string): string { return fs.realpathSync.native(path.normalize(absolutePath)); } catch (e: any) { if (e.code === "ENOENT") { - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new FileNotFoundError(absolutePath, e); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new FileSystemAccessError(e.message, e); } } @@ -148,7 +148,7 @@ export async function getFileTrueCase( } } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new FileNotFoundError(path.join(from, relativePath)); } @@ -182,7 +182,7 @@ export function getFileTrueCaseSync( } } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new FileNotFoundError(path.join(from, relativePath)); } @@ -195,11 +195,11 @@ async function readdir(absolutePathToDir: string) { } if (e.code === "ENOTDIR") { - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new InvalidDirectoryError(absolutePathToDir, e); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new FileSystemAccessError(e.message, e); } } @@ -213,11 +213,11 @@ function readdirSync(absolutePathToDir: string) { } if (e.code === "ENOTDIR") { - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new InvalidDirectoryError(absolutePathToDir, e); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new FileSystemAccessError(e.message, e); } } diff --git a/packages/hardhat-core/src/internal/util/global-dir.ts b/packages/hardhat-core/src/internal/util/global-dir.ts index ca4d331776..f20b937b61 100644 --- a/packages/hardhat-core/src/internal/util/global-dir.ts +++ b/packages/hardhat-core/src/internal/util/global-dir.ts @@ -140,3 +140,7 @@ export function writePromptedForHHVSCode() { fs.writeFileSync(extensionPromptedPath, "{}"); } + +export function getVarsFilePath(): string { + return path.join(getConfigDirSync(), "vars.json"); +} diff --git a/packages/hardhat-core/src/internal/util/jsonrpc.ts b/packages/hardhat-core/src/internal/util/jsonrpc.ts index c5a8f68ead..c79e14558c 100644 --- a/packages/hardhat-core/src/internal/util/jsonrpc.ts +++ b/packages/hardhat-core/src/internal/util/jsonrpc.ts @@ -37,7 +37,7 @@ export function parseJsonResponse( if (!isValidJsonResponse(response)) { // We are sending the proper error inside the catch part of the statement. // We just need to raise anything here. - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw new Error(); } } diff --git a/packages/hardhat-core/src/internal/util/report-telemetry-consent.ts b/packages/hardhat-core/src/internal/util/report-telemetry-consent.ts new file mode 100644 index 0000000000..b96b01adea --- /dev/null +++ b/packages/hardhat-core/src/internal/util/report-telemetry-consent.ts @@ -0,0 +1,16 @@ +import { Analytics } from "../cli/analytics"; + +async function main() { + const [telemetryConsent] = process.argv.slice(2); + + // we pass undefined as the telemetryConsent value because + // this hit is done before the consent is saved + const analytics = await Analytics.getInstance(undefined); + + const [_, consentHitPromise] = await analytics.sendTelemetryConsentHit( + telemetryConsent as "yes" | "no" + ); + await consentHitPromise; +} + +main().catch(() => {}); diff --git a/packages/hardhat-core/src/internal/util/unsafe.ts b/packages/hardhat-core/src/internal/util/unsafe.ts index abb8b3910a..417a23059c 100644 --- a/packages/hardhat-core/src/internal/util/unsafe.ts +++ b/packages/hardhat-core/src/internal/util/unsafe.ts @@ -10,6 +10,6 @@ export const unsafeObjectKeys = Object.keys as ( * This function is a typed version of `Object.entries`. Note that it's type * unsafe. You have to be sure that `o` has exactly the same keys as `T`. */ -export function unsafeObjectEntries(o: T) { +export function unsafeObjectEntries(o: T) { return Object.entries(o) as Array<[keyof T, T[keyof T]]>; } diff --git a/packages/hardhat-core/src/internal/vendor/await-semaphore/index.ts b/packages/hardhat-core/src/internal/vendor/await-semaphore/index.ts index d6c80a2eb4..a2b446a5e7 100644 --- a/packages/hardhat-core/src/internal/vendor/await-semaphore/index.ts +++ b/packages/hardhat-core/src/internal/vendor/await-semaphore/index.ts @@ -1,7 +1,7 @@ // Based on: https://github.com/notenoughneon/await-semaphore/blob/f117a6b59324038c9e8ee04c70c328215a727812/index.ts // which is distributed under this license: https://github.com/notenoughneon/await-semaphore/blob/f117a6b59324038c9e8ee04c70c328215a727812/LICENSE -/* eslint-disable @nomiclabs/hardhat-internal-rules/only-hardhat-error */ +/* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */ export class Semaphore { public count: number; diff --git a/packages/hardhat-core/src/plugins.ts b/packages/hardhat-core/src/plugins.ts index ceeb35d668..0a44c310d1 100644 --- a/packages/hardhat-core/src/plugins.ts +++ b/packages/hardhat-core/src/plugins.ts @@ -1,3 +1,4 @@ +export { ProviderWrapper } from "./internal/core/providers/wrapper"; export { HardhatPluginError, NomicLabsHardhatPluginError, diff --git a/packages/hardhat-core/src/register.ts b/packages/hardhat-core/src/register.ts index 53e1809ada..7ef908a321 100644 --- a/packages/hardhat-core/src/register.ts +++ b/packages/hardhat-core/src/register.ts @@ -42,9 +42,11 @@ if (!HardhatContext.isCreated()) { resolvedConfig, hardhatArguments, ctx.tasksDSL.getTaskDefinitions(), - ctx.extendersManager.getExtenders(), + ctx.tasksDSL.getScopesDefinitions(), + ctx.environmentExtenders, ctx.experimentalHardhatNetworkMessageTraceHooks, - userConfig + userConfig, + ctx.providerExtenders ); ctx.setHardhatRuntimeEnvironment(env); diff --git a/packages/hardhat-core/src/types/builtin-tasks/compile.ts b/packages/hardhat-core/src/types/builtin-tasks/compile.ts index 6f1221a3f5..b4a36bb643 100644 --- a/packages/hardhat-core/src/types/builtin-tasks/compile.ts +++ b/packages/hardhat-core/src/types/builtin-tasks/compile.ts @@ -15,6 +15,11 @@ export interface ResolvedFile { getVersionedName(): string; } +export type ArtifactsEmittedPerFile = Array<{ + file: ResolvedFile; + artifactsEmitted: string[]; +}>; + /** * Information about an npm library. */ diff --git a/packages/hardhat-core/src/types/config.ts b/packages/hardhat-core/src/types/config.ts index 2c06ca9905..3f53d4b3a1 100644 --- a/packages/hardhat-core/src/types/config.ts +++ b/packages/hardhat-core/src/types/config.ts @@ -57,6 +57,7 @@ export interface HardhatNetworkUserConfig { forking?: HardhatNetworkForkingUserConfig; coinbase?: string; chains?: HardhatNetworkChainsUserConfig; + enableTransientStorage?: boolean; } export type HardhatNetworkAccountsUserConfig = @@ -153,6 +154,7 @@ export interface HardhatNetworkConfig { coinbase?: string; chains: HardhatNetworkChainsConfig; allowBlocksWithSameTimestamp?: boolean; + enableTransientStorage?: boolean; } export type HardhatNetworkAccountsConfig = diff --git a/packages/hardhat-core/src/types/runtime.ts b/packages/hardhat-core/src/types/runtime.ts index af55370a3a..542233d4fd 100644 --- a/packages/hardhat-core/src/types/runtime.ts +++ b/packages/hardhat-core/src/types/runtime.ts @@ -1,6 +1,6 @@ import { Artifacts } from "./artifacts"; import { HardhatConfig, HardhatUserConfig, NetworkConfig } from "./config"; -import { EthereumProvider } from "./provider"; +import { EIP1193Provider, EthereumProvider } from "./provider"; /** * This class is used to dynamically validate task's argument types. @@ -93,6 +93,26 @@ export interface ConfigurableTaskDefinition { addFlag(name: string, description?: string): this; } +// type alias to get the overloaded function type +// for 'task` and 'subtask' +declare function addTask( + name: string, + description?: string, + action?: ActionType +): ConfigurableTaskDefinition; +declare function addTask( + name: string, + action: ActionType +): ConfigurableTaskDefinition; +type AddConfigurableTaskFunction = typeof addTask; + +export interface ConfigurableScopeDefinition { + setDescription(description: string): this; + + task: AddConfigurableTaskFunction; + subtask: AddConfigurableTaskFunction; +} + export interface ParamDefinition { name: string; defaultValue?: T; @@ -118,6 +138,7 @@ export interface ParamDefinitionsMap { } export interface TaskDefinition extends ConfigurableTaskDefinition { + readonly scope?: string; readonly name: string; readonly description?: string; readonly action: ActionType; @@ -130,6 +151,14 @@ export interface TaskDefinition extends ConfigurableTaskDefinition { readonly positionalParamDefinitions: Array>; } +export interface ScopeDefinition extends ConfigurableScopeDefinition { + readonly name: string; + readonly description?: string; + readonly tasks: TasksMap; +} + +export type TaskIdentifier = string | { scope?: string; task: string }; + /** * @type TaskArguments {object-like} - the input arguments for a task. * @@ -188,8 +217,12 @@ export interface TasksMap { [name: string]: TaskDefinition; } +export interface ScopesMap { + [scopeName: string]: ScopeDefinition; +} + export type RunTaskFunction = ( - name: string, + taskIdentifier: TaskIdentifier, taskArguments?: TaskArguments, subtaskArguments?: SubtaskArguments ) => Promise; @@ -199,6 +232,7 @@ export interface HardhatRuntimeEnvironment { readonly userConfig: HardhatUserConfig; readonly hardhatArguments: HardhatArguments; readonly tasks: TasksMap; + readonly scopes: ScopesMap; readonly run: RunTaskFunction; readonly network: Network; readonly artifacts: Artifacts; @@ -216,3 +250,13 @@ export interface Network { * modify its properties or add new ones. */ export type EnvironmentExtender = (env: HardhatRuntimeEnvironment) => void; + +/** + * A function that receives a provider, crafts and returns a new one. + * Adding and modifying the current provider is preferred over ignoring it and returning a new instance. + */ +export type ProviderExtender = ( + provider: EIP1193Provider, + config: HardhatConfig, + network: string +) => EIP1193Provider | Promise; diff --git a/packages/hardhat-core/src/utils/contract-names.ts b/packages/hardhat-core/src/utils/contract-names.ts index a92fba9cb3..d065a7ff3d 100644 --- a/packages/hardhat-core/src/utils/contract-names.ts +++ b/packages/hardhat-core/src/utils/contract-names.ts @@ -22,6 +22,7 @@ export function isFullyQualifiedName(name: string): boolean { * Parses a fully qualified name. * * @param fullyQualifiedName It MUST be a fully qualified name. + * @throws {HardhatError} If the name is not fully qualified. */ export function parseFullyQualifiedName(fullyQualifiedName: string): { sourceName: string; diff --git a/packages/hardhat-core/src/utils/remappings.ts b/packages/hardhat-core/src/utils/remappings.ts new file mode 100644 index 0000000000..36c2ac7072 --- /dev/null +++ b/packages/hardhat-core/src/utils/remappings.ts @@ -0,0 +1,17 @@ +export function applyRemappings( + remappings: Record, + sourceName: string +): string { + const selectedRemapping = { from: "", to: "" }; + + for (const [from, to] of Object.entries(remappings)) { + if ( + sourceName.startsWith(from) && + from.length >= selectedRemapping.from.length + ) { + [selectedRemapping.from, selectedRemapping.to] = [from, to]; + } + } + + return sourceName.replace(selectedRemapping.from, selectedRemapping.to); +} diff --git a/packages/hardhat-core/src/utils/source-names.ts b/packages/hardhat-core/src/utils/source-names.ts index 288e057119..804a01ea24 100644 --- a/packages/hardhat-core/src/utils/source-names.ts +++ b/packages/hardhat-core/src/utils/source-names.ts @@ -82,7 +82,7 @@ export async function isLocalSourceName( return false; } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } @@ -225,7 +225,7 @@ async function getSourceNameTrueCase( ); } - // eslint-disable-next-line @nomiclabs/hardhat-internal-rules/only-hardhat-error + // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error throw error; } } diff --git a/packages/hardhat-core/test/.eslintrc.js b/packages/hardhat-core/test/.eslintrc.js index 535ee8bccb..36afbec6a4 100644 --- a/packages/hardhat-core/test/.eslintrc.js +++ b/packages/hardhat-core/test/.eslintrc.js @@ -5,7 +5,7 @@ module.exports = { sourceType: "module", }, rules: { - "@nomiclabs/hardhat-internal-rules/only-hardhat-error": "off", + "@nomicfoundation/hardhat-internal-rules/only-hardhat-error": "off", "@typescript-eslint/restrict-template-expressions": "off", "import/no-extraneous-dependencies": [ "error", diff --git a/packages/hardhat-core/test/builtin-tasks/compile.ts b/packages/hardhat-core/test/builtin-tasks/compile.ts index 3be4a6ea0b..f07116f21c 100644 --- a/packages/hardhat-core/test/builtin-tasks/compile.ts +++ b/packages/hardhat-core/test/builtin-tasks/compile.ts @@ -1,9 +1,12 @@ -import { assert } from "chai"; +import { assert, expect } from "chai"; import ci from "ci-info"; import * as fsExtra from "fs-extra"; import * as path from "path"; - -import { TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS_FAILURE_REASONS } from "../../src/builtin-tasks/task-names"; +import sinon from "sinon"; +import { + TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOBS_FAILURE_REASONS, + TASK_COMPILE_SOLIDITY_READ_FILE, +} from "../../src/builtin-tasks/task-names"; import { SOLIDITY_FILES_CACHE_FILENAME } from "../../src/internal/constants"; import { ERRORS } from "../../src/internal/core/errors-list"; import { CompilationJobCreationErrorReason } from "../../src/types/builtin-tasks"; @@ -16,6 +19,7 @@ import { getAllFilesMatchingSync, getRealPathSync, } from "../../src/internal/util/fs-utils"; +import { getLatestSupportedVersion } from "../internal/hardhat-network/stack-traces/compilers-list"; function assertFileExists(pathToFile: string) { assert.isTrue( @@ -43,6 +47,40 @@ describe("compile task", function () { ); } + describe("compile with latest solc version", function () { + // The 'hardhat.config.js' and 'A.sol' files need to be updated each time a new solc version is released + + useFixtureProject("compilation-latest-solc-version"); + useEnvironment(); + + it("should have the last version of solc in the 'hardhat.config.js' and 'A.sol' files", async function () { + // Test to check that the last version of solc is being tested + const userConfigSolcVersion = this.env.userConfig.solidity; + + const lastSolcVersion = getLatestSupportedVersion(); + + assert.equal( + userConfigSolcVersion, + lastSolcVersion, + `The version of solc in the user config is not the last one. Expected '${lastSolcVersion}' but got '${userConfigSolcVersion}'. Did you forget to update the test?` + ); + }); + + it("should compile and emit artifacts using the latest solc version", async function () { + await this.env.run("compile"); + + assertFileExists(path.join("artifacts", "contracts", "A.sol", "A.json")); + assertBuildInfoExists( + path.join("artifacts", "contracts", "A.sol", "A.dbg.json") + ); + + const buildInfos = getBuildInfos(); + assert.lengthOf(buildInfos, 1); + + assertValidJson(buildInfos[0]); + }); + }); + describe("project with single file", function () { useFixtureProject("compilation-single-file"); useEnvironment(); @@ -138,6 +176,65 @@ describe("compile task", function () { }); }); + describe("project with multiple different evm versions", function () { + useFixtureProject("compilation-multiple-files-different-evm-versions"); + useEnvironment(); + + it("should compile and show a message listing all the evm versions used", async function () { + const spyFunctionConsoleLog = sinon.stub(console, "log"); + + await this.env.run("compile"); + + assert( + spyFunctionConsoleLog.calledWith( + "Compiled 4 Solidity files successfully (evm targets: paris, petersburg, shanghai, unknown evm version for solc version 0.4.11)." + ) + ); + + spyFunctionConsoleLog.restore(); + }); + }); + + describe("TASK_COMPILE_SOLIDITY_READ_FILE", function () { + describe("Import folder", () => { + const folderName = "compilation-single-file"; + useFixtureProject(folderName); + useEnvironment(); + + it("should throw an error because a directory is trying to be imported", async function () { + const absolutePath = `${__dirname}/../fixture-projects/${folderName}/contracts/`; + + await expectHardhatErrorAsync( + async () => { + await this.env.run(TASK_COMPILE_SOLIDITY_READ_FILE, { + absolutePath, + }); + }, + ERRORS.GENERAL.INVALID_READ_OF_DIRECTORY, + `HH22: Invalid file path ${absolutePath}. Attempting to read a directory instead of a file.` + ); + }); + }); + + describe("A non specific Hardhat error is thrown (expected default error)", () => { + const folderName = "compilation-import-non-existing-file-from-path"; + useFixtureProject(folderName); + useEnvironment(); + + it("should throw an error because the file does not exist", async function () { + const absolutePath = `${__dirname}/../fixture-projects/${folderName}/contracts/file.sol`; + + await expect( + this.env.run(TASK_COMPILE_SOLIDITY_READ_FILE, { absolutePath }) + ) + .to.be.rejectedWith( + `ENOENT: no such file or directory, lstat '${absolutePath}'` + ) + .and.eventually.have.property("name", "Error"); // Default js error + }); + }); + }); + describe("compilation jobs failure message", function () { useFixtureProject("compilation-single-file"); useEnvironment(); @@ -844,4 +941,115 @@ Read about compiler configuration at https://hardhat.org/config } }); }); + + describe("project with files importing dependencies", function () { + useFixtureProject("compilation-contract-with-deps"); + useEnvironment(); + + it("should not remove the build-info if it is still referenced by an external library", async function () { + await this.env.run("compile"); + + const pathToContractA = path.join("contracts", "A.sol"); + let contractA = fsExtra.readFileSync(pathToContractA, "utf-8"); + contractA = contractA.replace("contract A", "contract B"); + fsExtra.writeFileSync(pathToContractA, contractA, "utf-8"); + + /** + * The _validArtifacts variable is not cleared when running the compile + * task twice in the same process, leading to an invalid output. This + * issue is not encountered when running the task from the CLI as each + * command operates as a separate process. To resolve this, the private + * variable should be cleared after each run of the compile task. + */ + // eslint-disable-next-line @typescript-eslint/dot-notation + (this.env.artifacts as any)["_validArtifacts"] = []; + + await this.env.run("compile"); + + contractA = contractA.replace("contract B", "contract A"); + fsExtra.writeFileSync(pathToContractA, contractA, "utf-8"); + + // asserts + const pathToBuildInfoB = path.join( + "artifacts", + "contracts", + "A.sol", + "B.dbg.json" + ); + assertBuildInfoExists(pathToBuildInfoB); + const pathToBuildInfoConsole = path.join( + "artifacts", + "dependency", + "contracts", + "console.sol", + "console.dbg.json" + ); + assertBuildInfoExists(pathToBuildInfoConsole); + }); + + it("should not remove the build-info if it is still referenced by another local contract", async function () { + await this.env.run("compile"); + + const pathToContractC = path.join("contracts", "C.sol"); + let contractC = fsExtra.readFileSync(pathToContractC, "utf-8"); + contractC = contractC.replace("contract C", "contract D"); + fsExtra.writeFileSync(pathToContractC, contractC, "utf-8"); + + /** + * The _validArtifacts variable is not cleared when running the compile + * task twice in the same process, leading to an invalid output. This + * issue is not encountered when running the task from the CLI as each + * command operates as a separate process. To resolve this, the private + * variable should be cleared after each run of the compile task. + */ + // eslint-disable-next-line @typescript-eslint/dot-notation + (this.env.artifacts as any)["_validArtifacts"] = []; + + await this.env.run("compile"); + + contractC = contractC.replace("contract D", "contract C"); + fsExtra.writeFileSync(pathToContractC, contractC, "utf-8"); + + // asserts + const pathToBuildInfoC = path.join( + "artifacts", + "contracts", + "C.sol", + "D.dbg.json" + ); + assertBuildInfoExists(pathToBuildInfoC); + const pathToBuildInfoE = path.join( + "artifacts", + "contracts", + "E.sol", + "E.dbg.json" + ); + assertBuildInfoExists(pathToBuildInfoE); + }); + }); + + describe("project with remappings", function () { + useFixtureProject("compilation-remappings"); + useEnvironment(); + + it("should compile fine", async function () { + await this.env.run("compile"); + + assertFileExists(path.join("artifacts", "contracts", "A.sol", "A.json")); + assertFileExists(path.join("artifacts", "foo", "Foo.sol", "Foo.json")); + }); + }); + + describe("project with ambiguous remappings", function () { + useFixtureProject("compilation-ambiguous-remappings"); + useEnvironment(); + + it("should throw an error", async function () { + await expectHardhatErrorAsync( + () => this.env.run("compile"), + ERRORS.RESOLVER.AMBIGUOUS_SOURCE_NAMES, + /Two different source names \('\w+\/Foo.sol' and '\w+\/Foo.sol'\) resolve to the same file/ + ); + }); + }); }); diff --git a/packages/hardhat-core/test/builtin-tasks/flatten.ts b/packages/hardhat-core/test/builtin-tasks/flatten.ts index 40e51343e5..75cd7dbbc3 100644 --- a/packages/hardhat-core/test/builtin-tasks/flatten.ts +++ b/packages/hardhat-core/test/builtin-tasks/flatten.ts @@ -1,8 +1,17 @@ import { assert } from "chai"; +import fs from "fs"; -import { TASK_FLATTEN_GET_FLATTENED_SOURCE } from "../../src/builtin-tasks/task-names"; +import sinon, { SinonSpy } from "sinon"; +import chalk from "chalk"; +import { + TASK_FLATTEN, + TASK_FLATTEN_GET_FLATTENED_SOURCE, + TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA, +} from "../../src/builtin-tasks/task-names"; +import { getPackageJson } from "../../src/internal/util/packageInfo"; import { useEnvironment } from "../helpers/environment"; import { useFixtureProject } from "../helpers/project"; +import { compileLiteral } from "../internal/hardhat-network/stack-traces/compilation"; function getContractsOrder(flattenedFiles: string) { const CONTRACT_REGEX = /\s*contract(\s+)(\w)/gm; @@ -11,6 +20,22 @@ function getContractsOrder(flattenedFiles: string) { return matches!.map((m: string) => m.replace("contract", "").trim()); } +async function getExpectedSol(fileName = "expected.sol") { + const expected = fs.readFileSync(fileName, "utf8"); + + const hardhatVersion = (await getPackageJson()).version; + return expected.replace("{HARDHAT_VERSION}", hardhatVersion).trim(); +} + +async function assertFlattenedFilesResult(flattenedFiles: string) { + // Check that the flattened file compiles correctly + await compileLiteral(flattenedFiles); + + const expected = await getExpectedSol(); + + assert.equal(flattenedFiles, expected); +} + describe("Flatten task", () => { useEnvironment(); @@ -27,7 +52,7 @@ describe("Flatten task", () => { }); describe("When has contracts", function () { - useFixtureProject("contracts-project"); + useFixtureProject("flatten-task/contracts-project"); it("should flatten files sorted correctly", async function () { const flattenedFiles = await this.env.run( @@ -38,7 +63,7 @@ describe("Flatten task", () => { }); describe("When has contracts with name clash", function () { - useFixtureProject("contracts-nameclash-project"); + useFixtureProject("flatten-task/contracts-nameclash-project"); it("should flatten files sorted correctly with repetition", async function () { const flattenedFiles = await this.env.run( @@ -49,7 +74,7 @@ describe("Flatten task", () => { }); describe("Flattening only some files", function () { - useFixtureProject("contracts-project"); + useFixtureProject("flatten-task/contracts-project"); it("Should accept a list of files, and only flatten those and their dependencies", async function () { const cFlattened = await this.env.run(TASK_FLATTEN_GET_FLATTENED_SOURCE, { @@ -76,7 +101,7 @@ describe("Flatten task", () => { }); describe("When project has multiline imports", function () { - useFixtureProject("multiline-import-project"); + useFixtureProject("flatten-task/multiline-import-project"); it("should not include multiline imports", async function () { const flattenedFiles = await this.env.run( @@ -105,4 +130,294 @@ describe("Flatten task", () => { } }); }); + + describe("SPDX licenses and pragma abicoder directives", () => { + describe("Flatten files that not contain SPDX licenses or pragma directives", () => { + useFixtureProject("flatten-task/contracts-no-spdx-no-pragma"); + + it("should successfully flatten and compile the files", async function () { + const [flattenedFiles, metadata] = await this.env.run( + TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA + ); + + await assertFlattenedFilesResult(flattenedFiles); + + assert.deepEqual(metadata, { + filesWithoutLicenses: ["contracts/A.sol", "contracts/B.sol"], + pragmaDirective: "", + filesWithoutPragmaDirectives: ["contracts/A.sol", "contracts/B.sol"], + filesWithDifferentPragmaDirectives: [], + }); + }); + }); + + describe("Flatten files that contain SPDX licenses", () => { + describe("Files contain one single license per file", () => { + describe("Files contain same licenses", () => { + useFixtureProject("flatten-task/contracts-spdx-same-licenses"); + + it("should successfully flatten and compile the files", async function () { + const [flattenedFiles, metadata] = await this.env.run( + TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA + ); + + await assertFlattenedFilesResult(flattenedFiles); + + assert.deepEqual(metadata, { + filesWithoutLicenses: [], + pragmaDirective: "", + filesWithoutPragmaDirectives: [ + "contracts/A.sol", + "contracts/B.sol", + ], + filesWithDifferentPragmaDirectives: [], + }); + }); + }); + + describe("Files contain different licenses", () => { + useFixtureProject("flatten-task/contracts-spdx-different-licenses"); + + it("should successfully flatten and compile the files", async function () { + const [flattenedFiles, metadata] = await this.env.run( + TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA + ); + + await assertFlattenedFilesResult(flattenedFiles); + + assert.deepEqual(metadata, { + filesWithoutLicenses: [], + pragmaDirective: "", + filesWithoutPragmaDirectives: [ + "contracts/A.sol", + "contracts/B.sol", + ], + filesWithDifferentPragmaDirectives: [], + }); + }); + }); + }); + + describe("Files contain multiple licenses", () => { + describe("Files contain multiple same licenses", () => { + useFixtureProject( + "flatten-task/contracts-spdx-same-multiple-licenses" + ); + + it("should successfully flatten and compile the files", async function () { + const [flattenedFiles, metadata] = await this.env.run( + TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA + ); + + await assertFlattenedFilesResult(flattenedFiles); + + assert.deepEqual(metadata, { + filesWithoutLicenses: [], + pragmaDirective: "", + filesWithoutPragmaDirectives: [ + "contracts/A.sol", + "contracts/B.sol", + ], + filesWithDifferentPragmaDirectives: [], + }); + }); + }); + + describe("Files contain multiple different licenses", () => { + useFixtureProject( + "flatten-task/contracts-spdx-different-multiple-licenses" + ); + + it("should successfully flatten and compile the files", async function () { + const [flattenedFiles, metadata] = await this.env.run( + TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA + ); + + await assertFlattenedFilesResult(flattenedFiles); + + assert.deepEqual(metadata, { + filesWithoutLicenses: [], + pragmaDirective: "", + filesWithoutPragmaDirectives: [ + "contracts/A.sol", + "contracts/B.sol", + "contracts/C.sol", + ], + filesWithDifferentPragmaDirectives: [], + }); + }); + }); + }); + }); + + describe("Flatten files that contain pragma abicoder directives", () => { + describe("Files contain one single pragma directive per file", () => { + describe("Files contain same pragma directive", () => { + useFixtureProject("flatten-task/contracts-pragma-same-directives"); + + it("should successfully flatten and compile the files", async function () { + const [flattenedFiles, metadata] = await this.env.run( + TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA + ); + + await assertFlattenedFilesResult(flattenedFiles); + + assert.deepEqual(metadata, { + filesWithoutLicenses: ["contracts/A.sol", "contracts/B.sol"], + pragmaDirective: "pragma abicoder v1", + filesWithoutPragmaDirectives: [], + filesWithDifferentPragmaDirectives: [], + }); + }); + }); + + describe("Files contain different pragma directives", () => { + useFixtureProject( + "flatten-task/contracts-pragma-different-directives" + ); + + it("should successfully flatten and compile the files", async function () { + const [flattenedFiles, metadata] = await this.env.run( + TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA + ); + + await assertFlattenedFilesResult(flattenedFiles); + + assert.deepEqual(metadata, { + filesWithoutLicenses: ["contracts/A.sol", "contracts/B.sol"], + pragmaDirective: "pragma experimental ABIEncoderV2", + filesWithoutPragmaDirectives: [], + filesWithDifferentPragmaDirectives: ["contracts/B.sol"], + }); + }); + }); + }); + + describe("Files contain multiple pragma directives", () => { + useFixtureProject("flatten-task/contracts-pragma-multiple-directives"); + + it("should successfully flatten and compile the files", async function () { + const [flattenedFiles, metadata] = await this.env.run( + TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA + ); + + await assertFlattenedFilesResult(flattenedFiles); + + assert.deepEqual(metadata, { + filesWithoutLicenses: ["contracts/A.sol", "contracts/B.sol"], + pragmaDirective: "pragma abicoder v2", + filesWithoutPragmaDirectives: [], + filesWithDifferentPragmaDirectives: ["contracts/A.sol"], + }); + }); + }); + }); + + describe("Files contains several SPDX licenses and pragma directives", () => { + useFixtureProject( + "flatten-task/contracts-spdx-licenses-and-pragma-directives" + ); + + it("should successfully flatten and compile the files", async function () { + const [flattenedFiles, metadata] = await this.env.run( + TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA + ); + + await assertFlattenedFilesResult(flattenedFiles); + + assert.deepEqual(metadata, { + filesWithoutLicenses: [], + pragmaDirective: "pragma abicoder v2", + filesWithoutPragmaDirectives: [], + filesWithDifferentPragmaDirectives: ["contracts/A.sol"], + }); + }); + }); + + describe("Check regex rules in files that contains several SPDX licenses and pragma directives", () => { + useFixtureProject( + "flatten-task/contracts-regex-spdx-licenses-and-pragma-directives" + ); + + it("should successfully flatten and compile the files", async function () { + const [flattenedFiles, metadata] = await this.env.run( + TASK_FLATTEN_GET_FLATTENED_SOURCE_AND_METADATA + ); + + await assertFlattenedFilesResult(flattenedFiles); + + assert.deepEqual(metadata, { + filesWithoutLicenses: [], + pragmaDirective: "pragma abicoder v2", + filesWithoutPragmaDirectives: [], + filesWithDifferentPragmaDirectives: ["contracts/B.sol"], + }); + }); + }); + }); + + describe("TASK_FLATTEN", () => { + let spyFunctionConsoleLog: SinonSpy; + let spyFunctionConsoleWarn: SinonSpy; + + beforeEach(() => { + spyFunctionConsoleWarn = sinon.stub(console, "warn"); + spyFunctionConsoleLog = sinon.stub(console, "log"); + }); + + afterEach(() => { + spyFunctionConsoleLog.restore(); + spyFunctionConsoleWarn.restore(); + }); + + useFixtureProject("flatten-task/contracts-task-flatten"); + + it("should console log the flattened files and the warnings about missing licenses and pragma directives", async function () { + await this.env.run(TASK_FLATTEN); + + const expectedOutput = await getExpectedSol(); + + assert(spyFunctionConsoleLog.calledWith(expectedOutput)); + + assert( + spyFunctionConsoleWarn.calledWith( + chalk.yellow( + `\nThe following file(s) do NOT specify SPDX licenses: contracts/A.sol, contracts/B.sol, contracts/C.sol` + ) + ) + ); + + assert( + spyFunctionConsoleWarn.calledWith( + chalk.yellow( + `\nPragma abicoder directives are defined in some files, but they are not defined in the following ones: contracts/A.sol, contracts/B.sol` + ) + ) + ); + + assert( + spyFunctionConsoleWarn.calledWith( + chalk.yellow( + `\nThe flattened file is using the pragma abicoder directive 'pragma abicoder v2' but these files have a different pragma abicoder directive: contracts/C.sol` + ) + ) + ); + }); + + it("should not console warn because licenses and pragma directives are specified", async function () { + await this.env.run(TASK_FLATTEN, { + files: ["contracts/D.sol"], + }); + + assert(!spyFunctionConsoleWarn.called); + }); + + describe("No contracts to flatten", () => { + useFixtureProject("flatten-task/no-contracts"); + + it("should not throw an error when metadata is null", async function () { + await this.env.run(TASK_FLATTEN); + }); + }); + }); }); diff --git a/packages/hardhat-core/test/console/console.ts b/packages/hardhat-core/test/console/console.ts new file mode 100644 index 0000000000..0369f4ae41 --- /dev/null +++ b/packages/hardhat-core/test/console/console.ts @@ -0,0 +1,13 @@ +import { useEnvironment } from "../helpers/environment"; +import { useFixtureProject } from "../helpers/project"; + +describe("console.sol", function () { + useFixtureProject("memory-safe-console"); + useEnvironment(); + + it("should be memory safe", async function () { + // the memory-safe-console fixture project won't compile + // if console.sol is not memory-safe + await this.env.run("compile"); + }); +}); diff --git a/packages/hardhat-core/test/fixture-debug-traces/elongatedMemoryRegressionTestTrace.ts b/packages/hardhat-core/test/fixture-debug-traces/elongatedMemoryRegressionTestTrace.ts new file mode 100644 index 0000000000..640f620deb --- /dev/null +++ b/packages/hardhat-core/test/fixture-debug-traces/elongatedMemoryRegressionTestTrace.ts @@ -0,0 +1,58 @@ +import { RpcDebugTraceOutput } from "../../src/internal/hardhat-network/provider/output"; + +export const trace: RpcDebugTraceOutput = { + gas: 21012, + failed: false, + returnValue: "", + structLogs: [ + { + pc: 0, + op: "PUSH0", + gas: 5979000, + gasCost: 2, + depth: 1, + stack: [], + memory: [], + storage: {}, + }, + { + pc: 1, + op: "PUSH0", + gas: 5978998, + gasCost: 2, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [], + storage: {}, + }, + { + pc: 2, + op: "MSTORE", + gas: 5978996, + gasCost: 6, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 3, + op: "PUSH0", + gas: 5978990, + gasCost: 2, + depth: 1, + stack: [], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + ], +}; diff --git a/packages/hardhat-core/test/fixture-debug-traces/traceCall/contractAGetMessage.ts b/packages/hardhat-core/test/fixture-debug-traces/traceCall/contractAGetMessage.ts new file mode 100644 index 0000000000..8c30becf67 --- /dev/null +++ b/packages/hardhat-core/test/fixture-debug-traces/traceCall/contractAGetMessage.ts @@ -0,0 +1,10109 @@ +import { GethTrace } from "../types"; + +// Trace generated using Geth 1.12.2 + +export const trace: GethTrace = { + gas: 24495, + failed: false, + returnValue: + "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001448656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + structLogs: [ + { + pc: 0, + op: "PUSH1", + gas: 49978936, + gasCost: 3, + depth: 1, + stack: [], + memory: [], + storage: {}, + }, + { + pc: 2, + op: "PUSH1", + gas: 49978933, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [], + storage: {}, + }, + { + pc: 4, + op: "MSTORE", + gas: 49978930, + gasCost: 12, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000040", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 5, + op: "CALLVALUE", + gas: 49978918, + gasCost: 2, + depth: 1, + stack: [], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 6, + op: "DUP1", + gas: 49978916, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 7, + op: "ISZERO", + gas: 49978913, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 8, + op: "PUSH2", + gas: 49978910, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 11, + op: "JUMPI", + gas: 49978907, + gasCost: 10, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000010", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 16, + op: "JUMPDEST", + gas: 49978897, + gasCost: 1, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 17, + op: "POP", + gas: 49978896, + gasCost: 2, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 18, + op: "PUSH1", + gas: 49978894, + gasCost: 3, + depth: 1, + stack: [], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 20, + op: "CALLDATASIZE", + gas: 49978891, + gasCost: 2, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 21, + op: "LT", + gas: 49978889, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 22, + op: "PUSH2", + gas: 49978886, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 25, + op: "JUMPI", + gas: 49978883, + gasCost: 10, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000041", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 26, + op: "PUSH1", + gas: 49978873, + gasCost: 3, + depth: 1, + stack: [], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 28, + op: "CALLDATALOAD", + gas: 49978870, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 29, + op: "PUSH1", + gas: 49978867, + gasCost: 3, + depth: 1, + stack: [ + "ce6d41de00000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 31, + op: "SHR", + gas: 49978864, + gasCost: 3, + depth: 1, + stack: [ + "ce6d41de00000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 32, + op: "DUP1", + gas: 49978861, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 33, + op: "PUSH4", + gas: 49978858, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "00000000000000000000000000000000000000000000000000000000ce6d41de", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 38, + op: "EQ", + gas: 49978855, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "00000000000000000000000000000000000000000000000000000000922af8a7", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 39, + op: "PUSH2", + gas: 49978852, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 42, + op: "JUMPI", + gas: 49978849, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000046", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 43, + op: "DUP1", + gas: 49978839, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 44, + op: "PUSH4", + gas: 49978836, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "00000000000000000000000000000000000000000000000000000000ce6d41de", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 49, + op: "EQ", + gas: 49978833, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "00000000000000000000000000000000000000000000000000000000ce6d41de", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 50, + op: "PUSH2", + gas: 49978830, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 53, + op: "JUMPI", + gas: 49978827, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000062", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 98, + op: "JUMPDEST", + gas: 49978817, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 99, + op: "PUSH2", + gas: 49978816, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 102, + op: "PUSH2", + gas: 49978813, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 105, + op: "JUMP", + gas: 49978810, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "00000000000000000000000000000000000000000000000000000000000000e5", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 229, + op: "JUMPDEST", + gas: 49978802, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 230, + op: "PUSH1", + gas: 49978801, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 232, + op: "PUSH1", + gas: 49978798, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 234, + op: "DUP1", + gas: 49978795, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 235, + op: "SLOAD", + gas: 49978792, + gasCost: 2100, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 236, + op: "PUSH2", + gas: 49976692, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 239, + op: "SWAP1", + gas: 49976689, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "00000000000000000000000000000000000000000000000000000000000000f4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 240, + op: "PUSH2", + gas: 49976686, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 243, + op: "JUMP", + gas: 49976683, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "00000000000000000000000000000000000000000000000000000000000003e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 992, + op: "JUMPDEST", + gas: 49976675, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 993, + op: "PUSH1", + gas: 49976674, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 995, + op: "PUSH1", + gas: 49976671, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 997, + op: "DUP3", + gas: 49976668, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000002", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 998, + op: "DIV", + gas: 49976665, + gasCost: 5, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000002", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 999, + op: "SWAP1", + gas: 49976660, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000000", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1000, + op: "POP", + gas: 49976657, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1001, + op: "PUSH1", + gas: 49976655, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1003, + op: "DUP3", + gas: 49976652, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1004, + op: "AND", + gas: 49976649, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000001", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1005, + op: "DUP1", + gas: 49976646, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1006, + op: "PUSH2", + gas: 49976643, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1009, + op: "JUMPI", + gas: 49976640, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000003f8", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1010, + op: "PUSH1", + gas: 49976630, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1012, + op: "DUP3", + gas: 49976627, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000007f", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1013, + op: "AND", + gas: 49976624, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000007f", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1014, + op: "SWAP2", + gas: 49976621, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1015, + op: "POP", + gas: 49976618, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1016, + op: "JUMPDEST", + gas: 49976616, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1017, + op: "PUSH1", + gas: 49976615, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1019, + op: "DUP3", + gas: 49976612, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1020, + op: "LT", + gas: 49976609, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1021, + op: "DUP2", + gas: 49976606, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1022, + op: "SUB", + gas: 49976603, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1023, + op: "PUSH2", + gas: 49976600, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1026, + op: "JUMPI", + gas: 49976597, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "000000000000000000000000000000000000000000000000000000000000040b", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1035, + op: "JUMPDEST", + gas: 49976587, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1036, + op: "POP", + gas: 49976586, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1037, + op: "SWAP2", + gas: 49976584, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1038, + op: "SWAP1", + gas: 49976581, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "00000000000000000000000000000000000000000000000000000000000000f4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1039, + op: "POP", + gas: 49976578, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000f4", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1040, + op: "JUMP", + gas: 49976576, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000f4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 244, + op: "JUMPDEST", + gas: 49976568, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 245, + op: "DUP1", + gas: 49976567, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 246, + op: "PUSH1", + gas: 49976564, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 248, + op: "ADD", + gas: 49976561, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000014", + "000000000000000000000000000000000000000000000000000000000000001f", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 249, + op: "PUSH1", + gas: 49976558, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000033", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 251, + op: "DUP1", + gas: 49976555, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000033", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 252, + op: "SWAP2", + gas: 49976552, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000033", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 253, + op: "DIV", + gas: 49976549, + gasCost: 5, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000033", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 254, + op: "MUL", + gas: 49976544, + gasCost: 5, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 255, + op: "PUSH1", + gas: 49976539, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 257, + op: "ADD", + gas: 49976536, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 258, + op: "PUSH1", + gas: 49976533, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000040", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 260, + op: "MLOAD", + gas: 49976530, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000040", + "0000000000000000000000000000000000000000000000000000000000000040", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 261, + op: "SWAP1", + gas: 49976527, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000040", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 262, + op: "DUP2", + gas: 49976524, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000040", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 263, + op: "ADD", + gas: 49976521, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000040", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 264, + op: "PUSH1", + gas: 49976518, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 266, + op: "MSTORE", + gas: 49976515, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000040", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 267, + op: "DUP1", + gas: 49976512, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 268, + op: "SWAP3", + gas: 49976509, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 269, + op: "SWAP2", + gas: 49976506, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 270, + op: "SWAP1", + gas: 49976503, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 271, + op: "DUP2", + gas: 49976500, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 272, + op: "DUP2", + gas: 49976497, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 273, + op: "MSTORE", + gas: 49976494, + gasCost: 9, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 274, + op: "PUSH1", + gas: 49976485, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 276, + op: "ADD", + gas: 49976482, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 277, + op: "DUP3", + gas: 49976479, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 278, + op: "DUP1", + gas: 49976476, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 279, + op: "SLOAD", + gas: 49976473, + gasCost: 100, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 280, + op: "PUSH2", + gas: 49976373, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 283, + op: "SWAP1", + gas: 49976370, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000120", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 284, + op: "PUSH2", + gas: 49976367, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 287, + op: "JUMP", + gas: 49976364, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "00000000000000000000000000000000000000000000000000000000000003e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 992, + op: "JUMPDEST", + gas: 49976356, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 993, + op: "PUSH1", + gas: 49976355, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 995, + op: "PUSH1", + gas: 49976352, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 997, + op: "DUP3", + gas: 49976349, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000002", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 998, + op: "DIV", + gas: 49976346, + gasCost: 5, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000002", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 999, + op: "SWAP1", + gas: 49976341, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000000", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1000, + op: "POP", + gas: 49976338, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1001, + op: "PUSH1", + gas: 49976336, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1003, + op: "DUP3", + gas: 49976333, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1004, + op: "AND", + gas: 49976330, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000001", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1005, + op: "DUP1", + gas: 49976327, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1006, + op: "PUSH2", + gas: 49976324, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1009, + op: "JUMPI", + gas: 49976321, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000003f8", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1010, + op: "PUSH1", + gas: 49976311, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1012, + op: "DUP3", + gas: 49976308, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000007f", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1013, + op: "AND", + gas: 49976305, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000007f", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1014, + op: "SWAP2", + gas: 49976302, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1015, + op: "POP", + gas: 49976299, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "2432b6363790333937b69031b7b73a3930b1ba10800000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1016, + op: "JUMPDEST", + gas: 49976297, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1017, + op: "PUSH1", + gas: 49976296, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1019, + op: "DUP3", + gas: 49976293, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1020, + op: "LT", + gas: 49976290, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1021, + op: "DUP2", + gas: 49976287, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1022, + op: "SUB", + gas: 49976284, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1023, + op: "PUSH2", + gas: 49976281, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1026, + op: "JUMPI", + gas: 49976278, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "000000000000000000000000000000000000000000000000000000000000040b", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1035, + op: "JUMPDEST", + gas: 49976268, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1036, + op: "POP", + gas: 49976267, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1037, + op: "SWAP2", + gas: 49976265, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1038, + op: "SWAP1", + gas: 49976262, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + "0000000000000000000000000000000000000000000000000000000000000120", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1039, + op: "POP", + gas: 49976259, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000120", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 1040, + op: "JUMP", + gas: 49976257, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000120", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 288, + op: "JUMPDEST", + gas: 49976249, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 289, + op: "DUP1", + gas: 49976248, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 290, + op: "ISZERO", + gas: 49976245, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 291, + op: "PUSH2", + gas: 49976242, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 294, + op: "JUMPI", + gas: 49976239, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000016d", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 295, + op: "DUP1", + gas: 49976229, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 296, + op: "PUSH1", + gas: 49976226, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 298, + op: "LT", + gas: 49976223, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000014", + "000000000000000000000000000000000000000000000000000000000000001f", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 299, + op: "PUSH2", + gas: 49976220, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 302, + op: "JUMPI", + gas: 49976217, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000142", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 303, + op: "PUSH2", + gas: 49976207, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 306, + op: "DUP1", + gas: 49976204, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 307, + op: "DUP4", + gas: 49976201, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000100", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 308, + op: "SLOAD", + gas: 49976198, + gasCost: 100, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 309, + op: "DIV", + gas: 49976098, + gasCost: 5, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000100", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 310, + op: "MUL", + gas: 49976093, + gasCost: 5, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "0048656c6c6f2066726f6d20636f6e7472616374210000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 311, + op: "DUP4", + gas: 49976088, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 312, + op: "MSTORE", + gas: 49976085, + gasCost: 6, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 313, + op: "SWAP2", + gas: 49976079, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 314, + op: "PUSH1", + gas: 49976076, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 316, + op: "ADD", + gas: 49976073, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 317, + op: "SWAP2", + gas: 49976070, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 318, + op: "PUSH2", + gas: 49976067, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 321, + op: "JUMP", + gas: 49976064, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "000000000000000000000000000000000000000000000000000000000000016d", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 365, + op: "JUMPDEST", + gas: 49976056, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 366, + op: "POP", + gas: 49976055, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 367, + op: "POP", + gas: 49976053, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 368, + op: "POP", + gas: 49976051, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 369, + op: "POP", + gas: 49976049, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 370, + op: "POP", + gas: 49976047, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 371, + op: "SWAP1", + gas: 49976045, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 372, + op: "POP", + gas: 49976042, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000060", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 373, + op: "SWAP1", + gas: 49976040, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "000000000000000000000000000000000000000000000000000000000000006a", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 374, + op: "JUMP", + gas: 49976037, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000080", + "000000000000000000000000000000000000000000000000000000000000006a", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 106, + op: "JUMPDEST", + gas: 49976029, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 107, + op: "PUSH1", + gas: 49976028, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 109, + op: "MLOAD", + gas: 49976025, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000040", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 110, + op: "PUSH2", + gas: 49976022, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 113, + op: "SWAP2", + gas: 49976019, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000077", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 114, + op: "SWAP1", + gas: 49976016, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 115, + op: "PUSH2", + gas: 49976013, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 118, + op: "JUMP", + gas: 49976010, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000002fd", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 765, + op: "JUMPDEST", + gas: 49976002, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 766, + op: "PUSH1", + gas: 49976001, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 768, + op: "PUSH1", + gas: 49975998, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 770, + op: "DUP3", + gas: 49975995, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 771, + op: "ADD", + gas: 49975992, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 772, + op: "SWAP1", + gas: 49975989, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 773, + op: "POP", + gas: 49975986, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 774, + op: "DUP2", + gas: 49975984, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 775, + op: "DUP2", + gas: 49975981, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 776, + op: "SUB", + gas: 49975978, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 777, + op: "PUSH1", + gas: 49975975, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 779, + op: "DUP4", + gas: 49975972, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 780, + op: "ADD", + gas: 49975969, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 781, + op: "MSTORE", + gas: 49975966, + gasCost: 6, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000020", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 782, + op: "PUSH2", + gas: 49975960, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 785, + op: "DUP2", + gas: 49975957, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 786, + op: "DUP5", + gas: 49975954, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 787, + op: "PUSH2", + gas: 49975951, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 790, + op: "JUMP", + gas: 49975948, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000002c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 708, + op: "JUMPDEST", + gas: 49975940, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 709, + op: "PUSH1", + gas: 49975939, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 711, + op: "PUSH2", + gas: 49975936, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 714, + op: "DUP3", + gas: 49975933, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002cf", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 715, + op: "PUSH2", + gas: 49975930, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002cf", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 718, + op: "JUMP", + gas: 49975927, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002cf", + "0000000000000000000000000000000000000000000000000000000000000080", + "000000000000000000000000000000000000000000000000000000000000026d", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 621, + op: "JUMPDEST", + gas: 49975919, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002cf", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 622, + op: "PUSH1", + gas: 49975918, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002cf", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 624, + op: "DUP2", + gas: 49975915, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002cf", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 625, + op: "MLOAD", + gas: 49975912, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002cf", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 626, + op: "SWAP1", + gas: 49975909, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002cf", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 627, + op: "POP", + gas: 49975906, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002cf", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 628, + op: "SWAP2", + gas: 49975904, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002cf", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 629, + op: "SWAP1", + gas: 49975901, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000002cf", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 630, + op: "POP", + gas: 49975898, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002cf", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 631, + op: "JUMP", + gas: 49975896, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002cf", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 719, + op: "JUMPDEST", + gas: 49975888, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 720, + op: "PUSH2", + gas: 49975887, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 723, + op: "DUP2", + gas: 49975884, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 724, + op: "DUP6", + gas: 49975881, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 725, + op: "PUSH2", + gas: 49975878, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 728, + op: "JUMP", + gas: 49975875, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000278", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 632, + op: "JUMPDEST", + gas: 49975867, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 633, + op: "PUSH1", + gas: 49975866, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 635, + op: "DUP3", + gas: 49975863, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 636, + op: "DUP3", + gas: 49975860, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 637, + op: "MSTORE", + gas: 49975857, + gasCost: 6, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 638, + op: "PUSH1", + gas: 49975851, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 640, + op: "DUP3", + gas: 49975848, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 641, + op: "ADD", + gas: 49975845, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 642, + op: "SWAP1", + gas: 49975842, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000100", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 643, + op: "POP", + gas: 49975839, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 644, + op: "SWAP3", + gas: 49975837, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002d9", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000100", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 645, + op: "SWAP2", + gas: 49975834, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + "00000000000000000000000000000000000000000000000000000000000002d9", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 646, + op: "POP", + gas: 49975831, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000002d9", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 647, + op: "POP", + gas: 49975829, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000002d9", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 648, + op: "JUMP", + gas: 49975827, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000002d9", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 729, + op: "JUMPDEST", + gas: 49975819, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 730, + op: "SWAP4", + gas: 49975818, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 731, + op: "POP", + gas: 49975815, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 732, + op: "PUSH2", + gas: 49975813, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 735, + op: "DUP2", + gas: 49975810, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 736, + op: "DUP6", + gas: 49975807, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 737, + op: "PUSH1", + gas: 49975804, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 739, + op: "DUP7", + gas: 49975801, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 740, + op: "ADD", + gas: 49975798, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 741, + op: "PUSH2", + gas: 49975795, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 744, + op: "JUMP", + gas: 49975792, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000289", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 649, + op: "JUMPDEST", + gas: 49975784, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 650, + op: "PUSH1", + gas: 49975783, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 652, + op: "JUMPDEST", + gas: 49975780, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 653, + op: "DUP4", + gas: 49975779, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 654, + op: "DUP2", + gas: 49975776, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 655, + op: "LT", + gas: 49975773, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 656, + op: "ISZERO", + gas: 49975770, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 657, + op: "PUSH2", + gas: 49975767, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 660, + op: "JUMPI", + gas: 49975764, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000002a7", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 661, + op: "DUP1", + gas: 49975754, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 662, + op: "DUP3", + gas: 49975751, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 663, + op: "ADD", + gas: 49975748, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 664, + op: "MLOAD", + gas: 49975745, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 665, + op: "DUP2", + gas: 49975742, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 666, + op: "DUP5", + gas: 49975739, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 667, + op: "ADD", + gas: 49975736, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000100", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 668, + op: "MSTORE", + gas: 49975733, + gasCost: 6, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000100", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 669, + op: "PUSH1", + gas: 49975727, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 671, + op: "DUP2", + gas: 49975724, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 672, + op: "ADD", + gas: 49975721, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 673, + op: "SWAP1", + gas: 49975718, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 674, + op: "POP", + gas: 49975715, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 675, + op: "PUSH2", + gas: 49975713, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 678, + op: "JUMP", + gas: 49975710, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + "000000000000000000000000000000000000000000000000000000000000028c", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 652, + op: "JUMPDEST", + gas: 49975702, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 653, + op: "DUP4", + gas: 49975701, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 654, + op: "DUP2", + gas: 49975698, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 655, + op: "LT", + gas: 49975695, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 656, + op: "ISZERO", + gas: 49975692, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 657, + op: "PUSH2", + gas: 49975689, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 660, + op: "JUMPI", + gas: 49975686, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000002a7", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 679, + op: "JUMPDEST", + gas: 49975676, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 680, + op: "PUSH1", + gas: 49975675, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 682, + op: "DUP5", + gas: 49975672, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 683, + op: "DUP5", + gas: 49975669, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 684, + op: "ADD", + gas: 49975666, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 685, + op: "MSTORE", + gas: 49975663, + gasCost: 6, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000114", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 686, + op: "POP", + gas: 49975657, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 687, + op: "POP", + gas: 49975655, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + "00000000000000000000000000000000000000000000000000000000000000a0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 688, + op: "POP", + gas: 49975653, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000100", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 689, + op: "POP", + gas: 49975651, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 690, + op: "JUMP", + gas: 49975649, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002e9", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 745, + op: "JUMPDEST", + gas: 49975641, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 746, + op: "PUSH2", + gas: 49975640, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 749, + op: "DUP2", + gas: 49975637, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 750, + op: "PUSH2", + gas: 49975634, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 753, + op: "JUMP", + gas: 49975631, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002b3", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 691, + op: "JUMPDEST", + gas: 49975623, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 692, + op: "PUSH1", + gas: 49975622, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 694, + op: "PUSH1", + gas: 49975619, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 696, + op: "NOT", + gas: 49975616, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000001f", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 697, + op: "PUSH1", + gas: 49975613, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 699, + op: "DUP4", + gas: 49975610, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0", + "000000000000000000000000000000000000000000000000000000000000001f", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 700, + op: "ADD", + gas: 49975607, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0", + "000000000000000000000000000000000000000000000000000000000000001f", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 701, + op: "AND", + gas: 49975604, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0", + "0000000000000000000000000000000000000000000000000000000000000033", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 702, + op: "SWAP1", + gas: 49975601, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 703, + op: "POP", + gas: 49975598, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 704, + op: "SWAP2", + gas: 49975596, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 705, + op: "SWAP1", + gas: 49975593, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "00000000000000000000000000000000000000000000000000000000000002f2", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 706, + op: "POP", + gas: 49975590, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000020", + "00000000000000000000000000000000000000000000000000000000000002f2", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 707, + op: "JUMP", + gas: 49975588, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000020", + "00000000000000000000000000000000000000000000000000000000000002f2", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 754, + op: "JUMPDEST", + gas: 49975580, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 755, + op: "DUP5", + gas: 49975579, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 756, + op: "ADD", + gas: 49975576, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000100", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 757, + op: "SWAP2", + gas: 49975573, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000120", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 758, + op: "POP", + gas: 49975570, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000120", + "0000000000000000000000000000000000000000000000000000000000000014", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 759, + op: "POP", + gas: 49975568, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000120", + "0000000000000000000000000000000000000000000000000000000000000014", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 760, + op: "SWAP3", + gas: 49975566, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000120", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 761, + op: "SWAP2", + gas: 49975563, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000120", + "0000000000000000000000000000000000000000000000000000000000000100", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000317", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 762, + op: "POP", + gas: 49975560, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000120", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000100", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 763, + op: "POP", + gas: 49975558, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000120", + "0000000000000000000000000000000000000000000000000000000000000317", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 764, + op: "JUMP", + gas: 49975556, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000120", + "0000000000000000000000000000000000000000000000000000000000000317", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 791, + op: "JUMPDEST", + gas: 49975548, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000120", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 792, + op: "SWAP1", + gas: 49975547, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000e0", + "0000000000000000000000000000000000000000000000000000000000000120", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 793, + op: "POP", + gas: 49975544, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000120", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 794, + op: "SWAP3", + gas: 49975542, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000077", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000120", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 795, + op: "SWAP2", + gas: 49975539, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000120", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000077", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 796, + op: "POP", + gas: 49975536, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000120", + "0000000000000000000000000000000000000000000000000000000000000077", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 797, + op: "POP", + gas: 49975534, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000120", + "0000000000000000000000000000000000000000000000000000000000000077", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 798, + op: "JUMP", + gas: 49975532, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000120", + "0000000000000000000000000000000000000000000000000000000000000077", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 119, + op: "JUMPDEST", + gas: 49975524, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000120", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 120, + op: "PUSH1", + gas: 49975523, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000120", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 122, + op: "MLOAD", + gas: 49975520, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000120", + "0000000000000000000000000000000000000000000000000000000000000040", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 123, + op: "DUP1", + gas: 49975517, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000120", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 124, + op: "SWAP2", + gas: 49975514, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000120", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 125, + op: "SUB", + gas: 49975511, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "00000000000000000000000000000000000000000000000000000000000000c0", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000120", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 126, + op: "SWAP1", + gas: 49975508, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000060", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + { + pc: 127, + op: "RETURN", + gas: 49975505, + gasCost: 0, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000ce6d41de", + "0000000000000000000000000000000000000000000000000000000000000060", + "00000000000000000000000000000000000000000000000000000000000000c0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c0", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000014", + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: { + "0000000000000000000000000000000000000000000000000000000000000000": + "48656c6c6f2066726f6d20636f6e747261637421000000000000000000000028", + }, + }, + ], +}; diff --git a/packages/hardhat-core/test/fixture-debug-traces/traceCall/contractAGetMessageDebugConfig.ts b/packages/hardhat-core/test/fixture-debug-traces/traceCall/contractAGetMessageDebugConfig.ts new file mode 100644 index 0000000000..b34c9d2fa1 --- /dev/null +++ b/packages/hardhat-core/test/fixture-debug-traces/traceCall/contractAGetMessageDebugConfig.ts @@ -0,0 +1,2371 @@ +import { GethTrace } from "../types"; + +// Trace generated using Geth 1.12.2 + +export const trace: GethTrace = { + gas: 24495, + failed: false, + returnValue: + "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001448656c6c6f2066726f6d20636f6e747261637421000000000000000000000000", + structLogs: [ + { + pc: 0, + op: "PUSH1", + gas: 49978936, + gasCost: 3, + depth: 1, + }, + { + pc: 2, + op: "PUSH1", + gas: 49978933, + gasCost: 3, + depth: 1, + }, + { + pc: 4, + op: "MSTORE", + gas: 49978930, + gasCost: 12, + depth: 1, + }, + { + pc: 5, + op: "CALLVALUE", + gas: 49978918, + gasCost: 2, + depth: 1, + }, + { + pc: 6, + op: "DUP1", + gas: 49978916, + gasCost: 3, + depth: 1, + }, + { + pc: 7, + op: "ISZERO", + gas: 49978913, + gasCost: 3, + depth: 1, + }, + { + pc: 8, + op: "PUSH2", + gas: 49978910, + gasCost: 3, + depth: 1, + }, + { + pc: 11, + op: "JUMPI", + gas: 49978907, + gasCost: 10, + depth: 1, + }, + { + pc: 16, + op: "JUMPDEST", + gas: 49978897, + gasCost: 1, + depth: 1, + }, + { + pc: 17, + op: "POP", + gas: 49978896, + gasCost: 2, + depth: 1, + }, + { + pc: 18, + op: "PUSH1", + gas: 49978894, + gasCost: 3, + depth: 1, + }, + { + pc: 20, + op: "CALLDATASIZE", + gas: 49978891, + gasCost: 2, + depth: 1, + }, + { + pc: 21, + op: "LT", + gas: 49978889, + gasCost: 3, + depth: 1, + }, + { + pc: 22, + op: "PUSH2", + gas: 49978886, + gasCost: 3, + depth: 1, + }, + { + pc: 25, + op: "JUMPI", + gas: 49978883, + gasCost: 10, + depth: 1, + }, + { + pc: 26, + op: "PUSH1", + gas: 49978873, + gasCost: 3, + depth: 1, + }, + { + pc: 28, + op: "CALLDATALOAD", + gas: 49978870, + gasCost: 3, + depth: 1, + }, + { + pc: 29, + op: "PUSH1", + gas: 49978867, + gasCost: 3, + depth: 1, + }, + { + pc: 31, + op: "SHR", + gas: 49978864, + gasCost: 3, + depth: 1, + }, + { + pc: 32, + op: "DUP1", + gas: 49978861, + gasCost: 3, + depth: 1, + }, + { + pc: 33, + op: "PUSH4", + gas: 49978858, + gasCost: 3, + depth: 1, + }, + { + pc: 38, + op: "EQ", + gas: 49978855, + gasCost: 3, + depth: 1, + }, + { + pc: 39, + op: "PUSH2", + gas: 49978852, + gasCost: 3, + depth: 1, + }, + { + pc: 42, + op: "JUMPI", + gas: 49978849, + gasCost: 10, + depth: 1, + }, + { + pc: 43, + op: "DUP1", + gas: 49978839, + gasCost: 3, + depth: 1, + }, + { + pc: 44, + op: "PUSH4", + gas: 49978836, + gasCost: 3, + depth: 1, + }, + { + pc: 49, + op: "EQ", + gas: 49978833, + gasCost: 3, + depth: 1, + }, + { + pc: 50, + op: "PUSH2", + gas: 49978830, + gasCost: 3, + depth: 1, + }, + { + pc: 53, + op: "JUMPI", + gas: 49978827, + gasCost: 10, + depth: 1, + }, + { + pc: 98, + op: "JUMPDEST", + gas: 49978817, + gasCost: 1, + depth: 1, + }, + { + pc: 99, + op: "PUSH2", + gas: 49978816, + gasCost: 3, + depth: 1, + }, + { + pc: 102, + op: "PUSH2", + gas: 49978813, + gasCost: 3, + depth: 1, + }, + { + pc: 105, + op: "JUMP", + gas: 49978810, + gasCost: 8, + depth: 1, + }, + { + pc: 229, + op: "JUMPDEST", + gas: 49978802, + gasCost: 1, + depth: 1, + }, + { + pc: 230, + op: "PUSH1", + gas: 49978801, + gasCost: 3, + depth: 1, + }, + { + pc: 232, + op: "PUSH1", + gas: 49978798, + gasCost: 3, + depth: 1, + }, + { + pc: 234, + op: "DUP1", + gas: 49978795, + gasCost: 3, + depth: 1, + }, + { + pc: 235, + op: "SLOAD", + gas: 49978792, + gasCost: 2100, + depth: 1, + }, + { + pc: 236, + op: "PUSH2", + gas: 49976692, + gasCost: 3, + depth: 1, + }, + { + pc: 239, + op: "SWAP1", + gas: 49976689, + gasCost: 3, + depth: 1, + }, + { + pc: 240, + op: "PUSH2", + gas: 49976686, + gasCost: 3, + depth: 1, + }, + { + pc: 243, + op: "JUMP", + gas: 49976683, + gasCost: 8, + depth: 1, + }, + { + pc: 992, + op: "JUMPDEST", + gas: 49976675, + gasCost: 1, + depth: 1, + }, + { + pc: 993, + op: "PUSH1", + gas: 49976674, + gasCost: 3, + depth: 1, + }, + { + pc: 995, + op: "PUSH1", + gas: 49976671, + gasCost: 3, + depth: 1, + }, + { + pc: 997, + op: "DUP3", + gas: 49976668, + gasCost: 3, + depth: 1, + }, + { + pc: 998, + op: "DIV", + gas: 49976665, + gasCost: 5, + depth: 1, + }, + { + pc: 999, + op: "SWAP1", + gas: 49976660, + gasCost: 3, + depth: 1, + }, + { + pc: 1000, + op: "POP", + gas: 49976657, + gasCost: 2, + depth: 1, + }, + { + pc: 1001, + op: "PUSH1", + gas: 49976655, + gasCost: 3, + depth: 1, + }, + { + pc: 1003, + op: "DUP3", + gas: 49976652, + gasCost: 3, + depth: 1, + }, + { + pc: 1004, + op: "AND", + gas: 49976649, + gasCost: 3, + depth: 1, + }, + { + pc: 1005, + op: "DUP1", + gas: 49976646, + gasCost: 3, + depth: 1, + }, + { + pc: 1006, + op: "PUSH2", + gas: 49976643, + gasCost: 3, + depth: 1, + }, + { + pc: 1009, + op: "JUMPI", + gas: 49976640, + gasCost: 10, + depth: 1, + }, + { + pc: 1010, + op: "PUSH1", + gas: 49976630, + gasCost: 3, + depth: 1, + }, + { + pc: 1012, + op: "DUP3", + gas: 49976627, + gasCost: 3, + depth: 1, + }, + { + pc: 1013, + op: "AND", + gas: 49976624, + gasCost: 3, + depth: 1, + }, + { + pc: 1014, + op: "SWAP2", + gas: 49976621, + gasCost: 3, + depth: 1, + }, + { + pc: 1015, + op: "POP", + gas: 49976618, + gasCost: 2, + depth: 1, + }, + { + pc: 1016, + op: "JUMPDEST", + gas: 49976616, + gasCost: 1, + depth: 1, + }, + { + pc: 1017, + op: "PUSH1", + gas: 49976615, + gasCost: 3, + depth: 1, + }, + { + pc: 1019, + op: "DUP3", + gas: 49976612, + gasCost: 3, + depth: 1, + }, + { + pc: 1020, + op: "LT", + gas: 49976609, + gasCost: 3, + depth: 1, + }, + { + pc: 1021, + op: "DUP2", + gas: 49976606, + gasCost: 3, + depth: 1, + }, + { + pc: 1022, + op: "SUB", + gas: 49976603, + gasCost: 3, + depth: 1, + }, + { + pc: 1023, + op: "PUSH2", + gas: 49976600, + gasCost: 3, + depth: 1, + }, + { + pc: 1026, + op: "JUMPI", + gas: 49976597, + gasCost: 10, + depth: 1, + }, + { + pc: 1035, + op: "JUMPDEST", + gas: 49976587, + gasCost: 1, + depth: 1, + }, + { + pc: 1036, + op: "POP", + gas: 49976586, + gasCost: 2, + depth: 1, + }, + { + pc: 1037, + op: "SWAP2", + gas: 49976584, + gasCost: 3, + depth: 1, + }, + { + pc: 1038, + op: "SWAP1", + gas: 49976581, + gasCost: 3, + depth: 1, + }, + { + pc: 1039, + op: "POP", + gas: 49976578, + gasCost: 2, + depth: 1, + }, + { + pc: 1040, + op: "JUMP", + gas: 49976576, + gasCost: 8, + depth: 1, + }, + { + pc: 244, + op: "JUMPDEST", + gas: 49976568, + gasCost: 1, + depth: 1, + }, + { + pc: 245, + op: "DUP1", + gas: 49976567, + gasCost: 3, + depth: 1, + }, + { + pc: 246, + op: "PUSH1", + gas: 49976564, + gasCost: 3, + depth: 1, + }, + { + pc: 248, + op: "ADD", + gas: 49976561, + gasCost: 3, + depth: 1, + }, + { + pc: 249, + op: "PUSH1", + gas: 49976558, + gasCost: 3, + depth: 1, + }, + { + pc: 251, + op: "DUP1", + gas: 49976555, + gasCost: 3, + depth: 1, + }, + { + pc: 252, + op: "SWAP2", + gas: 49976552, + gasCost: 3, + depth: 1, + }, + { + pc: 253, + op: "DIV", + gas: 49976549, + gasCost: 5, + depth: 1, + }, + { + pc: 254, + op: "MUL", + gas: 49976544, + gasCost: 5, + depth: 1, + }, + { + pc: 255, + op: "PUSH1", + gas: 49976539, + gasCost: 3, + depth: 1, + }, + { + pc: 257, + op: "ADD", + gas: 49976536, + gasCost: 3, + depth: 1, + }, + { + pc: 258, + op: "PUSH1", + gas: 49976533, + gasCost: 3, + depth: 1, + }, + { + pc: 260, + op: "MLOAD", + gas: 49976530, + gasCost: 3, + depth: 1, + }, + { + pc: 261, + op: "SWAP1", + gas: 49976527, + gasCost: 3, + depth: 1, + }, + { + pc: 262, + op: "DUP2", + gas: 49976524, + gasCost: 3, + depth: 1, + }, + { + pc: 263, + op: "ADD", + gas: 49976521, + gasCost: 3, + depth: 1, + }, + { + pc: 264, + op: "PUSH1", + gas: 49976518, + gasCost: 3, + depth: 1, + }, + { + pc: 266, + op: "MSTORE", + gas: 49976515, + gasCost: 3, + depth: 1, + }, + { + pc: 267, + op: "DUP1", + gas: 49976512, + gasCost: 3, + depth: 1, + }, + { + pc: 268, + op: "SWAP3", + gas: 49976509, + gasCost: 3, + depth: 1, + }, + { + pc: 269, + op: "SWAP2", + gas: 49976506, + gasCost: 3, + depth: 1, + }, + { + pc: 270, + op: "SWAP1", + gas: 49976503, + gasCost: 3, + depth: 1, + }, + { + pc: 271, + op: "DUP2", + gas: 49976500, + gasCost: 3, + depth: 1, + }, + { + pc: 272, + op: "DUP2", + gas: 49976497, + gasCost: 3, + depth: 1, + }, + { + pc: 273, + op: "MSTORE", + gas: 49976494, + gasCost: 9, + depth: 1, + }, + { + pc: 274, + op: "PUSH1", + gas: 49976485, + gasCost: 3, + depth: 1, + }, + { + pc: 276, + op: "ADD", + gas: 49976482, + gasCost: 3, + depth: 1, + }, + { + pc: 277, + op: "DUP3", + gas: 49976479, + gasCost: 3, + depth: 1, + }, + { + pc: 278, + op: "DUP1", + gas: 49976476, + gasCost: 3, + depth: 1, + }, + { + pc: 279, + op: "SLOAD", + gas: 49976473, + gasCost: 100, + depth: 1, + }, + { + pc: 280, + op: "PUSH2", + gas: 49976373, + gasCost: 3, + depth: 1, + }, + { + pc: 283, + op: "SWAP1", + gas: 49976370, + gasCost: 3, + depth: 1, + }, + { + pc: 284, + op: "PUSH2", + gas: 49976367, + gasCost: 3, + depth: 1, + }, + { + pc: 287, + op: "JUMP", + gas: 49976364, + gasCost: 8, + depth: 1, + }, + { + pc: 992, + op: "JUMPDEST", + gas: 49976356, + gasCost: 1, + depth: 1, + }, + { + pc: 993, + op: "PUSH1", + gas: 49976355, + gasCost: 3, + depth: 1, + }, + { + pc: 995, + op: "PUSH1", + gas: 49976352, + gasCost: 3, + depth: 1, + }, + { + pc: 997, + op: "DUP3", + gas: 49976349, + gasCost: 3, + depth: 1, + }, + { + pc: 998, + op: "DIV", + gas: 49976346, + gasCost: 5, + depth: 1, + }, + { + pc: 999, + op: "SWAP1", + gas: 49976341, + gasCost: 3, + depth: 1, + }, + { + pc: 1000, + op: "POP", + gas: 49976338, + gasCost: 2, + depth: 1, + }, + { + pc: 1001, + op: "PUSH1", + gas: 49976336, + gasCost: 3, + depth: 1, + }, + { + pc: 1003, + op: "DUP3", + gas: 49976333, + gasCost: 3, + depth: 1, + }, + { + pc: 1004, + op: "AND", + gas: 49976330, + gasCost: 3, + depth: 1, + }, + { + pc: 1005, + op: "DUP1", + gas: 49976327, + gasCost: 3, + depth: 1, + }, + { + pc: 1006, + op: "PUSH2", + gas: 49976324, + gasCost: 3, + depth: 1, + }, + { + pc: 1009, + op: "JUMPI", + gas: 49976321, + gasCost: 10, + depth: 1, + }, + { + pc: 1010, + op: "PUSH1", + gas: 49976311, + gasCost: 3, + depth: 1, + }, + { + pc: 1012, + op: "DUP3", + gas: 49976308, + gasCost: 3, + depth: 1, + }, + { + pc: 1013, + op: "AND", + gas: 49976305, + gasCost: 3, + depth: 1, + }, + { + pc: 1014, + op: "SWAP2", + gas: 49976302, + gasCost: 3, + depth: 1, + }, + { + pc: 1015, + op: "POP", + gas: 49976299, + gasCost: 2, + depth: 1, + }, + { + pc: 1016, + op: "JUMPDEST", + gas: 49976297, + gasCost: 1, + depth: 1, + }, + { + pc: 1017, + op: "PUSH1", + gas: 49976296, + gasCost: 3, + depth: 1, + }, + { + pc: 1019, + op: "DUP3", + gas: 49976293, + gasCost: 3, + depth: 1, + }, + { + pc: 1020, + op: "LT", + gas: 49976290, + gasCost: 3, + depth: 1, + }, + { + pc: 1021, + op: "DUP2", + gas: 49976287, + gasCost: 3, + depth: 1, + }, + { + pc: 1022, + op: "SUB", + gas: 49976284, + gasCost: 3, + depth: 1, + }, + { + pc: 1023, + op: "PUSH2", + gas: 49976281, + gasCost: 3, + depth: 1, + }, + { + pc: 1026, + op: "JUMPI", + gas: 49976278, + gasCost: 10, + depth: 1, + }, + { + pc: 1035, + op: "JUMPDEST", + gas: 49976268, + gasCost: 1, + depth: 1, + }, + { + pc: 1036, + op: "POP", + gas: 49976267, + gasCost: 2, + depth: 1, + }, + { + pc: 1037, + op: "SWAP2", + gas: 49976265, + gasCost: 3, + depth: 1, + }, + { + pc: 1038, + op: "SWAP1", + gas: 49976262, + gasCost: 3, + depth: 1, + }, + { + pc: 1039, + op: "POP", + gas: 49976259, + gasCost: 2, + depth: 1, + }, + { + pc: 1040, + op: "JUMP", + gas: 49976257, + gasCost: 8, + depth: 1, + }, + { + pc: 288, + op: "JUMPDEST", + gas: 49976249, + gasCost: 1, + depth: 1, + }, + { + pc: 289, + op: "DUP1", + gas: 49976248, + gasCost: 3, + depth: 1, + }, + { + pc: 290, + op: "ISZERO", + gas: 49976245, + gasCost: 3, + depth: 1, + }, + { + pc: 291, + op: "PUSH2", + gas: 49976242, + gasCost: 3, + depth: 1, + }, + { + pc: 294, + op: "JUMPI", + gas: 49976239, + gasCost: 10, + depth: 1, + }, + { + pc: 295, + op: "DUP1", + gas: 49976229, + gasCost: 3, + depth: 1, + }, + { + pc: 296, + op: "PUSH1", + gas: 49976226, + gasCost: 3, + depth: 1, + }, + { + pc: 298, + op: "LT", + gas: 49976223, + gasCost: 3, + depth: 1, + }, + { + pc: 299, + op: "PUSH2", + gas: 49976220, + gasCost: 3, + depth: 1, + }, + { + pc: 302, + op: "JUMPI", + gas: 49976217, + gasCost: 10, + depth: 1, + }, + { + pc: 303, + op: "PUSH2", + gas: 49976207, + gasCost: 3, + depth: 1, + }, + { + pc: 306, + op: "DUP1", + gas: 49976204, + gasCost: 3, + depth: 1, + }, + { + pc: 307, + op: "DUP4", + gas: 49976201, + gasCost: 3, + depth: 1, + }, + { + pc: 308, + op: "SLOAD", + gas: 49976198, + gasCost: 100, + depth: 1, + }, + { + pc: 309, + op: "DIV", + gas: 49976098, + gasCost: 5, + depth: 1, + }, + { + pc: 310, + op: "MUL", + gas: 49976093, + gasCost: 5, + depth: 1, + }, + { + pc: 311, + op: "DUP4", + gas: 49976088, + gasCost: 3, + depth: 1, + }, + { + pc: 312, + op: "MSTORE", + gas: 49976085, + gasCost: 6, + depth: 1, + }, + { + pc: 313, + op: "SWAP2", + gas: 49976079, + gasCost: 3, + depth: 1, + }, + { + pc: 314, + op: "PUSH1", + gas: 49976076, + gasCost: 3, + depth: 1, + }, + { + pc: 316, + op: "ADD", + gas: 49976073, + gasCost: 3, + depth: 1, + }, + { + pc: 317, + op: "SWAP2", + gas: 49976070, + gasCost: 3, + depth: 1, + }, + { + pc: 318, + op: "PUSH2", + gas: 49976067, + gasCost: 3, + depth: 1, + }, + { + pc: 321, + op: "JUMP", + gas: 49976064, + gasCost: 8, + depth: 1, + }, + { + pc: 365, + op: "JUMPDEST", + gas: 49976056, + gasCost: 1, + depth: 1, + }, + { + pc: 366, + op: "POP", + gas: 49976055, + gasCost: 2, + depth: 1, + }, + { + pc: 367, + op: "POP", + gas: 49976053, + gasCost: 2, + depth: 1, + }, + { + pc: 368, + op: "POP", + gas: 49976051, + gasCost: 2, + depth: 1, + }, + { + pc: 369, + op: "POP", + gas: 49976049, + gasCost: 2, + depth: 1, + }, + { + pc: 370, + op: "POP", + gas: 49976047, + gasCost: 2, + depth: 1, + }, + { + pc: 371, + op: "SWAP1", + gas: 49976045, + gasCost: 3, + depth: 1, + }, + { + pc: 372, + op: "POP", + gas: 49976042, + gasCost: 2, + depth: 1, + }, + { + pc: 373, + op: "SWAP1", + gas: 49976040, + gasCost: 3, + depth: 1, + }, + { + pc: 374, + op: "JUMP", + gas: 49976037, + gasCost: 8, + depth: 1, + }, + { + pc: 106, + op: "JUMPDEST", + gas: 49976029, + gasCost: 1, + depth: 1, + }, + { + pc: 107, + op: "PUSH1", + gas: 49976028, + gasCost: 3, + depth: 1, + }, + { + pc: 109, + op: "MLOAD", + gas: 49976025, + gasCost: 3, + depth: 1, + }, + { + pc: 110, + op: "PUSH2", + gas: 49976022, + gasCost: 3, + depth: 1, + }, + { + pc: 113, + op: "SWAP2", + gas: 49976019, + gasCost: 3, + depth: 1, + }, + { + pc: 114, + op: "SWAP1", + gas: 49976016, + gasCost: 3, + depth: 1, + }, + { + pc: 115, + op: "PUSH2", + gas: 49976013, + gasCost: 3, + depth: 1, + }, + { + pc: 118, + op: "JUMP", + gas: 49976010, + gasCost: 8, + depth: 1, + }, + { + pc: 765, + op: "JUMPDEST", + gas: 49976002, + gasCost: 1, + depth: 1, + }, + { + pc: 766, + op: "PUSH1", + gas: 49976001, + gasCost: 3, + depth: 1, + }, + { + pc: 768, + op: "PUSH1", + gas: 49975998, + gasCost: 3, + depth: 1, + }, + { + pc: 770, + op: "DUP3", + gas: 49975995, + gasCost: 3, + depth: 1, + }, + { + pc: 771, + op: "ADD", + gas: 49975992, + gasCost: 3, + depth: 1, + }, + { + pc: 772, + op: "SWAP1", + gas: 49975989, + gasCost: 3, + depth: 1, + }, + { + pc: 773, + op: "POP", + gas: 49975986, + gasCost: 2, + depth: 1, + }, + { + pc: 774, + op: "DUP2", + gas: 49975984, + gasCost: 3, + depth: 1, + }, + { + pc: 775, + op: "DUP2", + gas: 49975981, + gasCost: 3, + depth: 1, + }, + { + pc: 776, + op: "SUB", + gas: 49975978, + gasCost: 3, + depth: 1, + }, + { + pc: 777, + op: "PUSH1", + gas: 49975975, + gasCost: 3, + depth: 1, + }, + { + pc: 779, + op: "DUP4", + gas: 49975972, + gasCost: 3, + depth: 1, + }, + { + pc: 780, + op: "ADD", + gas: 49975969, + gasCost: 3, + depth: 1, + }, + { + pc: 781, + op: "MSTORE", + gas: 49975966, + gasCost: 6, + depth: 1, + }, + { + pc: 782, + op: "PUSH2", + gas: 49975960, + gasCost: 3, + depth: 1, + }, + { + pc: 785, + op: "DUP2", + gas: 49975957, + gasCost: 3, + depth: 1, + }, + { + pc: 786, + op: "DUP5", + gas: 49975954, + gasCost: 3, + depth: 1, + }, + { + pc: 787, + op: "PUSH2", + gas: 49975951, + gasCost: 3, + depth: 1, + }, + { + pc: 790, + op: "JUMP", + gas: 49975948, + gasCost: 8, + depth: 1, + }, + { + pc: 708, + op: "JUMPDEST", + gas: 49975940, + gasCost: 1, + depth: 1, + }, + { + pc: 709, + op: "PUSH1", + gas: 49975939, + gasCost: 3, + depth: 1, + }, + { + pc: 711, + op: "PUSH2", + gas: 49975936, + gasCost: 3, + depth: 1, + }, + { + pc: 714, + op: "DUP3", + gas: 49975933, + gasCost: 3, + depth: 1, + }, + { + pc: 715, + op: "PUSH2", + gas: 49975930, + gasCost: 3, + depth: 1, + }, + { + pc: 718, + op: "JUMP", + gas: 49975927, + gasCost: 8, + depth: 1, + }, + { + pc: 621, + op: "JUMPDEST", + gas: 49975919, + gasCost: 1, + depth: 1, + }, + { + pc: 622, + op: "PUSH1", + gas: 49975918, + gasCost: 3, + depth: 1, + }, + { + pc: 624, + op: "DUP2", + gas: 49975915, + gasCost: 3, + depth: 1, + }, + { + pc: 625, + op: "MLOAD", + gas: 49975912, + gasCost: 3, + depth: 1, + }, + { + pc: 626, + op: "SWAP1", + gas: 49975909, + gasCost: 3, + depth: 1, + }, + { + pc: 627, + op: "POP", + gas: 49975906, + gasCost: 2, + depth: 1, + }, + { + pc: 628, + op: "SWAP2", + gas: 49975904, + gasCost: 3, + depth: 1, + }, + { + pc: 629, + op: "SWAP1", + gas: 49975901, + gasCost: 3, + depth: 1, + }, + { + pc: 630, + op: "POP", + gas: 49975898, + gasCost: 2, + depth: 1, + }, + { + pc: 631, + op: "JUMP", + gas: 49975896, + gasCost: 8, + depth: 1, + }, + { + pc: 719, + op: "JUMPDEST", + gas: 49975888, + gasCost: 1, + depth: 1, + }, + { + pc: 720, + op: "PUSH2", + gas: 49975887, + gasCost: 3, + depth: 1, + }, + { + pc: 723, + op: "DUP2", + gas: 49975884, + gasCost: 3, + depth: 1, + }, + { + pc: 724, + op: "DUP6", + gas: 49975881, + gasCost: 3, + depth: 1, + }, + { + pc: 725, + op: "PUSH2", + gas: 49975878, + gasCost: 3, + depth: 1, + }, + { + pc: 728, + op: "JUMP", + gas: 49975875, + gasCost: 8, + depth: 1, + }, + { + pc: 632, + op: "JUMPDEST", + gas: 49975867, + gasCost: 1, + depth: 1, + }, + { + pc: 633, + op: "PUSH1", + gas: 49975866, + gasCost: 3, + depth: 1, + }, + { + pc: 635, + op: "DUP3", + gas: 49975863, + gasCost: 3, + depth: 1, + }, + { + pc: 636, + op: "DUP3", + gas: 49975860, + gasCost: 3, + depth: 1, + }, + { + pc: 637, + op: "MSTORE", + gas: 49975857, + gasCost: 6, + depth: 1, + }, + { + pc: 638, + op: "PUSH1", + gas: 49975851, + gasCost: 3, + depth: 1, + }, + { + pc: 640, + op: "DUP3", + gas: 49975848, + gasCost: 3, + depth: 1, + }, + { + pc: 641, + op: "ADD", + gas: 49975845, + gasCost: 3, + depth: 1, + }, + { + pc: 642, + op: "SWAP1", + gas: 49975842, + gasCost: 3, + depth: 1, + }, + { + pc: 643, + op: "POP", + gas: 49975839, + gasCost: 2, + depth: 1, + }, + { + pc: 644, + op: "SWAP3", + gas: 49975837, + gasCost: 3, + depth: 1, + }, + { + pc: 645, + op: "SWAP2", + gas: 49975834, + gasCost: 3, + depth: 1, + }, + { + pc: 646, + op: "POP", + gas: 49975831, + gasCost: 2, + depth: 1, + }, + { + pc: 647, + op: "POP", + gas: 49975829, + gasCost: 2, + depth: 1, + }, + { + pc: 648, + op: "JUMP", + gas: 49975827, + gasCost: 8, + depth: 1, + }, + { + pc: 729, + op: "JUMPDEST", + gas: 49975819, + gasCost: 1, + depth: 1, + }, + { + pc: 730, + op: "SWAP4", + gas: 49975818, + gasCost: 3, + depth: 1, + }, + { + pc: 731, + op: "POP", + gas: 49975815, + gasCost: 2, + depth: 1, + }, + { + pc: 732, + op: "PUSH2", + gas: 49975813, + gasCost: 3, + depth: 1, + }, + { + pc: 735, + op: "DUP2", + gas: 49975810, + gasCost: 3, + depth: 1, + }, + { + pc: 736, + op: "DUP6", + gas: 49975807, + gasCost: 3, + depth: 1, + }, + { + pc: 737, + op: "PUSH1", + gas: 49975804, + gasCost: 3, + depth: 1, + }, + { + pc: 739, + op: "DUP7", + gas: 49975801, + gasCost: 3, + depth: 1, + }, + { + pc: 740, + op: "ADD", + gas: 49975798, + gasCost: 3, + depth: 1, + }, + { + pc: 741, + op: "PUSH2", + gas: 49975795, + gasCost: 3, + depth: 1, + }, + { + pc: 744, + op: "JUMP", + gas: 49975792, + gasCost: 8, + depth: 1, + }, + { + pc: 649, + op: "JUMPDEST", + gas: 49975784, + gasCost: 1, + depth: 1, + }, + { + pc: 650, + op: "PUSH1", + gas: 49975783, + gasCost: 3, + depth: 1, + }, + { + pc: 652, + op: "JUMPDEST", + gas: 49975780, + gasCost: 1, + depth: 1, + }, + { + pc: 653, + op: "DUP4", + gas: 49975779, + gasCost: 3, + depth: 1, + }, + { + pc: 654, + op: "DUP2", + gas: 49975776, + gasCost: 3, + depth: 1, + }, + { + pc: 655, + op: "LT", + gas: 49975773, + gasCost: 3, + depth: 1, + }, + { + pc: 656, + op: "ISZERO", + gas: 49975770, + gasCost: 3, + depth: 1, + }, + { + pc: 657, + op: "PUSH2", + gas: 49975767, + gasCost: 3, + depth: 1, + }, + { + pc: 660, + op: "JUMPI", + gas: 49975764, + gasCost: 10, + depth: 1, + }, + { + pc: 661, + op: "DUP1", + gas: 49975754, + gasCost: 3, + depth: 1, + }, + { + pc: 662, + op: "DUP3", + gas: 49975751, + gasCost: 3, + depth: 1, + }, + { + pc: 663, + op: "ADD", + gas: 49975748, + gasCost: 3, + depth: 1, + }, + { + pc: 664, + op: "MLOAD", + gas: 49975745, + gasCost: 3, + depth: 1, + }, + { + pc: 665, + op: "DUP2", + gas: 49975742, + gasCost: 3, + depth: 1, + }, + { + pc: 666, + op: "DUP5", + gas: 49975739, + gasCost: 3, + depth: 1, + }, + { + pc: 667, + op: "ADD", + gas: 49975736, + gasCost: 3, + depth: 1, + }, + { + pc: 668, + op: "MSTORE", + gas: 49975733, + gasCost: 6, + depth: 1, + }, + { + pc: 669, + op: "PUSH1", + gas: 49975727, + gasCost: 3, + depth: 1, + }, + { + pc: 671, + op: "DUP2", + gas: 49975724, + gasCost: 3, + depth: 1, + }, + { + pc: 672, + op: "ADD", + gas: 49975721, + gasCost: 3, + depth: 1, + }, + { + pc: 673, + op: "SWAP1", + gas: 49975718, + gasCost: 3, + depth: 1, + }, + { + pc: 674, + op: "POP", + gas: 49975715, + gasCost: 2, + depth: 1, + }, + { + pc: 675, + op: "PUSH2", + gas: 49975713, + gasCost: 3, + depth: 1, + }, + { + pc: 678, + op: "JUMP", + gas: 49975710, + gasCost: 8, + depth: 1, + }, + { + pc: 652, + op: "JUMPDEST", + gas: 49975702, + gasCost: 1, + depth: 1, + }, + { + pc: 653, + op: "DUP4", + gas: 49975701, + gasCost: 3, + depth: 1, + }, + { + pc: 654, + op: "DUP2", + gas: 49975698, + gasCost: 3, + depth: 1, + }, + { + pc: 655, + op: "LT", + gas: 49975695, + gasCost: 3, + depth: 1, + }, + { + pc: 656, + op: "ISZERO", + gas: 49975692, + gasCost: 3, + depth: 1, + }, + { + pc: 657, + op: "PUSH2", + gas: 49975689, + gasCost: 3, + depth: 1, + }, + { + pc: 660, + op: "JUMPI", + gas: 49975686, + gasCost: 10, + depth: 1, + }, + { + pc: 679, + op: "JUMPDEST", + gas: 49975676, + gasCost: 1, + depth: 1, + }, + { + pc: 680, + op: "PUSH1", + gas: 49975675, + gasCost: 3, + depth: 1, + }, + { + pc: 682, + op: "DUP5", + gas: 49975672, + gasCost: 3, + depth: 1, + }, + { + pc: 683, + op: "DUP5", + gas: 49975669, + gasCost: 3, + depth: 1, + }, + { + pc: 684, + op: "ADD", + gas: 49975666, + gasCost: 3, + depth: 1, + }, + { + pc: 685, + op: "MSTORE", + gas: 49975663, + gasCost: 6, + depth: 1, + }, + { + pc: 686, + op: "POP", + gas: 49975657, + gasCost: 2, + depth: 1, + }, + { + pc: 687, + op: "POP", + gas: 49975655, + gasCost: 2, + depth: 1, + }, + { + pc: 688, + op: "POP", + gas: 49975653, + gasCost: 2, + depth: 1, + }, + { + pc: 689, + op: "POP", + gas: 49975651, + gasCost: 2, + depth: 1, + }, + { + pc: 690, + op: "JUMP", + gas: 49975649, + gasCost: 8, + depth: 1, + }, + { + pc: 745, + op: "JUMPDEST", + gas: 49975641, + gasCost: 1, + depth: 1, + }, + { + pc: 746, + op: "PUSH2", + gas: 49975640, + gasCost: 3, + depth: 1, + }, + { + pc: 749, + op: "DUP2", + gas: 49975637, + gasCost: 3, + depth: 1, + }, + { + pc: 750, + op: "PUSH2", + gas: 49975634, + gasCost: 3, + depth: 1, + }, + { + pc: 753, + op: "JUMP", + gas: 49975631, + gasCost: 8, + depth: 1, + }, + { + pc: 691, + op: "JUMPDEST", + gas: 49975623, + gasCost: 1, + depth: 1, + }, + { + pc: 692, + op: "PUSH1", + gas: 49975622, + gasCost: 3, + depth: 1, + }, + { + pc: 694, + op: "PUSH1", + gas: 49975619, + gasCost: 3, + depth: 1, + }, + { + pc: 696, + op: "NOT", + gas: 49975616, + gasCost: 3, + depth: 1, + }, + { + pc: 697, + op: "PUSH1", + gas: 49975613, + gasCost: 3, + depth: 1, + }, + { + pc: 699, + op: "DUP4", + gas: 49975610, + gasCost: 3, + depth: 1, + }, + { + pc: 700, + op: "ADD", + gas: 49975607, + gasCost: 3, + depth: 1, + }, + { + pc: 701, + op: "AND", + gas: 49975604, + gasCost: 3, + depth: 1, + }, + { + pc: 702, + op: "SWAP1", + gas: 49975601, + gasCost: 3, + depth: 1, + }, + { + pc: 703, + op: "POP", + gas: 49975598, + gasCost: 2, + depth: 1, + }, + { + pc: 704, + op: "SWAP2", + gas: 49975596, + gasCost: 3, + depth: 1, + }, + { + pc: 705, + op: "SWAP1", + gas: 49975593, + gasCost: 3, + depth: 1, + }, + { + pc: 706, + op: "POP", + gas: 49975590, + gasCost: 2, + depth: 1, + }, + { + pc: 707, + op: "JUMP", + gas: 49975588, + gasCost: 8, + depth: 1, + }, + { + pc: 754, + op: "JUMPDEST", + gas: 49975580, + gasCost: 1, + depth: 1, + }, + { + pc: 755, + op: "DUP5", + gas: 49975579, + gasCost: 3, + depth: 1, + }, + { + pc: 756, + op: "ADD", + gas: 49975576, + gasCost: 3, + depth: 1, + }, + { + pc: 757, + op: "SWAP2", + gas: 49975573, + gasCost: 3, + depth: 1, + }, + { + pc: 758, + op: "POP", + gas: 49975570, + gasCost: 2, + depth: 1, + }, + { + pc: 759, + op: "POP", + gas: 49975568, + gasCost: 2, + depth: 1, + }, + { + pc: 760, + op: "SWAP3", + gas: 49975566, + gasCost: 3, + depth: 1, + }, + { + pc: 761, + op: "SWAP2", + gas: 49975563, + gasCost: 3, + depth: 1, + }, + { + pc: 762, + op: "POP", + gas: 49975560, + gasCost: 2, + depth: 1, + }, + { + pc: 763, + op: "POP", + gas: 49975558, + gasCost: 2, + depth: 1, + }, + { + pc: 764, + op: "JUMP", + gas: 49975556, + gasCost: 8, + depth: 1, + }, + { + pc: 791, + op: "JUMPDEST", + gas: 49975548, + gasCost: 1, + depth: 1, + }, + { + pc: 792, + op: "SWAP1", + gas: 49975547, + gasCost: 3, + depth: 1, + }, + { + pc: 793, + op: "POP", + gas: 49975544, + gasCost: 2, + depth: 1, + }, + { + pc: 794, + op: "SWAP3", + gas: 49975542, + gasCost: 3, + depth: 1, + }, + { + pc: 795, + op: "SWAP2", + gas: 49975539, + gasCost: 3, + depth: 1, + }, + { + pc: 796, + op: "POP", + gas: 49975536, + gasCost: 2, + depth: 1, + }, + { + pc: 797, + op: "POP", + gas: 49975534, + gasCost: 2, + depth: 1, + }, + { + pc: 798, + op: "JUMP", + gas: 49975532, + gasCost: 8, + depth: 1, + }, + { + pc: 119, + op: "JUMPDEST", + gas: 49975524, + gasCost: 1, + depth: 1, + }, + { + pc: 120, + op: "PUSH1", + gas: 49975523, + gasCost: 3, + depth: 1, + }, + { + pc: 122, + op: "MLOAD", + gas: 49975520, + gasCost: 3, + depth: 1, + }, + { + pc: 123, + op: "DUP1", + gas: 49975517, + gasCost: 3, + depth: 1, + }, + { + pc: 124, + op: "SWAP2", + gas: 49975514, + gasCost: 3, + depth: 1, + }, + { + pc: 125, + op: "SUB", + gas: 49975511, + gasCost: 3, + depth: 1, + }, + { + pc: 126, + op: "SWAP1", + gas: 49975508, + gasCost: 3, + depth: 1, + }, + { + pc: 127, + op: "RETURN", + gas: 49975505, + gasCost: 0, + depth: 1, + }, + ], +}; diff --git a/packages/hardhat-core/test/fixture-debug-traces/traceCall/contractAThrowError.ts b/packages/hardhat-core/test/fixture-debug-traces/traceCall/contractAThrowError.ts new file mode 100644 index 0000000000..5be81755a5 --- /dev/null +++ b/packages/hardhat-core/test/fixture-debug-traces/traceCall/contractAThrowError.ts @@ -0,0 +1,5215 @@ +import { GethTrace } from "../types"; + +// Trace generated using Geth 1.12.2 + +export const trace: GethTrace = { + gas: 21919, + failed: true, + returnValue: + "08c379a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000294e756d626572206d7573742062652067726561746572207468616e206f7220657175616c20746f20350000000000000000000000000000000000000000000000", + structLogs: [ + { + pc: 0, + op: "PUSH1", + gas: 49978796, + gasCost: 3, + depth: 1, + stack: [], + memory: [], + storage: {}, + }, + { + pc: 2, + op: "PUSH1", + gas: 49978793, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [], + storage: {}, + }, + { + pc: 4, + op: "MSTORE", + gas: 49978790, + gasCost: 12, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000040", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 5, + op: "CALLVALUE", + gas: 49978778, + gasCost: 2, + depth: 1, + stack: [], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 6, + op: "DUP1", + gas: 49978776, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 7, + op: "ISZERO", + gas: 49978773, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 8, + op: "PUSH2", + gas: 49978770, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 11, + op: "JUMPI", + gas: 49978767, + gasCost: 10, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000010", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 16, + op: "JUMPDEST", + gas: 49978757, + gasCost: 1, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 17, + op: "POP", + gas: 49978756, + gasCost: 2, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 18, + op: "PUSH1", + gas: 49978754, + gasCost: 3, + depth: 1, + stack: [], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 20, + op: "CALLDATASIZE", + gas: 49978751, + gasCost: 2, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 21, + op: "LT", + gas: 49978749, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000024", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 22, + op: "PUSH2", + gas: 49978746, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 25, + op: "JUMPI", + gas: 49978743, + gasCost: 10, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000041", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 26, + op: "PUSH1", + gas: 49978733, + gasCost: 3, + depth: 1, + stack: [], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 28, + op: "CALLDATALOAD", + gas: 49978730, + gasCost: 3, + depth: 1, + stack: [ + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 29, + op: "PUSH1", + gas: 49978727, + gasCost: 3, + depth: 1, + stack: [ + "922af8a700000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 31, + op: "SHR", + gas: 49978724, + gasCost: 3, + depth: 1, + stack: [ + "922af8a700000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000e0", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 32, + op: "DUP1", + gas: 49978721, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 33, + op: "PUSH4", + gas: 49978718, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "00000000000000000000000000000000000000000000000000000000922af8a7", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 38, + op: "EQ", + gas: 49978715, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "00000000000000000000000000000000000000000000000000000000922af8a7", + "00000000000000000000000000000000000000000000000000000000922af8a7", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 39, + op: "PUSH2", + gas: 49978712, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 42, + op: "JUMPI", + gas: 49978709, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000046", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 70, + op: "JUMPDEST", + gas: 49978699, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 71, + op: "PUSH2", + gas: 49978698, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 74, + op: "PUSH1", + gas: 49978695, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 76, + op: "DUP1", + gas: 49978692, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 77, + op: "CALLDATASIZE", + gas: 49978689, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 78, + op: "SUB", + gas: 49978687, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000024", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 79, + op: "DUP2", + gas: 49978684, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 80, + op: "ADD", + gas: 49978681, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 81, + op: "SWAP1", + gas: 49978678, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000024", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 82, + op: "PUSH2", + gas: 49978675, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 85, + op: "SWAP2", + gas: 49978672, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "000000000000000000000000000000000000000000000000000000000000005b", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 86, + op: "SWAP1", + gas: 49978669, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000024", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 87, + op: "PUSH2", + gas: 49978666, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 90, + op: "JUMP", + gas: 49978663, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000240", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 576, + op: "JUMPDEST", + gas: 49978655, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 577, + op: "PUSH1", + gas: 49978654, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 579, + op: "PUSH1", + gas: 49978651, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 581, + op: "DUP3", + gas: 49978648, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 582, + op: "DUP5", + gas: 49978645, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 583, + op: "SUB", + gas: 49978642, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000024", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 584, + op: "SLT", + gas: 49978639, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 585, + op: "ISZERO", + gas: 49978636, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 586, + op: "PUSH2", + gas: 49978633, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 589, + op: "JUMPI", + gas: 49978630, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000256", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 598, + op: "JUMPDEST", + gas: 49978620, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 599, + op: "PUSH1", + gas: 49978619, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 601, + op: "PUSH2", + gas: 49978616, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 604, + op: "DUP5", + gas: 49978613, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 605, + op: "DUP3", + gas: 49978610, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 606, + op: "DUP6", + gas: 49978607, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 607, + op: "ADD", + gas: 49978604, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 608, + op: "PUSH2", + gas: 49978601, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 611, + op: "JUMP", + gas: 49978598, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "000000000000000000000000000000000000000000000000000000000000022b", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 555, + op: "JUMPDEST", + gas: 49978590, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 556, + op: "PUSH1", + gas: 49978589, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 558, + op: "DUP2", + gas: 49978586, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 559, + op: "CALLDATALOAD", + gas: 49978583, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 560, + op: "SWAP1", + gas: 49978580, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 561, + op: "POP", + gas: 49978577, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 562, + op: "PUSH2", + gas: 49978575, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 565, + op: "DUP2", + gas: 49978572, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 566, + op: "PUSH2", + gas: 49978569, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 569, + op: "JUMP", + gas: 49978566, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000214", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 532, + op: "JUMPDEST", + gas: 49978558, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 533, + op: "PUSH2", + gas: 49978557, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 536, + op: "DUP2", + gas: 49978554, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000021d", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 537, + op: "PUSH2", + gas: 49978551, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000021d", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 540, + op: "JUMP", + gas: 49978548, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000021d", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000020a", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 522, + op: "JUMPDEST", + gas: 49978540, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000021d", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 523, + op: "PUSH1", + gas: 49978539, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000021d", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 525, + op: "DUP2", + gas: 49978536, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000021d", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 526, + op: "SWAP1", + gas: 49978533, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000021d", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 527, + op: "POP", + gas: 49978530, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000021d", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 528, + op: "SWAP2", + gas: 49978528, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000021d", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 529, + op: "SWAP1", + gas: 49978525, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000021d", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 530, + op: "POP", + gas: 49978522, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000021d", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 531, + op: "JUMP", + gas: 49978520, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000021d", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 541, + op: "JUMPDEST", + gas: 49978512, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 542, + op: "DUP2", + gas: 49978511, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 543, + op: "EQ", + gas: 49978508, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 544, + op: "PUSH2", + gas: 49978505, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 547, + op: "JUMPI", + gas: 49978502, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000228", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 552, + op: "JUMPDEST", + gas: 49978492, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 553, + op: "POP", + gas: 49978491, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 554, + op: "JUMP", + gas: 49978489, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000023a", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 570, + op: "JUMPDEST", + gas: 49978481, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 571, + op: "SWAP3", + gas: 49978480, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 572, + op: "SWAP2", + gas: 49978477, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000264", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 573, + op: "POP", + gas: 49978474, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000024", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 574, + op: "POP", + gas: 49978472, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000264", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 575, + op: "JUMP", + gas: 49978470, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000264", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 612, + op: "JUMPDEST", + gas: 49978462, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 613, + op: "SWAP2", + gas: 49978461, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 614, + op: "POP", + gas: 49978458, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 615, + op: "POP", + gas: 49978456, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 616, + op: "SWAP3", + gas: 49978454, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 617, + op: "SWAP2", + gas: 49978451, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "000000000000000000000000000000000000000000000000000000000000005b", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 618, + op: "POP", + gas: 49978448, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000024", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 619, + op: "POP", + gas: 49978446, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000005b", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 620, + op: "JUMP", + gas: 49978444, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000005b", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 91, + op: "JUMPDEST", + gas: 49978436, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 92, + op: "PUSH2", + gas: 49978435, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 95, + op: "JUMP", + gas: 49978432, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000009e", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 158, + op: "JUMPDEST", + gas: 49978424, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 159, + op: "PUSH1", + gas: 49978423, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 161, + op: "DUP2", + gas: 49978420, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000005", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 162, + op: "LT", + gas: 49978417, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000005", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 163, + op: "ISZERO", + gas: 49978414, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 164, + op: "PUSH2", + gas: 49978411, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 167, + op: "JUMPI", + gas: 49978408, + gasCost: 10, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000e2", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 168, + op: "PUSH1", + gas: 49978398, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 170, + op: "MLOAD", + gas: 49978395, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000040", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 171, + op: "PUSH32", + gas: 49978392, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 204, + op: "DUP2", + gas: 49978389, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + storage: {}, + }, + { + pc: 205, + op: "MSTORE", + gas: 49978386, + gasCost: 9, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 206, + op: "PUSH1", + gas: 49978377, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 208, + op: "ADD", + gas: 49978374, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000004", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 209, + op: "PUSH2", + gas: 49978371, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000084", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 212, + op: "SWAP1", + gas: 49978368, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000d9", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 213, + op: "PUSH2", + gas: 49978365, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 216, + op: "JUMP", + gas: 49978362, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "0000000000000000000000000000000000000000000000000000000000000391", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 913, + op: "JUMPDEST", + gas: 49978354, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 914, + op: "PUSH1", + gas: 49978353, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 916, + op: "PUSH1", + gas: 49978350, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 918, + op: "DUP3", + gas: 49978347, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 919, + op: "ADD", + gas: 49978344, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000084", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 920, + op: "SWAP1", + gas: 49978341, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 921, + op: "POP", + gas: 49978338, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 922, + op: "DUP2", + gas: 49978336, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 923, + op: "DUP2", + gas: 49978333, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000084", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 924, + op: "SUB", + gas: 49978330, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 925, + op: "PUSH1", + gas: 49978327, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 927, + op: "DUP4", + gas: 49978324, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 928, + op: "ADD", + gas: 49978321, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000084", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 929, + op: "MSTORE", + gas: 49978318, + gasCost: 6, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000084", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 930, + op: "PUSH2", + gas: 49978312, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 933, + op: "DUP2", + gas: 49978309, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 934, + op: "PUSH2", + gas: 49978306, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 937, + op: "JUMP", + gas: 49978303, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "000000000000000000000000000000000000000000000000000000000000036e", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 878, + op: "JUMPDEST", + gas: 49978295, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 879, + op: "PUSH1", + gas: 49978294, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 881, + op: "PUSH2", + gas: 49978291, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 884, + op: "PUSH1", + gas: 49978288, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 886, + op: "DUP4", + gas: 49978285, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 887, + op: "PUSH2", + gas: 49978282, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 890, + op: "JUMP", + gas: 49978279, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000278", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 632, + op: "JUMPDEST", + gas: 49978271, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 633, + op: "PUSH1", + gas: 49978270, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 635, + op: "DUP3", + gas: 49978267, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 636, + op: "DUP3", + gas: 49978264, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000029", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 637, + op: "MSTORE", + gas: 49978261, + gasCost: 6, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 638, + op: "PUSH1", + gas: 49978255, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 640, + op: "DUP3", + gas: 49978252, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 641, + op: "ADD", + gas: 49978249, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 642, + op: "SWAP1", + gas: 49978246, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 643, + op: "POP", + gas: 49978243, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 644, + op: "SWAP3", + gas: 49978241, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "000000000000000000000000000000000000000000000000000000000000037b", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 645, + op: "SWAP2", + gas: 49978238, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000029", + "00000000000000000000000000000000000000000000000000000000000000a4", + "000000000000000000000000000000000000000000000000000000000000037b", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 646, + op: "POP", + gas: 49978235, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c4", + "000000000000000000000000000000000000000000000000000000000000037b", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000029", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 647, + op: "POP", + gas: 49978233, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c4", + "000000000000000000000000000000000000000000000000000000000000037b", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 648, + op: "JUMP", + gas: 49978231, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c4", + "000000000000000000000000000000000000000000000000000000000000037b", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 891, + op: "JUMPDEST", + gas: 49978223, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 892, + op: "SWAP2", + gas: 49978222, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 893, + op: "POP", + gas: 49978219, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 894, + op: "PUSH2", + gas: 49978217, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 897, + op: "DUP3", + gas: 49978214, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 898, + op: "PUSH2", + gas: 49978211, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 901, + op: "JUMP", + gas: 49978208, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + "000000000000000000000000000000000000000000000000000000000000031f", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 799, + op: "JUMPDEST", + gas: 49978200, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 800, + op: "PUSH32", + gas: 49978199, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 833, + op: "PUSH1", + gas: 49978196, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + "4e756d626572206d7573742062652067726561746572207468616e206f722065", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 835, + op: "DUP3", + gas: 49978193, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + "4e756d626572206d7573742062652067726561746572207468616e206f722065", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 836, + op: "ADD", + gas: 49978190, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + "4e756d626572206d7573742062652067726561746572207468616e206f722065", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 837, + op: "MSTORE", + gas: 49978187, + gasCost: 6, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + "4e756d626572206d7573742062652067726561746572207468616e206f722065", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "0000002900000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 838, + op: "PUSH32", + gas: 49978181, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f72206500000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 871, + op: "PUSH1", + gas: 49978178, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + "7175616c20746f20350000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f72206500000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 873, + op: "DUP3", + gas: 49978175, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + "7175616c20746f20350000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f72206500000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 874, + op: "ADD", + gas: 49978172, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + "7175616c20746f20350000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f72206500000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 875, + op: "MSTORE", + gas: 49978169, + gasCost: 6, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + "7175616c20746f20350000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000e4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f72206500000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 876, + op: "POP", + gas: 49978163, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 877, + op: "JUMP", + gas: 49978161, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000386", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 902, + op: "JUMPDEST", + gas: 49978153, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 903, + op: "PUSH1", + gas: 49978152, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 905, + op: "DUP3", + gas: 49978149, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000040", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 906, + op: "ADD", + gas: 49978146, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000040", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 907, + op: "SWAP1", + gas: 49978143, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000104", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 908, + op: "POP", + gas: 49978140, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000104", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 909, + op: "SWAP2", + gas: 49978138, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + "0000000000000000000000000000000000000000000000000000000000000104", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 910, + op: "SWAP1", + gas: 49978135, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000104", + "00000000000000000000000000000000000000000000000000000000000000c4", + "00000000000000000000000000000000000000000000000000000000000003aa", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 911, + op: "POP", + gas: 49978132, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000104", + "00000000000000000000000000000000000000000000000000000000000003aa", + "00000000000000000000000000000000000000000000000000000000000000c4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 912, + op: "JUMP", + gas: 49978130, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000104", + "00000000000000000000000000000000000000000000000000000000000003aa", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 938, + op: "JUMPDEST", + gas: 49978122, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000104", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 939, + op: "SWAP1", + gas: 49978121, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000a4", + "0000000000000000000000000000000000000000000000000000000000000104", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 940, + op: "POP", + gas: 49978118, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "0000000000000000000000000000000000000000000000000000000000000104", + "00000000000000000000000000000000000000000000000000000000000000a4", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 941, + op: "SWAP2", + gas: 49978116, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + "0000000000000000000000000000000000000000000000000000000000000104", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 942, + op: "SWAP1", + gas: 49978113, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000104", + "0000000000000000000000000000000000000000000000000000000000000084", + "00000000000000000000000000000000000000000000000000000000000000d9", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 943, + op: "POP", + gas: 49978110, + gasCost: 2, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000104", + "00000000000000000000000000000000000000000000000000000000000000d9", + "0000000000000000000000000000000000000000000000000000000000000084", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 944, + op: "JUMP", + gas: 49978108, + gasCost: 8, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000104", + "00000000000000000000000000000000000000000000000000000000000000d9", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 217, + op: "JUMPDEST", + gas: 49978100, + gasCost: 1, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000104", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 218, + op: "PUSH1", + gas: 49978099, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000104", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 220, + op: "MLOAD", + gas: 49978096, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000104", + "0000000000000000000000000000000000000000000000000000000000000040", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 221, + op: "DUP1", + gas: 49978093, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000104", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 222, + op: "SWAP2", + gas: 49978090, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000104", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 223, + op: "SUB", + gas: 49978087, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000104", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 224, + op: "SWAP1", + gas: 49978084, + gasCost: 3, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000084", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + { + pc: 225, + op: "REVERT", + gas: 49978081, + gasCost: 0, + depth: 1, + stack: [ + "00000000000000000000000000000000000000000000000000000000922af8a7", + "0000000000000000000000000000000000000000000000000000000000000060", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000084", + "0000000000000000000000000000000000000000000000000000000000000080", + ], + memory: [ + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "08c379a000000000000000000000000000000000000000000000000000000000", + "0000002000000000000000000000000000000000000000000000000000000000", + "000000294e756d626572206d7573742062652067726561746572207468616e20", + "6f7220657175616c20746f203500000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + ], + storage: {}, + }, + ], +}; diff --git a/packages/hardhat-core/test/fixture-debug-traces/traceCall/ethTransfer.ts b/packages/hardhat-core/test/fixture-debug-traces/traceCall/ethTransfer.ts new file mode 100644 index 0000000000..aa452c63bf --- /dev/null +++ b/packages/hardhat-core/test/fixture-debug-traces/traceCall/ethTransfer.ts @@ -0,0 +1,10 @@ +import { GethTrace } from "../types"; + +// Trace generated using Geth 1.12.2 + +export const trace: GethTrace = { + gas: 21000, + failed: false, + returnValue: "", + structLogs: [], +}; diff --git a/packages/hardhat-core/test/fixture-projects/autocomplete/custom-scopes/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/autocomplete/custom-scopes/hardhat.config.js new file mode 100644 index 0000000000..391f3cea8a --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/autocomplete/custom-scopes/hardhat.config.js @@ -0,0 +1,18 @@ +const scope1 = scope("scope1"); +scope1.task("task1", "task1 description").setAction(async () => {}); +scope1 + .task("task2", "task2 description") + .setAction(async () => {}) + .addFlag("flag1", "flag1 description") + .addFlag("flag2") + .addFlag("tmpflag"); + +const scope2 = scope("scope-2", "scope-2 description"); + +const scope3 = scope("scope-3", "scope-3 description"); +scope3.task("scope-3", "task description").setAction(async () => {}); +scope3.task("compile").setAction(async () => {}); + +module.exports = { + solidity: "0.7.3", +}; diff --git a/packages/hardhat-core/test/fixture-projects/autocomplete/custom-scopes/package.json b/packages/hardhat-core/test/fixture-projects/autocomplete/custom-scopes/package.json new file mode 100644 index 0000000000..a0dcf3361f --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/autocomplete/custom-scopes/package.json @@ -0,0 +1,3 @@ +{ + "name": "custom-scopes" +} diff --git a/packages/hardhat-core/test/fixture-projects/autocomplete/overridden-task/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/autocomplete/overridden-task/hardhat.config.js new file mode 100644 index 0000000000..25ccf11458 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/autocomplete/overridden-task/hardhat.config.js @@ -0,0 +1,21 @@ +task("test").setAction((taskArgs, hre, runSuper) => { + console.log("about to run a test"); + + return runSuper(); +}); + +task("compile").setAction((taskArgs, hre, runSuper) => { + console.log("first compile override"); + + return runSuper(); +}); + +task("compile").setAction((taskArgs, hre, runSuper) => { + console.log("second compile override"); + + return runSuper(); +}); + +module.exports = { + solidity: "0.7.3", +}; diff --git a/packages/hardhat-core/test/fixture-projects/autocomplete/overridden-task/package.json b/packages/hardhat-core/test/fixture-projects/autocomplete/overridden-task/package.json new file mode 100644 index 0000000000..3789277f98 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/autocomplete/overridden-task/package.json @@ -0,0 +1,3 @@ +{ + "name": "overridden-task" +} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/.gitignore b/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/.gitignore new file mode 100644 index 0000000000..e7f801166c --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/.gitignore @@ -0,0 +1,2 @@ +artifacts/ +cache/ diff --git a/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/contracts/A.sol new file mode 100644 index 0000000000..56fb763506 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/contracts/A.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import "foo/Foo.sol"; +import "bar/Foo.sol"; + +contract A {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/hardhat.config.js new file mode 100644 index 0000000000..bbb56aa538 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/hardhat.config.js @@ -0,0 +1,10 @@ +subtask("compile:solidity:get-remappings", () => { + return { + "foo/": "node_modules/foo/contracts/", + "bar/": "node_modules/foo/contracts/", + }; +}); + +module.exports = { + solidity: "0.8.19", +}; diff --git a/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/node_modules/foo/contracts/Foo.sol b/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/node_modules/foo/contracts/Foo.sol new file mode 100644 index 0000000000..60d0d77e1b --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/node_modules/foo/contracts/Foo.sol @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +contract Foo { +} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/node_modules/foo/package.json b/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/node_modules/foo/package.json new file mode 100644 index 0000000000..2d1c02962d --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-ambiguous-remappings/node_modules/foo/package.json @@ -0,0 +1,4 @@ +{ + "name": "foo", + "version": "1.2.3" +} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/.gitignore b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/.gitignore new file mode 100644 index 0000000000..e7f801166c --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/.gitignore @@ -0,0 +1,2 @@ +artifacts/ +cache/ diff --git a/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/contracts/A.sol new file mode 100644 index 0000000000..5b1504bdbd --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/contracts/A.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.19; + +import "dependency/contracts/console.sol"; + +contract A {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/contracts/C.sol b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/contracts/C.sol new file mode 100644 index 0000000000..9bc8e3522d --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/contracts/C.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.19; + +import "./E.sol"; + +contract C {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/contracts/E.sol b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/contracts/E.sol new file mode 100644 index 0000000000..c804f1245e --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/contracts/E.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.19; + +contract E {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/hardhat.config.js new file mode 100644 index 0000000000..a764e2e07a --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/hardhat.config.js @@ -0,0 +1,7 @@ +// This project is compiled from scratch multiple times in the same test, which +// produces a lot of logs. We override this task to omit those logs. +subtask("compile:solidity:log:compilation-result", () => {}); + +module.exports = { + solidity: "0.8.19", +}; diff --git a/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/node_modules/dependency/contracts/console.sol b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/node_modules/dependency/contracts/console.sol new file mode 100644 index 0000000000..7e21bed415 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/node_modules/dependency/contracts/console.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.19; + +contract console { + constructor() {} +} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/node_modules/dependency/package.json b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/node_modules/dependency/package.json new file mode 100644 index 0000000000..2c30dd0e49 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-contract-with-deps/node_modules/dependency/package.json @@ -0,0 +1,4 @@ +{ + "name": "dependency", + "version": "1.2.3" +} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-module/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-module/contracts/A.sol new file mode 100644 index 0000000000..742dcc1253 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-module/contracts/A.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.19; + +// For test purposes this import must point to a module +import "some-lib"; + +contract A {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-module/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-module/hardhat.config.js new file mode 100644 index 0000000000..aa3527a6b0 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-module/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.8.19", +}; diff --git a/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-module/node_modules/some-lib/package.json b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-module/node_modules/some-lib/package.json new file mode 100644 index 0000000000..54bc9e6087 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-module/node_modules/some-lib/package.json @@ -0,0 +1,4 @@ +{ + "name": "some-lib", + "version": "1.2.3" +} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-module/package.json b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-module/package.json new file mode 100644 index 0000000000..7abbb6dce3 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-module/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "some-lib": "1.2.3" + } +} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-path/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-path/contracts/A.sol new file mode 100644 index 0000000000..59c1e55c36 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-path/contracts/A.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.19; + +// For test purposes this import must point to a folder +import "../dir"; + +contract A {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-path/dir/A.sol b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-path/dir/A.sol new file mode 100644 index 0000000000..6ec7d167d0 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-path/dir/A.sol @@ -0,0 +1 @@ +// For test purposes this file can be empty diff --git a/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-path/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-path/hardhat.config.js new file mode 100644 index 0000000000..aa3527a6b0 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-import-folder-from-path/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.8.19", +}; diff --git a/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-module/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-module/contracts/A.sol new file mode 100644 index 0000000000..031312d7bd --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-module/contracts/A.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.19; + +// For test purposes this file must not exist +import "some-lib/nonExistingFile.sol"; + +contract A {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-module/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-module/hardhat.config.js new file mode 100644 index 0000000000..aa3527a6b0 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-module/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.8.19", +}; diff --git a/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-module/node_modules/some-lib/package.json b/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-module/node_modules/some-lib/package.json new file mode 100644 index 0000000000..54bc9e6087 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-module/node_modules/some-lib/package.json @@ -0,0 +1,4 @@ +{ + "name": "some-lib", + "version": "1.2.3" +} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-module/package.json b/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-module/package.json new file mode 100644 index 0000000000..7abbb6dce3 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-module/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "some-lib": "1.2.3" + } +} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-path/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-path/contracts/A.sol new file mode 100644 index 0000000000..3ac8408a79 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-path/contracts/A.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.19; + +// For test purposes this file must not exist +import "../nonExistingFile.sol"; + +contract A {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-path/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-path/hardhat.config.js new file mode 100644 index 0000000000..aa3527a6b0 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-import-non-existing-file-from-path/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.8.19", +}; diff --git a/packages/hardhat-core/test/fixture-projects/compilation-latest-solc-version/.gitignore b/packages/hardhat-core/test/fixture-projects/compilation-latest-solc-version/.gitignore new file mode 100644 index 0000000000..e7f801166c --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-latest-solc-version/.gitignore @@ -0,0 +1,2 @@ +artifacts/ +cache/ diff --git a/packages/hardhat-core/test/fixture-projects/compilation-latest-solc-version/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/compilation-latest-solc-version/contracts/A.sol new file mode 100644 index 0000000000..cb72dc902a --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-latest-solc-version/contracts/A.sol @@ -0,0 +1,3 @@ +pragma solidity ^0.8.23; + +contract A {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-latest-solc-version/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/compilation-latest-solc-version/hardhat.config.js new file mode 100644 index 0000000000..ea72c9f4de --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-latest-solc-version/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.8.23", +}; diff --git a/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/.gitignore b/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/.gitignore new file mode 100644 index 0000000000..e7f801166c --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/.gitignore @@ -0,0 +1,2 @@ +artifacts/ +cache/ diff --git a/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/contracts/A.sol new file mode 100644 index 0000000000..908062c928 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/contracts/A.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.21; + +contract A {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/contracts/B.sol new file mode 100644 index 0000000000..a326bf8103 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/contracts/B.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.20; + +contract B {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/contracts/C.sol b/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/contracts/C.sol new file mode 100644 index 0000000000..65be83cf9d --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/contracts/C.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.4.11; + +contract C {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/contracts/D.sol b/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/contracts/D.sol new file mode 100644 index 0000000000..b16a6fddbb --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/contracts/D.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.5.5; + +contract D {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/hardhat.config.js new file mode 100644 index 0000000000..e432b997ba --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-multiple-files-different-evm-versions/hardhat.config.js @@ -0,0 +1,24 @@ +module.exports = { + solidity: { + compilers: [ + { + version: "0.4.11", // Value not present in solc-info.ts file + }, + { + version: "0.5.5", // Value taken from solc-info.ts file + }, + { + version: "0.8.20", + settings: { + evmVersion: "paris", // Overwrite default value in solc-info.ts file + }, + }, + { + version: "0.8.21", + settings: { + evmVersion: "shanghai", // Same as default value in solc-info.ts file + }, + }, + ], + }, +}; diff --git a/packages/hardhat-core/test/fixture-projects/compilation-remappings/.gitignore b/packages/hardhat-core/test/fixture-projects/compilation-remappings/.gitignore new file mode 100644 index 0000000000..e7f801166c --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-remappings/.gitignore @@ -0,0 +1,2 @@ +artifacts/ +cache/ diff --git a/packages/hardhat-core/test/fixture-projects/compilation-remappings/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/compilation-remappings/contracts/A.sol new file mode 100644 index 0000000000..b914e8f787 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-remappings/contracts/A.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import "foo/Foo.sol"; + +contract A {} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-remappings/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/compilation-remappings/hardhat.config.js new file mode 100644 index 0000000000..1095a25a50 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-remappings/hardhat.config.js @@ -0,0 +1,9 @@ +subtask("compile:solidity:get-remappings", () => { + return { + "foo/": "node_modules/foo/contracts/", + }; +}); + +module.exports = { + solidity: "0.8.19", +}; diff --git a/packages/hardhat-core/test/fixture-projects/compilation-remappings/node_modules/foo/contracts/Foo.sol b/packages/hardhat-core/test/fixture-projects/compilation-remappings/node_modules/foo/contracts/Foo.sol new file mode 100644 index 0000000000..60d0d77e1b --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-remappings/node_modules/foo/contracts/Foo.sol @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +contract Foo { +} diff --git a/packages/hardhat-core/test/fixture-projects/compilation-remappings/node_modules/foo/package.json b/packages/hardhat-core/test/fixture-projects/compilation-remappings/node_modules/foo/package.json new file mode 100644 index 0000000000..2d1c02962d --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/compilation-remappings/node_modules/foo/package.json @@ -0,0 +1,4 @@ +{ + "name": "foo", + "version": "1.2.3" +} diff --git a/packages/hardhat-core/test/fixture-projects/console-log/.gitignore b/packages/hardhat-core/test/fixture-projects/console-log/.gitignore new file mode 100644 index 0000000000..e7f801166c --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/console-log/.gitignore @@ -0,0 +1,2 @@ +artifacts/ +cache/ diff --git a/packages/hardhat-core/test/fixture-projects/console-log/contracts/Test.sol b/packages/hardhat-core/test/fixture-projects/console-log/contracts/Test.sol new file mode 100644 index 0000000000..ade8f73a1d --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/console-log/contracts/Test.sol @@ -0,0 +1,28 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.7.0; + +import "hardhat/console.sol"; + +contract Test { + uint n1 = 11111111111111111111111111111111; + uint n2 = 22222222222222222222222222222222; + uint n3 = 33333333333333333333333333333333; + + function test() public view { + console.log("%d", 123456789123456789123456789); + console.log("%i", 123456789123456789123456789); + console.log("%d%i%s", n1, n2, n3); + console.log("%d", n1, "%i", n1); + console.log("%d %%d %%%d %%%%d %%%%%d %%%%%%d", n1, 2, n3); + console.log("%i %%i %%%i %%%%i %%%%%i %%%%%%i", n1, 2, n3); + console.log("%s %%s %%%s %%%%s %%%%%s %%%%%%s", n1, 2, n3); + console.log("%d"); + console.log("%%d"); + console.log("%s"); + console.log("%d %i %s %%d"); + console.log("1111111111111111114444444444444444444455555555555555555555"); + console.log(1); + console.log("%d", 12); + console.log("%i", 13); + } +} diff --git a/packages/hardhat-core/test/fixture-projects/console-log/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/console-log/hardhat.config.js new file mode 100644 index 0000000000..38f2a55388 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/console-log/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.7.3", +}; diff --git a/packages/hardhat-core/test/fixture-projects/console-log/package.json b/packages/hardhat-core/test/fixture-projects/console-log/package.json new file mode 100644 index 0000000000..103b68ed4b --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/console-log/package.json @@ -0,0 +1,4 @@ +{ + "name": "console-log", + "version": "1.0.0" +} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/contracts/A.sol new file mode 100644 index 0000000000..163d519a08 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/contracts/A.sol @@ -0,0 +1,3 @@ +pragma solidity ^0.5.1; +import "./B.sol"; +contract A {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/contracts/B.sol new file mode 100644 index 0000000000..2099ddf93b --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/contracts/B.sol @@ -0,0 +1,3 @@ +pragma solidity ^0.5.1; +import "./C.sol"; +contract B {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/contracts/C.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/contracts/C.sol new file mode 100644 index 0000000000..efdd932545 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/contracts/C.sol @@ -0,0 +1,2 @@ +pragma solidity ^0.5.1; +contract C {}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/contracts/folder/C.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/contracts/folder/C.sol new file mode 100644 index 0000000000..efdd932545 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/contracts/folder/C.sol @@ -0,0 +1,2 @@ +pragma solidity ^0.5.1; +contract C {}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-nameclash-project/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-no-spdx-no-pragma/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-no-spdx-no-pragma/contracts/A.sol new file mode 100644 index 0000000000..7caf2e07d7 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-no-spdx-no-pragma/contracts/A.sol @@ -0,0 +1 @@ +contract Bar {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-no-spdx-no-pragma/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-no-spdx-no-pragma/contracts/B.sol new file mode 100644 index 0000000000..9e24a46ff8 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-no-spdx-no-pragma/contracts/B.sol @@ -0,0 +1,3 @@ +import "./A.sol"; + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-no-spdx-no-pragma/expected.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-no-spdx-no-pragma/expected.sol new file mode 100644 index 0000000000..4c993cbf02 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-no-spdx-no-pragma/expected.sol @@ -0,0 +1,10 @@ +// Sources flattened with hardhat v{HARDHAT_VERSION} https://hardhat.org + +// File contracts/A.sol + +contract Bar {} + + +// File contracts/B.sol + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-no-spdx-no-pragma/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-no-spdx-no-pragma/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-no-spdx-no-pragma/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-different-directives/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-different-directives/contracts/A.sol new file mode 100644 index 0000000000..1e0cb3790f --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-different-directives/contracts/A.sol @@ -0,0 +1,3 @@ +pragma experimental ABIEncoderV2; + +contract Bar {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-different-directives/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-different-directives/contracts/B.sol new file mode 100644 index 0000000000..3ee4c8a271 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-different-directives/contracts/B.sol @@ -0,0 +1,5 @@ +pragma abicoder v1; + +import "./A.sol"; + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-different-directives/expected.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-different-directives/expected.sol new file mode 100644 index 0000000000..d845fd3003 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-different-directives/expected.sol @@ -0,0 +1,16 @@ +// Sources flattened with hardhat v{HARDHAT_VERSION} https://hardhat.org + +pragma experimental ABIEncoderV2; + +// File contracts/A.sol + +// Original pragma directive: pragma experimental ABIEncoderV2 + +contract Bar {} + + +// File contracts/B.sol + +// Original pragma directive: pragma abicoder v1 + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-different-directives/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-different-directives/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-different-directives/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-multiple-directives/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-multiple-directives/contracts/A.sol new file mode 100644 index 0000000000..1e0cb3790f --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-multiple-directives/contracts/A.sol @@ -0,0 +1,3 @@ +pragma experimental ABIEncoderV2; + +contract Bar {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-multiple-directives/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-multiple-directives/contracts/B.sol new file mode 100644 index 0000000000..1a3cf3e33b --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-multiple-directives/contracts/B.sol @@ -0,0 +1,6 @@ +pragma abicoder v2; +pragma experimental ABIEncoderV2; + +import "./A.sol"; + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-multiple-directives/expected.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-multiple-directives/expected.sol new file mode 100644 index 0000000000..1f651a708f --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-multiple-directives/expected.sol @@ -0,0 +1,17 @@ +// Sources flattened with hardhat v{HARDHAT_VERSION} https://hardhat.org + +pragma abicoder v2; + +// File contracts/A.sol + +// Original pragma directive: pragma experimental ABIEncoderV2 + +contract Bar {} + + +// File contracts/B.sol + +// Original pragma directive: pragma abicoder v2 +// Original pragma directive: pragma experimental ABIEncoderV2 + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-multiple-directives/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-multiple-directives/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-multiple-directives/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-same-directives/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-same-directives/contracts/A.sol new file mode 100644 index 0000000000..7b100eacc7 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-same-directives/contracts/A.sol @@ -0,0 +1,3 @@ +pragma abicoder v1; + +contract Bar {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-same-directives/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-same-directives/contracts/B.sol new file mode 100644 index 0000000000..3ee4c8a271 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-same-directives/contracts/B.sol @@ -0,0 +1,5 @@ +pragma abicoder v1; + +import "./A.sol"; + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-same-directives/expected.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-same-directives/expected.sol new file mode 100644 index 0000000000..9ace8de5af --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-same-directives/expected.sol @@ -0,0 +1,16 @@ +// Sources flattened with hardhat v{HARDHAT_VERSION} https://hardhat.org + +pragma abicoder v1; + +// File contracts/A.sol + +// Original pragma directive: pragma abicoder v1 + +contract Bar {} + + +// File contracts/B.sol + +// Original pragma directive: pragma abicoder v1 + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-same-directives/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-same-directives/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-pragma-same-directives/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-project/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-project/contracts/A.sol new file mode 100644 index 0000000000..163d519a08 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-project/contracts/A.sol @@ -0,0 +1,3 @@ +pragma solidity ^0.5.1; +import "./B.sol"; +contract A {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-project/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-project/contracts/B.sol new file mode 100644 index 0000000000..2099ddf93b --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-project/contracts/B.sol @@ -0,0 +1,3 @@ +pragma solidity ^0.5.1; +import "./C.sol"; +contract B {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-project/contracts/C.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-project/contracts/C.sol new file mode 100644 index 0000000000..efdd932545 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-project/contracts/C.sol @@ -0,0 +1,2 @@ +pragma solidity ^0.5.1; +contract C {}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-project/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-project/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-project/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-regex-spdx-licenses-and-pragma-directives/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-regex-spdx-licenses-and-pragma-directives/contracts/A.sol new file mode 100644 index 0000000000..cde7d62998 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-regex-spdx-licenses-and-pragma-directives/contracts/A.sol @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: MIT2 this part should be ignored*/ +// SPDX-License-Identifier: Linux2-man-pages-1-para this part should be ignored + +pragma abicoder v2; +contract Bar { + function sayHelloWorld() public pure returns (string memory) { + return "Hello World"; + } +} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-regex-spdx-licenses-and-pragma-directives/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-regex-spdx-licenses-and-pragma-directives/contracts/B.sol new file mode 100644 index 0000000000..5b3c08bcbb --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-regex-spdx-licenses-and-pragma-directives/contracts/B.sol @@ -0,0 +1,14 @@ +// NOTE 1: the file should be flattened manteining the original new lines. +// NOTE 2: do not format the following lines, the spaces and tabs are expected, they should be removed by the regex match. + +pragma abicoder v1; + + +// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception +/* SPDX-License-Identifier: Linux-man-pages-1-para */ + +import "./A.sol"; + + + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-regex-spdx-licenses-and-pragma-directives/expected.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-regex-spdx-licenses-and-pragma-directives/expected.sol new file mode 100644 index 0000000000..eae7c4d31c --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-regex-spdx-licenses-and-pragma-directives/expected.sol @@ -0,0 +1,31 @@ +// Sources flattened with hardhat v{HARDHAT_VERSION} https://hardhat.org + +// SPDX-License-Identifier: Linux-man-pages-1-para AND Linux2-man-pages-1-para AND MIT2 AND MPL-2.0-no-copyleft-exception + +pragma abicoder v2; + +// File contracts/A.sol + +// Original license: SPDX_License_Identifier: MIT2 +// Original license: SPDX_License_Identifier: Linux2-man-pages-1-para + +// Original pragma directive: pragma abicoder v2 +contract Bar { + function sayHelloWorld() public pure returns (string memory) { + return "Hello World"; + } +} + + +// File contracts/B.sol + +// NOTE 1: the file should be flattened manteining the original new lines. +// NOTE 2: do not format the following lines, the spaces and tabs are expected, they should be removed by the regex match. + +// Original pragma directive: pragma abicoder v1 + + +// Original license: SPDX_License_Identifier: MPL-2.0-no-copyleft-exception +// Original license: SPDX_License_Identifier: Linux-man-pages-1-para + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-regex-spdx-licenses-and-pragma-directives/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-regex-spdx-licenses-and-pragma-directives/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-regex-spdx-licenses-and-pragma-directives/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-licenses/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-licenses/contracts/A.sol new file mode 100644 index 0000000000..be0201d1f2 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-licenses/contracts/A.sol @@ -0,0 +1,4 @@ +/* SPDX-License-Identifier: MIT */ +contract Bar { + +} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-licenses/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-licenses/contracts/B.sol new file mode 100644 index 0000000000..db38d8dd37 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-licenses/contracts/B.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: MPL-2.0 +import "./A.sol"; + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-licenses/expected.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-licenses/expected.sol new file mode 100644 index 0000000000..782a7f447c --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-licenses/expected.sol @@ -0,0 +1,17 @@ +// Sources flattened with hardhat v{HARDHAT_VERSION} https://hardhat.org + +// SPDX-License-Identifier: MIT AND MPL-2.0 + +// File contracts/A.sol + +// Original license: SPDX_License_Identifier: MIT +contract Bar { + +} + + +// File contracts/B.sol + +// Original license: SPDX_License_Identifier: MPL-2.0 + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-licenses/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-licenses/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-licenses/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/contracts/A.sol new file mode 100644 index 0000000000..53a0713914 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/contracts/A.sol @@ -0,0 +1,5 @@ +/* SPDX-License-Identifier: MIT */ +/* SPDX-License-Identifier: Linux-man-pages-1-para */ +contract Bar { + +} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/contracts/B.sol new file mode 100644 index 0000000000..6a50b7a61a --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/contracts/B.sol @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception +/* SPDX-License-Identifier: Linux-man-pages-1-para */ +import "./A.sol"; + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/contracts/C.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/contracts/C.sol new file mode 100644 index 0000000000..09e63a393e --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/contracts/C.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception +/* SPDX-License-Identifier: Linux-man-pages-1-para */ +// SPDX-License-Identifier: MPL-1.1 +import "./A.sol"; + +contract Baz {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/expected.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/expected.sol new file mode 100644 index 0000000000..026345ca78 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/expected.sol @@ -0,0 +1,28 @@ +// Sources flattened with hardhat v{HARDHAT_VERSION} https://hardhat.org + +// SPDX-License-Identifier: Linux-man-pages-1-para AND MIT AND MPL-1.1 AND MPL-2.0-no-copyleft-exception + +// File contracts/A.sol + +// Original license: SPDX_License_Identifier: MIT +// Original license: SPDX_License_Identifier: Linux-man-pages-1-para +contract Bar { + +} + + +// File contracts/B.sol + +// Original license: SPDX_License_Identifier: MPL-2.0-no-copyleft-exception +// Original license: SPDX_License_Identifier: Linux-man-pages-1-para + +contract Foo {} + + +// File contracts/C.sol + +// Original license: SPDX_License_Identifier: MPL-2.0-no-copyleft-exception +// Original license: SPDX_License_Identifier: Linux-man-pages-1-para +// Original license: SPDX_License_Identifier: MPL-1.1 + +contract Baz {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-different-multiple-licenses/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/contracts/A.sol new file mode 100644 index 0000000000..8c515147fd --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/contracts/A.sol @@ -0,0 +1,6 @@ +/* SPDX-License-Identifier: MIT */ +/* SPDX-License-Identifier: Linux-man-pages-1-para */ + +pragma abicoder v1; + +contract Bar {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/contracts/B.sol new file mode 100644 index 0000000000..ffcc03befb --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/contracts/B.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception +/* SPDX-License-Identifier: Linux-man-pages-1-para */ + +pragma abicoder v2; +pragma experimental ABIEncoderV2; + +import "./A.sol"; + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/contracts/C.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/contracts/C.sol new file mode 100644 index 0000000000..7eeaee5bc1 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/contracts/C.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MPL-2.0-no-copyleft-exception +/* SPDX-License-Identifier: Linux-man-pages-1-para */ +// SPDX-License-Identifier: MPL-1.1 + +pragma abicoder v2; + +import "./A.sol"; + +contract Baz {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/expected.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/expected.sol new file mode 100644 index 0000000000..7c765c63bc --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/expected.sol @@ -0,0 +1,36 @@ +// Sources flattened with hardhat v{HARDHAT_VERSION} https://hardhat.org + +// SPDX-License-Identifier: Linux-man-pages-1-para AND MIT AND MPL-1.1 AND MPL-2.0-no-copyleft-exception + +pragma abicoder v2; + +// File contracts/A.sol + +// Original license: SPDX_License_Identifier: MIT +// Original license: SPDX_License_Identifier: Linux-man-pages-1-para + +// Original pragma directive: pragma abicoder v1 + +contract Bar {} + + +// File contracts/B.sol + +// Original license: SPDX_License_Identifier: MPL-2.0-no-copyleft-exception +// Original license: SPDX_License_Identifier: Linux-man-pages-1-para + +// Original pragma directive: pragma abicoder v2 +// Original pragma directive: pragma experimental ABIEncoderV2 + +contract Foo {} + + +// File contracts/C.sol + +// Original license: SPDX_License_Identifier: MPL-2.0-no-copyleft-exception +// Original license: SPDX_License_Identifier: Linux-man-pages-1-para +// Original license: SPDX_License_Identifier: MPL-1.1 + +// Original pragma directive: pragma abicoder v2 + +contract Baz {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-licenses-and-pragma-directives/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-licenses/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-licenses/contracts/A.sol new file mode 100644 index 0000000000..be0201d1f2 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-licenses/contracts/A.sol @@ -0,0 +1,4 @@ +/* SPDX-License-Identifier: MIT */ +contract Bar { + +} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-licenses/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-licenses/contracts/B.sol new file mode 100644 index 0000000000..e3a83c3b64 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-licenses/contracts/B.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: MIT +import "./A.sol"; + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-licenses/expected.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-licenses/expected.sol new file mode 100644 index 0000000000..493d2fdab7 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-licenses/expected.sol @@ -0,0 +1,17 @@ +// Sources flattened with hardhat v{HARDHAT_VERSION} https://hardhat.org + +// SPDX-License-Identifier: MIT + +// File contracts/A.sol + +// Original license: SPDX_License_Identifier: MIT +contract Bar { + +} + + +// File contracts/B.sol + +// Original license: SPDX_License_Identifier: MIT + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-licenses/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-licenses/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-licenses/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-multiple-licenses/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-multiple-licenses/contracts/A.sol new file mode 100644 index 0000000000..53a0713914 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-multiple-licenses/contracts/A.sol @@ -0,0 +1,5 @@ +/* SPDX-License-Identifier: MIT */ +/* SPDX-License-Identifier: Linux-man-pages-1-para */ +contract Bar { + +} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-multiple-licenses/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-multiple-licenses/contracts/B.sol new file mode 100644 index 0000000000..da75fccd26 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-multiple-licenses/contracts/B.sol @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT +/* SPDX-License-Identifier: Linux-man-pages-1-para */ +import "./A.sol"; + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-multiple-licenses/expected.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-multiple-licenses/expected.sol new file mode 100644 index 0000000000..b744d7065a --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-multiple-licenses/expected.sol @@ -0,0 +1,19 @@ +// Sources flattened with hardhat v{HARDHAT_VERSION} https://hardhat.org + +// SPDX-License-Identifier: Linux-man-pages-1-para AND MIT + +// File contracts/A.sol + +// Original license: SPDX_License_Identifier: MIT +// Original license: SPDX_License_Identifier: Linux-man-pages-1-para +contract Bar { + +} + + +// File contracts/B.sol + +// Original license: SPDX_License_Identifier: MIT +// Original license: SPDX_License_Identifier: Linux-man-pages-1-para + +contract Foo {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-multiple-licenses/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-multiple-licenses/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-spdx-same-multiple-licenses/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/contracts/A.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/contracts/A.sol new file mode 100644 index 0000000000..1b6b07124b --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/contracts/A.sol @@ -0,0 +1,3 @@ +import "./B.sol"; + +contract A {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/contracts/B.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/contracts/B.sol new file mode 100644 index 0000000000..08a34537c7 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/contracts/B.sol @@ -0,0 +1,3 @@ +import "./C.sol"; + +contract B {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/contracts/C.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/contracts/C.sol new file mode 100644 index 0000000000..7a91c527de --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/contracts/C.sol @@ -0,0 +1,3 @@ +pragma abicoder v1; + +contract C {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/contracts/D.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/contracts/D.sol new file mode 100644 index 0000000000..0fbf58611b --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/contracts/D.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: MIT +pragma abicoder v2; + +contract D {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/expected.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/expected.sol new file mode 100644 index 0000000000..983ede77ba --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/expected.sol @@ -0,0 +1,29 @@ +// Sources flattened with hardhat v{HARDHAT_VERSION} https://hardhat.org + +// SPDX-License-Identifier: MIT + +pragma abicoder v2; + +// File contracts/C.sol + +// Original pragma directive: pragma abicoder v1 + +contract C {} + + +// File contracts/B.sol + +contract B {} + + +// File contracts/A.sol + +contract A {} + + +// File contracts/D.sol + +// Original license: SPDX_License_Identifier: MIT +// Original pragma directive: pragma abicoder v2 + +contract D {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/contracts-task-flatten/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/multiline-import-project/contracts/ImportMultiline.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/multiline-import-project/contracts/ImportMultiline.sol new file mode 100644 index 0000000000..94e834e2f9 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/multiline-import-project/contracts/ImportMultiline.sol @@ -0,0 +1,11 @@ +pragma solidity ^0.5.6 + +import { + Import +} from "@scope/package/contracts/nested/dir/Importer.sol"; + +import { + ImportTrailingWhitespace +} from "@scope/package/contracts/nested/dir/Importer.sol"; + +contract ImportMultiline {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/multiline-import-project/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/multiline-import-project/hardhat.config.js new file mode 100644 index 0000000000..38f2a55388 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/multiline-import-project/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.7.3", +}; diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/multiline-import-project/node_modules/@scope/package/contracts/nested/dir/Importer.sol b/packages/hardhat-core/test/fixture-projects/flatten-task/multiline-import-project/node_modules/@scope/package/contracts/nested/dir/Importer.sol new file mode 100644 index 0000000000..0d3f904499 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/multiline-import-project/node_modules/@scope/package/contracts/nested/dir/Importer.sol @@ -0,0 +1,3 @@ +pragma solidity ^0.5.6 + +contract Importer {} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/multiline-import-project/node_modules/@scope/package/package.json b/packages/hardhat-core/test/fixture-projects/flatten-task/multiline-import-project/node_modules/@scope/package/package.json new file mode 100644 index 0000000000..11eb3e9d45 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/multiline-import-project/node_modules/@scope/package/package.json @@ -0,0 +1,4 @@ +{ + "name": "@scope/package", + "version": "1.2.3" +} diff --git a/packages/hardhat-core/test/fixture-projects/flatten-task/no-contracts/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/flatten-task/no-contracts/hardhat.config.js new file mode 100644 index 0000000000..565dd811da --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/flatten-task/no-contracts/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-core/test/fixture-projects/hardhat-network-fork-from-old-block/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/hardhat-network-fork-from-old-block/hardhat.config.js index e8832e44ec..41ddc2d38c 100644 --- a/packages/hardhat-core/test/fixture-projects/hardhat-network-fork-from-old-block/hardhat.config.js +++ b/packages/hardhat-core/test/fixture-projects/hardhat-network-fork-from-old-block/hardhat.config.js @@ -2,7 +2,7 @@ module.exports = { networks: { hardhat: { forking: { - url: process.env.INFURA_URL, + url: process.env.ALCHEMY_URL, blockNumber: 2463000, }, }, diff --git a/packages/hardhat-core/test/fixture-projects/hardhat-network-fork-tangerine-whistle/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/hardhat-network-fork-tangerine-whistle/hardhat.config.js index 6f610736cc..ea9c1f0cd4 100644 --- a/packages/hardhat-core/test/fixture-projects/hardhat-network-fork-tangerine-whistle/hardhat.config.js +++ b/packages/hardhat-core/test/fixture-projects/hardhat-network-fork-tangerine-whistle/hardhat.config.js @@ -3,7 +3,7 @@ module.exports = { hardhat: { hardfork: "tangerineWhistle", forking: { - url: process.env.INFURA_URL, + url: process.env.ALCHEMY_URL, }, }, }, diff --git a/packages/hardhat-core/test/fixture-projects/memory-safe-console/.gitignore b/packages/hardhat-core/test/fixture-projects/memory-safe-console/.gitignore new file mode 100644 index 0000000000..e7f801166c --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/memory-safe-console/.gitignore @@ -0,0 +1,2 @@ +artifacts/ +cache/ diff --git a/packages/hardhat-core/test/fixture-projects/memory-safe-console/contracts/Test.sol b/packages/hardhat-core/test/fixture-projects/memory-safe-console/contracts/Test.sol new file mode 100644 index 0000000000..19f0e40ed0 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/memory-safe-console/contracts/Test.sol @@ -0,0 +1,11 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity 0.8.18; + +import "hardhat/console.sol"; + +// this file won't compile if viaIR is enabled and `console.sol` is not memory-safe +contract Test { + function logSum(uint256 arg0, uint256 arg1, uint256 arg2, uint256 arg3, uint256 arg4, uint256 arg5, uint256 arg6, uint256 arg7, uint256 arg8, uint256 arg9, uint256 arg10, uint256 arg11, uint256 arg12, uint256 arg13, uint256 arg14, uint256 arg15, uint256 arg16) public view { + console.log(arg0 + arg1 + arg2 + arg3 + arg4 + arg5 + arg6 + arg7 + arg8 + arg9 + arg10 + arg11 + arg12 + arg13 + arg14 + arg15 + arg16); + } +} diff --git a/packages/hardhat-core/test/fixture-projects/memory-safe-console/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/memory-safe-console/hardhat.config.js new file mode 100644 index 0000000000..5e934e4918 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/memory-safe-console/hardhat.config.js @@ -0,0 +1,11 @@ +module.exports = { + solidity: { + version: "0.8.18", + settings: { + optimizer: { + enabled: true, + }, + viaIR: true, + }, + }, +}; diff --git a/packages/hardhat-core/test/fixture-projects/memory-safe-console/package.json b/packages/hardhat-core/test/fixture-projects/memory-safe-console/package.json new file mode 100644 index 0000000000..4a1f02a638 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/memory-safe-console/package.json @@ -0,0 +1,3 @@ +{ + "name": "memory-safe-console" +} diff --git a/packages/hardhat-core/test/fixture-projects/project-0.8.20-override-evm-version/.gitignore b/packages/hardhat-core/test/fixture-projects/project-0.8.20-override-evm-version/.gitignore new file mode 100644 index 0000000000..e7f801166c --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/project-0.8.20-override-evm-version/.gitignore @@ -0,0 +1,2 @@ +artifacts/ +cache/ diff --git a/packages/hardhat-core/test/fixture-projects/project-0.8.20-override-evm-version/contracts/Lock.sol b/packages/hardhat-core/test/fixture-projects/project-0.8.20-override-evm-version/contracts/Lock.sol new file mode 100644 index 0000000000..475d7cd83d --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/project-0.8.20-override-evm-version/contracts/Lock.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.20; + +// Uncomment this line to use console.log +// import "hardhat/console.sol"; + +contract Lock { + uint public unlockTime; + address payable public owner; + + event Withdrawal(uint amount, uint when); + + constructor(uint _unlockTime) payable { + require( + block.timestamp < _unlockTime, + "Unlock time should be in the future" + ); + + unlockTime = _unlockTime; + owner = payable(msg.sender); + } + + function withdraw() public { + // Uncomment this line, and the import of "hardhat/console.sol", to print a log in your terminal + // console.log("Unlock time is %o and block timestamp is %o", unlockTime, block.timestamp); + + require(block.timestamp >= unlockTime, "You can't withdraw yet"); + require(msg.sender == owner, "You aren't the owner"); + + emit Withdrawal(address(this).balance, block.timestamp); + + owner.transfer(address(this).balance); + } +} diff --git a/packages/hardhat-core/test/fixture-projects/project-0.8.20-override-evm-version/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/project-0.8.20-override-evm-version/hardhat.config.js new file mode 100644 index 0000000000..7bc6ff50f4 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/project-0.8.20-override-evm-version/hardhat.config.js @@ -0,0 +1,5 @@ +module.exports = { + solidity: { + compilers: [{ version: "0.8.20", settings: { evmVersion: "shanghai" } }], + }, +}; diff --git a/packages/hardhat-core/test/fixture-projects/project-0.8.20/.gitignore b/packages/hardhat-core/test/fixture-projects/project-0.8.20/.gitignore new file mode 100644 index 0000000000..e7f801166c --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/project-0.8.20/.gitignore @@ -0,0 +1,2 @@ +artifacts/ +cache/ diff --git a/packages/hardhat-core/test/fixture-projects/project-0.8.20/contracts/Lock.sol b/packages/hardhat-core/test/fixture-projects/project-0.8.20/contracts/Lock.sol new file mode 100644 index 0000000000..475d7cd83d --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/project-0.8.20/contracts/Lock.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.20; + +// Uncomment this line to use console.log +// import "hardhat/console.sol"; + +contract Lock { + uint public unlockTime; + address payable public owner; + + event Withdrawal(uint amount, uint when); + + constructor(uint _unlockTime) payable { + require( + block.timestamp < _unlockTime, + "Unlock time should be in the future" + ); + + unlockTime = _unlockTime; + owner = payable(msg.sender); + } + + function withdraw() public { + // Uncomment this line, and the import of "hardhat/console.sol", to print a log in your terminal + // console.log("Unlock time is %o and block timestamp is %o", unlockTime, block.timestamp); + + require(block.timestamp >= unlockTime, "You can't withdraw yet"); + require(msg.sender == owner, "You aren't the owner"); + + emit Withdrawal(address(this).balance, block.timestamp); + + owner.transfer(address(this).balance); + } +} diff --git a/packages/hardhat-core/test/fixture-projects/project-0.8.20/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/project-0.8.20/hardhat.config.js new file mode 100644 index 0000000000..f6140ca394 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/project-0.8.20/hardhat.config.js @@ -0,0 +1,3 @@ +module.exports = { + solidity: "0.8.20", +}; diff --git a/packages/hardhat-core/test/fixture-projects/resolver-tests-project/node_modules/linked-library b/packages/hardhat-core/test/fixture-projects/resolver-tests-project/node_modules/linked-library index 53bed9684d..d6bf720fe4 120000 --- a/packages/hardhat-core/test/fixture-projects/resolver-tests-project/node_modules/linked-library +++ b/packages/hardhat-core/test/fixture-projects/resolver-tests-project/node_modules/linked-library @@ -1 +1 @@ -../library \ No newline at end of file +../library/ \ No newline at end of file diff --git a/packages/hardhat-core/test/fixture-projects/scoped-tasks/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/scoped-tasks/hardhat.config.js new file mode 100644 index 0000000000..ed1443781a --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/scoped-tasks/hardhat.config.js @@ -0,0 +1,41 @@ +scope("my-scope", "my-scope description").task("my-task", async () => { + return "my-scope/my-task"; +}); + +scope("my-scope").subtask("my-subtask", async () => { + return "my-scope/my-subtask"; +}); + +scope("my-scope").task("overriden-task", async () => { + return "my-scope/overridden-task"; +}); + +scope("my-scope").task("overridden-task", async () => { + return "overridden: my-scope/overridden-task"; +}); + +scope("my-scope").subtask("my-overridden-subtask", async () => { + return "my-scope/my-overridden-subtask"; +}); + +scope("my-scope").subtask("my-overridden-subtask", async () => { + return "overridden: my-scope/my-overridden-subtask"; +}); + +scope("another-scope", "another-scope description").task( + "my-task", + async () => { + return "another-scope/my-task"; + } +); + +scope("another-scope", "overridden: another-scope description").task( + "another-task", + async () => { + return "another-scope/another-task"; + } +); + +module.exports = { + solidity: "0.8.3", +}; diff --git a/packages/hardhat-core/test/fixture-projects/scoped-tasks/package.json b/packages/hardhat-core/test/fixture-projects/scoped-tasks/package.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/scoped-tasks/package.json @@ -0,0 +1 @@ +{} diff --git a/packages/hardhat-core/test/fixture-projects/solidity-config-warnings/multiple-unsupported-solc.js b/packages/hardhat-core/test/fixture-projects/solidity-config-warnings/multiple-unsupported-solc.js index 68f4e5aebb..5c9acaeb05 100644 --- a/packages/hardhat-core/test/fixture-projects/solidity-config-warnings/multiple-unsupported-solc.js +++ b/packages/hardhat-core/test/fixture-projects/solidity-config-warnings/multiple-unsupported-solc.js @@ -1,11 +1,16 @@ +const { + getNextUnsupportedVersion, + getNextNextUnsupportedVersion, +} = require("../../internal/hardhat-network/stack-traces/compilers-list"); + module.exports = { solidity: { compilers: [ { - version: "0.8.19", + version: getNextUnsupportedVersion(), }, { - version: "0.8.20", + version: getNextNextUnsupportedVersion(), }, ], }, diff --git a/packages/hardhat-core/test/fixture-projects/solidity-config-warnings/unsupported-new-solc.js b/packages/hardhat-core/test/fixture-projects/solidity-config-warnings/unsupported-new-solc.js index aa3527a6b0..06485062c0 100644 --- a/packages/hardhat-core/test/fixture-projects/solidity-config-warnings/unsupported-new-solc.js +++ b/packages/hardhat-core/test/fixture-projects/solidity-config-warnings/unsupported-new-solc.js @@ -1,3 +1,7 @@ +const { + getNextUnsupportedVersion, +} = require("../../internal/hardhat-network/stack-traces/compilers-list"); + module.exports = { - solidity: "0.8.19", + solidity: getNextUnsupportedVersion(), }; diff --git a/packages/hardhat-core/test/fixture-projects/solidity-config-warnings/unsupported-solc-in-override.js b/packages/hardhat-core/test/fixture-projects/solidity-config-warnings/unsupported-solc-in-override.js index 77c99177d4..cba1217c70 100644 --- a/packages/hardhat-core/test/fixture-projects/solidity-config-warnings/unsupported-solc-in-override.js +++ b/packages/hardhat-core/test/fixture-projects/solidity-config-warnings/unsupported-solc-in-override.js @@ -1,3 +1,7 @@ +const { + getNextUnsupportedVersion, +} = require("../../internal/hardhat-network/stack-traces/compilers-list"); + module.exports = { solidity: { compilers: [ @@ -6,7 +10,7 @@ module.exports = { }, ], overrides: { - "contracts/Foo.sol": { version: "0.8.19" }, + "contracts/Foo.sol": { version: getNextUnsupportedVersion() }, }, }, }; diff --git a/packages/hardhat-core/test/fixture-projects/vars/setup-error-to-throw/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/vars/setup-error-to-throw/hardhat.config.js new file mode 100644 index 0000000000..f2a081fe1f --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/vars/setup-error-to-throw/hardhat.config.js @@ -0,0 +1 @@ +throw new Error("Simulate error to throw during vars setup"); diff --git a/packages/hardhat-core/test/fixture-projects/vars/setup-filled/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/vars/setup-filled/hardhat.config.js new file mode 100644 index 0000000000..bd44dbe763 --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/vars/setup-filled/hardhat.config.js @@ -0,0 +1,5 @@ +// These keys are added in the test +vars.get("key1"); +vars.has("key2"); + +module.exports = {}; diff --git a/packages/hardhat-core/test/fixture-projects/vars/setup-to-fill/hardhat.config.js b/packages/hardhat-core/test/fixture-projects/vars/setup-to-fill/hardhat.config.js new file mode 100644 index 0000000000..457d5c12be --- /dev/null +++ b/packages/hardhat-core/test/fixture-projects/vars/setup-to-fill/hardhat.config.js @@ -0,0 +1,46 @@ +// +// The following keys are not stored in the variables file +// + +// Same key +vars.has("nonExistingKey1"); +vars.get("nonExistingKey1"); + +vars.get("nonExistingKey2", "defaultValue2"); + +vars.get("nonExistingKey3"); + +vars.has("nonExistingKey4"); + +// vars.get "overwrites" vars.get with default value +vars.get("nonExistingKey5", "defaultValue5"); +vars.get("nonExistingKey5"); + +// +// The following keys are stored in the variables file +// + +// Same key +vars.has("key1"); +vars.get("key1"); + +// Key exists and there is a default value +vars.get("key2", "defaultValue"); + +vars.get("key3"); + +vars.has("key4"); + +// vars.get "overwrites" vars.get with default value +vars.get("key5", "defaultValue"); +vars.get("key5"); + +// +// The following keys are passed as ENV variables +// +vars.get("KEY_ENV_1"); +vars.has("KEY_ENV_2"); + +module.exports = { + solidity: "0.8.3", +}; diff --git a/packages/hardhat-core/test/helpers/project.ts b/packages/hardhat-core/test/helpers/project.ts index 880fdbb0d9..9e4a568368 100644 --- a/packages/hardhat-core/test/helpers/project.ts +++ b/packages/hardhat-core/test/helpers/project.ts @@ -29,11 +29,13 @@ export function useFixtureProject(projectName: string) { export async function getFixtureProjectPath( projectName: string ): Promise { + const normalizedProjectName = projectName.replaceAll("/", path.sep); + const projectPath = path.join( __dirname, "..", "fixture-projects", - projectName + normalizedProjectName ); if (!(await fsExtra.pathExists(projectPath))) { throw new Error(`Fixture project ${projectName} doesn't exist`); diff --git a/packages/hardhat-core/test/internal/artifacts.ts b/packages/hardhat-core/test/internal/artifacts.ts index 7df045c5ad..2861a15892 100644 --- a/packages/hardhat-core/test/internal/artifacts.ts +++ b/packages/hardhat-core/test/internal/artifacts.ts @@ -1309,6 +1309,52 @@ describe("Artifacts class", function () { }); }); }); + + describe("artifactExists", function () { + useTmpDir("artifacts"); + + it("should check that the artifact exists", async function () { + const artifact = getArtifactFromContractOutput( + "source.sol", + "Interface", + { + ...COMPILER_OUTPUTS.Interface, + evm: undefined, + } + ); + + const artifacts = new Artifacts(this.tmpDir); + await artifacts.saveArtifactAndDebugFile(artifact, ""); + + // FQN + assert.isTrue(await artifacts.artifactExists("source.sol:Interface")); + // non-FQN + assert.isTrue(await artifacts.artifactExists("Interface")); + }); + + it("should check that the artifact doesn't exist", async function () { + const artifact = getArtifactFromContractOutput( + "source.sol", + "Interface", + { + ...COMPILER_OUTPUTS.Interface, + evm: undefined, + } + ); + + const artifacts = new Artifacts(this.tmpDir); + await artifacts.saveArtifactAndDebugFile(artifact, ""); + + // FQN, missing file + assert.isFalse(await artifacts.artifactExists("invalid/path.sol:A")); + // FQN, missing artifact + assert.isFalse(await artifacts.artifactExists("source.sol:A")); + // FQN, wrong casing + assert.isFalse(await artifacts.artifactExists("source.sol:interface")); + // non-FQN, missing artifact + assert.isFalse(await artifacts.artifactExists("A")); + }); + }); }); // TODO: All of these outputs have their evm.bytecode duplicated as diff --git a/packages/hardhat-core/test/internal/cli/ArgumentsParser.ts b/packages/hardhat-core/test/internal/cli/ArgumentsParser.ts index 3e2bb95a26..21ca853a0c 100644 --- a/packages/hardhat-core/test/internal/cli/ArgumentsParser.ts +++ b/packages/hardhat-core/test/internal/cli/ArgumentsParser.ts @@ -19,6 +19,7 @@ import { TaskDefinition, } from "../../../src/types"; import { expectHardhatError } from "../../helpers/errors"; +import { TASK_COMPILE } from "../../../src/builtin-tasks/task-names"; describe("ArgumentsParser", () => { let argumentsParser: ArgumentsParser; @@ -104,7 +105,7 @@ describe("ArgumentsParser", () => { }); describe("hardhat arguments", () => { - it("should parse hardhat arguments with task", () => { + it("should parse hardhat arguments with compile task", () => { const rawCLAs: string[] = [ "--show-stack-traces", "--network", @@ -113,21 +114,22 @@ describe("ArgumentsParser", () => { "--task-param", ]; - const { hardhatArguments, taskName, unparsedCLAs } = + const { hardhatArguments, scopeOrTaskName, allUnparsedCLAs } = argumentsParser.parseHardhatArguments( HARDHAT_PARAM_DEFINITIONS, envArgs, rawCLAs ); - assert.equal(taskName, "compile"); + assert.isTrue(scopeOrTaskName === TASK_COMPILE); assert.equal(hardhatArguments.showStackTraces, true); assert.equal(hardhatArguments.network, "local"); assert.equal(hardhatArguments.emoji, false); - assert.equal(unparsedCLAs.length, 1); - assert.equal("--task-param", unparsedCLAs[0]); + assert.equal(allUnparsedCLAs.length, 2); + assert.equal("compile", allUnparsedCLAs[0]); + assert.equal("--task-param", allUnparsedCLAs[1]); }); - it("should parse hardhat arguments after taskname", () => { + it("should parse hardhat arguments after compile taskname", () => { const rawCLAs: string[] = [ "compile", "--task-param", @@ -136,18 +138,65 @@ describe("ArgumentsParser", () => { "local", ]; - const { hardhatArguments, taskName, unparsedCLAs } = + const { hardhatArguments, scopeOrTaskName, allUnparsedCLAs } = argumentsParser.parseHardhatArguments( HARDHAT_PARAM_DEFINITIONS, envArgs, rawCLAs ); - assert.equal(taskName, "compile"); + assert.isTrue(scopeOrTaskName === TASK_COMPILE); assert.equal(hardhatArguments.showStackTraces, true); assert.equal(hardhatArguments.network, "local"); assert.equal(hardhatArguments.emoji, false); - assert.equal(unparsedCLAs.length, 1); - assert.equal("--task-param", unparsedCLAs[0]); + assert.equal(allUnparsedCLAs.length, 2); + assert.equal("--task-param", allUnparsedCLAs[1]); + }); + + it("should parse hardhat arguments with non-compile task", () => { + const rawCLAs: string[] = [ + "--show-stack-traces", + "--network", + "local", + "compile2", + "--task-param", + ]; + + const { hardhatArguments, scopeOrTaskName, allUnparsedCLAs } = + argumentsParser.parseHardhatArguments( + HARDHAT_PARAM_DEFINITIONS, + envArgs, + rawCLAs + ); + assert.isFalse(scopeOrTaskName === TASK_COMPILE); + assert.equal(hardhatArguments.showStackTraces, true); + assert.equal(hardhatArguments.network, "local"); + assert.equal(hardhatArguments.emoji, false); + assert.equal(allUnparsedCLAs.length, 2); + assert.equal("compile2", allUnparsedCLAs[0]); + assert.equal("--task-param", allUnparsedCLAs[1]); + }); + + it("should parse hardhat arguments after non-compile taskname", () => { + const rawCLAs: string[] = [ + "compile2", + "--task-param", + "--show-stack-traces", + "--network", + "local", + ]; + + const { hardhatArguments, scopeOrTaskName, allUnparsedCLAs } = + argumentsParser.parseHardhatArguments( + HARDHAT_PARAM_DEFINITIONS, + envArgs, + rawCLAs + ); + assert.isFalse(scopeOrTaskName === TASK_COMPILE); + assert.equal(hardhatArguments.showStackTraces, true); + assert.equal(hardhatArguments.network, "local"); + assert.equal(hardhatArguments.emoji, false); + assert.equal(allUnparsedCLAs.length, 2); + assert.equal("--task-param", allUnparsedCLAs[1]); }); it("should fail trying to parse task arguments before taskname", () => { @@ -239,6 +288,34 @@ describe("ArgumentsParser", () => { ); }); + it("should fail to parse a hardhat argument without a value when a task is not specified", () => { + const rawCLAs: string[] = ["--network"]; + expectHardhatError( + () => + argumentsParser.parseHardhatArguments( + HARDHAT_PARAM_DEFINITIONS, + envArgs, + rawCLAs + ), + ERRORS.ARGUMENTS.MISSING_TASK_ARGUMENT, + "The '--network' parameter of task 'help' expects a value, but none was passed." + ); + }); + + it("should fail to parse a hardhat argument without a value when a task is specified", () => { + const rawCLAs: string[] = ["compile", "--network"]; + expectHardhatError( + () => + argumentsParser.parseHardhatArguments( + HARDHAT_PARAM_DEFINITIONS, + envArgs, + rawCLAs + ), + ERRORS.ARGUMENTS.MISSING_TASK_ARGUMENT, + "The '--network' parameter of task 'compile' expects a value, but none was passed." + ); + }); + it("should only add non-present arguments", () => { const hardhatArguments = argumentsParser["_addHardhatDefaultArguments"]( HARDHAT_PARAM_DEFINITIONS, diff --git a/packages/hardhat-core/test/internal/cli/autocomplete.ts b/packages/hardhat-core/test/internal/cli/autocomplete.ts index 24703a8e9f..661cb0a9dc 100644 --- a/packages/hardhat-core/test/internal/cli/autocomplete.ts +++ b/packages/hardhat-core/test/internal/cli/autocomplete.ts @@ -66,6 +66,11 @@ const coreTasks = [ description: "Runs mocha tests", name: "test", }, + // 'vars' is a scope + { + description: "Manage your configuration variables", + name: "vars", + }, ]; const verboseParam = { @@ -151,6 +156,17 @@ describe("autocomplete", function () { expect(suggestions).to.have.deep.members(coreTasks); }); + it("should suggest all tasks' names that starts with the correct letters", async () => { + const suggestions = await complete("hh t"); + + expect(suggestions).same.deep.members([ + { + name: "test", + description: "Runs mocha tests", + }, + ]); + }); + it("should suggest all core params after a -", async () => { const suggestions = await complete("hh -"); @@ -347,6 +363,14 @@ describe("autocomplete", function () { expect(suggestions).to.equal(HARDHAT_COMPLETE_FILES); }); + + it("should not confuse arguments as scopes", async () => { + // "flatten" should not be identified as scope and "contracts/foo.sol" should + // not be identified as task + const suggestions = await complete("hh flatten contracts/foo.sol"); + + expect(suggestions).to.equal(HARDHAT_COMPLETE_FILES); + }); }); describe("custom tasks", () => { @@ -402,14 +426,14 @@ describe("autocomplete", function () { }); }); - describe("overriden task", () => { - useFixtureProject("autocomplete/overriden-task"); + describe("overridden task", () => { + useFixtureProject("autocomplete/overridden-task"); after(() => { resetHardhatContext(); }); - it("should work when a task is overriden", async () => { + it("should work when a task is overridden", async () => { const suggestions = await complete("hh "); expect(suggestions).to.have.deep.members(coreTasks); }); @@ -420,4 +444,196 @@ describe("autocomplete", function () { expect(suggestions).to.have.deep.members(coreTasks); }); }); + + describe("scopes", () => { + describe("autocomplete the scope'tasks", () => { + useFixtureProject("autocomplete/basic-project"); + + it("should suggest the tasks assigned to a scope", async () => { + const suggestions = await complete("hh vars "); + + expect(suggestions).same.deep.members([ + { + description: "Set the value of a configuration variable", + name: "set", + }, + { + description: "Get the value of a configuration variable", + name: "get", + }, + { + description: "List all the configuration variables", + name: "list", + }, + { + description: "Delete a configuration variable", + name: "delete", + }, + { + description: + "Show the path of the file where all the configuration variables are stored", + name: "path", + }, + { + description: + "Show how to setup the configuration variables used by this project", + name: "setup", + }, + ]); + }); + }); + + describe("custom scopes", () => { + useFixtureProject("autocomplete/custom-scopes"); + + after(() => { + resetHardhatContext(); + }); + + it("should include custom scopes", async () => { + const suggestions = await complete("hh "); + + expect(suggestions).to.have.deep.members([ + ...coreTasks, + { + name: "scope1", + description: "", + }, + { + name: "scope-2", + description: "scope-2 description", + }, + { + name: "scope-3", + description: "scope-3 description", + }, + ]); + }); + + it("should complete scopes after a - in the middle of the scope name", async () => { + const suggestions = await complete("hh scope-"); + + expect(suggestions).to.have.deep.members([ + { + name: "scope-2", + description: "scope-2 description", + }, + { + name: "scope-3", + description: "scope-3 description", + }, + ]); + }); + + it("should autocomplete with the scope's tasks", async () => { + const suggestions = await complete("hh scope1 "); + + expect(suggestions).to.have.deep.members([ + { + name: "task1", + description: "task1 description", + }, + { + name: "task2", + description: "task2 description", + }, + ]); + }); + + it("should not autocomplete with the scope's tasks, because there are no tasks assigned", async () => { + const suggestions = await complete("hh scope-2 "); + + expect(suggestions).to.have.deep.members([]); + }); + + it("should autocomplete with the scope's task's flags and the core parameters", async () => { + const suggestions = await complete("hh scope1 task2 --flag --"); + + expect(suggestions).to.have.deep.members([ + { + name: "--flag1", + description: "flag1 description", + }, + { + name: "--flag2", + description: "", + }, + { + name: "--tmpflag", + description: "", + }, + ...coreParams, + ]); + }); + + it("should autocomplete with the matching flags", async () => { + const suggestions = await complete("hh scope1 task2 --fla"); + + expect(suggestions).to.have.deep.members([ + { + name: "--flag1", + description: "flag1 description", + }, + { + name: "--flag2", + description: "", + }, + { + description: "Generate a flamegraph of your Hardhat tasks", + name: "--flamegraph", + }, + ]); + }); + + it("should autocomplete with the matching flags that haven't been used yet", async () => { + const suggestions = await complete( + "hh scope1 --flamegraph task2 --fla" + ); + + expect(suggestions).to.have.deep.members([ + { + name: "--flag1", + description: "flag1 description", + }, + { + name: "--flag2", + description: "", + }, + ]); + }); + + it("should autocomplete with a scope's task that has the same name as the scope itself", async () => { + const suggestions = await complete("hh scope-3 s"); + + expect(suggestions).to.have.deep.members([ + { + name: "scope-3", + description: "task description", + }, + ]); + }); + + it("should autocomplete with a scope's task that has the same name as a stand alone task", async () => { + const suggestions = await complete("hh scope-3 c"); + + expect(suggestions).to.have.deep.members([ + { + name: "compile", + description: "", + }, + ]); + }); + + it("should autocomplete with a scope's task that with the task being declared after a flag", async () => { + const suggestions = await complete("hh scope-3 --verbose c"); + + expect(suggestions).to.have.deep.members([ + { + name: "compile", + description: "", + }, + ]); + }); + }); + }); }); diff --git a/packages/hardhat-core/test/internal/cli/vars/vars.ts b/packages/hardhat-core/test/internal/cli/vars/vars.ts new file mode 100644 index 0000000000..ba83c1d1bc --- /dev/null +++ b/packages/hardhat-core/test/internal/cli/vars/vars.ts @@ -0,0 +1,388 @@ +import type Sinon from "sinon"; + +import "mocha"; +import fs from "fs-extra"; +import * as os from "os"; +import sinon, { SinonSandbox } from "sinon"; +import { assert, expect } from "chai"; +import chalk from "chalk"; +import enquirer from "enquirer"; +import { HardhatContext } from "../../../../src/internal/context"; +import { handleVars } from "../../../../src/internal/cli/vars"; +import { resetHardhatContext } from "../../../../src/internal/reset"; +import * as globalDir from "../../../../src/internal/util/global-dir"; +import { useFixtureProject } from "../../../helpers/project"; + +describe("vars", () => { + describe("handleVars", () => { + const TMP_FILE_PATH = `${os.tmpdir()}/test-vars.json`; + let ctx: HardhatContext; + let sandbox: SinonSandbox; + let spyConsoleLog: Sinon.SinonStub; + let spyConsoleWarn: Sinon.SinonStub; + let stubGetVarsFilePath: Sinon.SinonStub; + + before(() => { + // Stub functions + sandbox = sinon.createSandbox(); + + spyConsoleLog = sandbox.stub(console, "log"); + spyConsoleWarn = sandbox.stub(console, "warn"); + + stubGetVarsFilePath = sandbox.stub(globalDir, "getVarsFilePath"); + stubGetVarsFilePath.returns(TMP_FILE_PATH); + }); + + after(() => { + spyConsoleLog.restore(); + spyConsoleWarn.restore(); + stubGetVarsFilePath.restore(); + }); + + afterEach(() => { + spyConsoleLog.reset(); + spyConsoleWarn.reset(); + }); + + beforeEach(() => { + fs.removeSync(TMP_FILE_PATH); + + ctx = HardhatContext.createHardhatContext(); + + ctx.varsManager.set("key1", "val1"); + ctx.varsManager.set("key2", "val2"); + ctx.varsManager.set("key3", "val3"); + ctx.varsManager.set("key4", "val4"); + ctx.varsManager.set("key5", "val5"); + }); + + afterEach(() => { + resetHardhatContext(); + }); + + describe("set", () => { + it("should set a new value when both key and value are passed", async () => { + const code = await handleVars( + ["vars", "set", "newKey", "newVal"], + undefined + ); + + expect(ctx.varsManager.get("newKey")).equals("newVal"); + expect(code).equals(0); + + if (process.stdout.isTTY) { + assert( + spyConsoleWarn.calledWith( + `The configuration variable has been stored in ${TMP_FILE_PATH}` + ) + ); + } + }); + + describe("cli user prompt", () => { + let stubUserPrompt: any; + + before(() => { + stubUserPrompt = sandbox.stub(enquirer.prototype, "prompt"); + }); + + after(() => { + stubUserPrompt.restore(); + }); + + afterEach(() => { + stubUserPrompt.reset(); + }); + + it("should set a new value when only the key is passed (user cli prompt expected)", async () => { + stubUserPrompt.resolves({ value: "valueFromCli" }); + + const code = await handleVars(["vars", "set", "newKey"], undefined); + + expect(ctx.varsManager.get("newKey")).equals("valueFromCli"); + expect(code).equals(0); + + if (process.stdout.isTTY) { + assert( + spyConsoleWarn.calledWith( + `The configuration variable has been stored in ${TMP_FILE_PATH}` + ) + ); + } + }); + + it("should throw an error because the cli user prompt for the value is not valid", async () => { + stubUserPrompt.resolves({ value: "" }); + + await expect( + handleVars(["vars", "set", "newKey"], undefined) + ).to.be.rejectedWith( + "HH1203: A configuration variable cannot have an empty value." + ); + expect(ctx.varsManager.get("newKey")).equals(undefined); + }); + }); + + it("should throw an error when the key is not valid", async () => { + await expect( + handleVars(["vars", "set", "0invalidKey", "newVal"], undefined) + ).to.be.rejectedWith( + "HH1202: Invalid name for a configuration variable: '0invalidKey'. Configuration variables can only have alphanumeric characters and underscores, and they cannot start with a number." + ); + expect(ctx.varsManager.get("0invalidKey")).equals(undefined); + }); + }); + + describe("get", () => { + it("should get the value associated to the key", async () => { + const code = await handleVars(["vars", "get", "key1"], undefined); + + assert(spyConsoleLog.calledWith("val1")); + expect(code).equals(0); + }); + + it("should not get any value because the key is not defined", async () => { + const code = await handleVars( + ["vars", "get", "nonExistingKey"], + undefined + ); + + assert( + spyConsoleWarn.calledWith( + chalk.yellow( + `The configuration variable 'nonExistingKey' is not set in ${TMP_FILE_PATH}` + ) + ) + ); + expect(code).equals(1); + }); + }); + + describe("list", () => { + it("should list all the keys", async () => { + const code = await handleVars(["vars", "list"], undefined); + + expect(spyConsoleLog.callCount).to.equal(5); + assert(spyConsoleLog.getCall(0).calledWith("key1")); + assert(spyConsoleLog.getCall(1).calledWith("key2")); + assert(spyConsoleLog.getCall(2).calledWith("key3")); + assert(spyConsoleLog.getCall(3).calledWith("key4")); + assert(spyConsoleLog.getCall(4).calledWith("key5")); + + expect(code).equals(0); + + if (process.stdout.isTTY) { + assert( + spyConsoleWarn.calledWith( + `\nAll configuration variables are stored in ${TMP_FILE_PATH}` + ) + ); + } + }); + + it("should not list any key because they are not defined", async () => { + ctx.varsManager.delete("key1"); + ctx.varsManager.delete("key2"); + ctx.varsManager.delete("key3"); + ctx.varsManager.delete("key4"); + ctx.varsManager.delete("key5"); + + const code = await handleVars(["vars", "list"], undefined); + + expect(code).equals(0); + + if (process.stdout.isTTY) { + assert( + spyConsoleWarn.calledWith( + chalk.yellow( + `There are no configuration variables stored in ${TMP_FILE_PATH}` + ) + ) + ); + } + }); + }); + + describe("delete", () => { + it("should successfully delete a key and its value", async () => { + const code = await handleVars(["vars", "delete", "key1"], undefined); + + assert(ctx.varsManager.get("key1") === undefined); + + expect(code).equals(0); + + if (process.stdout.isTTY) { + assert( + spyConsoleWarn.calledWith( + `The configuration variable was deleted from ${TMP_FILE_PATH}` + ) + ); + } + }); + + it("should show a warning because the key to delete cannot be found", async () => { + const code = await handleVars( + ["vars", "delete", "nonExistingKey"], + undefined + ); + assert( + spyConsoleWarn.calledWith( + chalk.yellow( + `There is no configuration variable 'nonExistingKey' to delete from ${TMP_FILE_PATH}` + ) + ) + ); + expect(code).equals(1); + }); + }); + + describe("path", () => { + it("should show the path where the key-value pairs are stored", async () => { + const code = await handleVars(["vars", "path"], undefined); + assert(spyConsoleLog.calledWith(TMP_FILE_PATH)); + expect(code).equals(0); + }); + }); + + describe("parsing errors", () => { + it("should throw an error if the command is not 'vars'", async () => { + await expect( + handleVars(["nonExisting", "list"], undefined) + ).to.be.rejectedWith("HH303: Unrecognized task 'nonExisting'"); + }); + + it("should throw an error if the vars action does not exist", async () => { + await expect( + handleVars(["vars", "nonExistingAction"], undefined) + ).to.be.rejectedWith( + "HH315: Unrecognized task 'nonExistingAction' under scope 'vars'" + ); + }); + }); + + describe("setup", () => { + describe("all key-value pairs are set", () => { + useFixtureProject("vars/setup-filled"); + + it("should say that alle the key-value pairs are set", async () => { + const code = await handleVars(["vars", "setup"], undefined); + + const consoleLogCalls = spyConsoleLog.getCalls(); + + assert.include( + consoleLogCalls[0].args[0], + "There are no configuration variables that need to be set for this project" + ); + assert.include( + consoleLogCalls[2].args[0], + "Configuration variables already set:" + ); + assert.include(consoleLogCalls[4].args[0], "Mandatory:"); + assert.include(consoleLogCalls[5].args[0], "key1"); + + assert.include(consoleLogCalls[7].args[0], "Optional:"); + assert.include(consoleLogCalls[8].args[0], "key2"); + + expect(code).equals(0); + }); + }); + + describe("there are key-value pairs to fill", () => { + const ENV_VAR_PREFIX = "HARDHAT_VAR_"; + const KEY1 = "KEY_ENV_1"; + const KEY2 = "KEY_ENV_2"; + + beforeEach(() => { + process.env[`${ENV_VAR_PREFIX}${KEY1}`] = "val1"; + process.env[`${ENV_VAR_PREFIX}${KEY2}`] = "val2"; + }); + + afterEach(() => { + delete process.env[`${ENV_VAR_PREFIX}${KEY1}`]; + delete process.env[`${ENV_VAR_PREFIX}${KEY2}`]; + }); + + useFixtureProject("vars/setup-to-fill"); + + it("should show the configuration variables that need to be filled, including env variables", async () => { + const code = await handleVars(["vars", "setup"], undefined); + + const consoleLogCalls = spyConsoleLog.getCalls(); + + assert.include( + consoleLogCalls[0].args[0], + "The following configuration variables need to be set:" + ); + + assert.include( + consoleLogCalls[1].args[0], + "npx hardhat vars set nonExistingKey3\n npx hardhat vars set nonExistingKey5\n npx hardhat vars set KEY_ENV_1" + ); + + // optional keys + assert.include( + consoleLogCalls[3].args[0], + "The following configuration variables are optional:" + ); + assert.include( + consoleLogCalls[4].args[0], + "npx hardhat vars set nonExistingKey1\n npx hardhat vars set nonExistingKey4\n npx hardhat vars set KEY_ENV_2\n npx hardhat vars set nonExistingKey2" + ); + + // show already set variables + assert.include( + consoleLogCalls[6].args[0], + "Configuration variables already set:" + ); + + // mandatory variables + assert.include(consoleLogCalls[8].args[0], "Mandatory:"); + assert.include(consoleLogCalls[9].args[0], "key3\n key5"); + + // optional variables + assert.include(consoleLogCalls[11].args[0], "Optional:"); + assert.include( + consoleLogCalls[12].args[0], + "key1\n key4\n key2" + ); + + // env variables + assert.include( + consoleLogCalls[14].args[0], + "Set via environment variables:" + ); + assert.include( + consoleLogCalls[15].args[0], + `${ENV_VAR_PREFIX}${KEY1}\n ${ENV_VAR_PREFIX}${KEY2}` + ); + + expect(code).equals(0); + }); + }); + + describe("simulate setup errors when loading hardhat.config.ts", () => { + describe("the error should stop the execution", () => { + useFixtureProject("vars/setup-error-to-throw"); + + it("should throw the error", async () => { + const spyConsoleError = sandbox.stub(console, "error"); + + await expect( + handleVars(["vars", "setup"], undefined) + ).to.be.rejectedWith("Simulate error to throw during vars setup"); + + assert( + spyConsoleError.calledWith( + chalk.red( + "There is an error in your Hardhat configuration file. Please double check it.\n" + ) + ) + ); + + spyConsoleError.restore(); + }); + }); + }); + }); + }); +}); diff --git a/packages/hardhat-core/test/internal/context.ts b/packages/hardhat-core/test/internal/context.ts index f207daec85..b840b906b7 100644 --- a/packages/hardhat-core/test/internal/context.ts +++ b/packages/hardhat-core/test/internal/context.ts @@ -33,7 +33,7 @@ describe("Hardhat context", async function () { it("context initialize properly", async function () { const ctx = HardhatContext.createHardhatContext(); - assert.isDefined(ctx.extendersManager); + assert.isDefined(ctx.environmentExtenders); assert.isDefined(ctx.tasksDSL); assert.isUndefined(ctx.environment); }); diff --git a/packages/hardhat-core/test/internal/core/config/config-resolution.ts b/packages/hardhat-core/test/internal/core/config/config-resolution.ts index f7511e43e0..49e6192ebd 100644 --- a/packages/hardhat-core/test/internal/core/config/config-resolution.ts +++ b/packages/hardhat-core/test/internal/core/config/config-resolution.ts @@ -24,6 +24,18 @@ import { HttpNetworkUserConfig, } from "../../../../src/types"; import { HardforkName } from "../../../../src/internal/util/hardforks"; +import { useFixtureProject } from "../../../helpers/project"; +import { + getAllFilesMatchingSync, + getRealPathSync, +} from "../../../../src/internal/util/fs-utils"; +import { useEnvironment } from "../../../helpers/environment"; + +function getBuildInfos() { + return getAllFilesMatchingSync(getRealPathSync("artifacts/build-info"), (f) => + f.endsWith(".json") + ); +} describe("Config resolution", () => { describe("Default config merging", () => { @@ -857,4 +869,119 @@ describe("Config resolution", () => { }); }); }); + + describe("evmVersion default", function () { + it("Should default to paris if solc is gte 0.8.20", () => { + let config = resolveConfig(__filename, { + solidity: "0.8.20", + }); + assert.equal(config.solidity.compilers[0]?.settings?.evmVersion, "paris"); + + config = resolveConfig(__filename, { + solidity: "0.8.21", + }); + assert.equal(config.solidity.compilers[0]?.settings?.evmVersion, "paris"); + + config = resolveConfig(__filename, { + solidity: { + compilers: [{ version: "0.8.20" }], + overrides: { + "contracts/ERC20.sol": { + version: "0.8.21", + }, + }, + }, + }); + assert.equal(config.solidity.compilers[0]?.settings?.evmVersion, "paris"); + assert.equal( + config.solidity.overrides["contracts/ERC20.sol"]?.settings?.evmVersion, + "paris" + ); + }); + + it("Should use the solc default if solc is lt 0.8.20", () => { + let config = resolveConfig(__filename, { + solidity: "0.8.19", + }); + assert.isUndefined(config.solidity.compilers[0]?.settings?.evmVersion); + + config = resolveConfig(__filename, { + solidity: { + compilers: [{ version: "0.5.7" }], + overrides: { + "contracts/ERC20.sol": { + version: "0.7.6", + }, + }, + }, + }); + assert.isUndefined(config.solidity.compilers[0]?.settings?.evmVersion); + assert.isUndefined( + config.solidity.overrides["contracts/ERC20.sol"]?.settings?.evmVersion + ); + }); + + it("Should let the user override the evmVersion", () => { + const config = resolveConfig(__filename, { + solidity: { + compilers: [ + { version: "0.8.20", settings: { evmVersion: "istanbul" } }, + ], + overrides: { + "contracts/ERC20.sol": { + version: "0.8.21", + settings: { evmVersion: "shanghai" }, + }, + }, + }, + }); + + assert.equal( + config.solidity.compilers[0]?.settings?.evmVersion, + "istanbul" + ); + assert.equal( + config.solidity.overrides["contracts/ERC20.sol"]?.settings?.evmVersion, + "shanghai" + ); + }); + + describe("With a solc 0.8.20 project and default config", () => { + useFixtureProject("project-0.8.20"); + useEnvironment(); + + it("Should not emit PUSH0 opcodes when compiling a contract with solc gte 0.8.20 and default config", async function () { + await this.env.run("compile"); + const source = "contracts/Lock.sol"; + const contract = "Lock"; + + const [buildInfo] = getBuildInfos(); + const { output } = require(buildInfo); + + assert.notInclude( + output.contracts[source][contract].evm.bytecode.opcodes, + "PUSH0" + ); + }); + }); + + describe("With a solc 0.8.20 project and overriden config", () => { + useFixtureProject("project-0.8.20-override-evm-version"); + useEnvironment(); + + it("Should emit PUSH0 opcodes when compiling a contract with solc gte 0.8.20 and overriden config", async function () { + await this.env.run("compile"); + const source = "contracts/Lock.sol"; + const contract = "Lock"; + + const [buildInfo] = getBuildInfos(); + const { output } = require(buildInfo); + + assert.include( + output.contracts[source][contract].evm.bytecode.opcodes, + "PUSH0" + ); + }); + }); + }); }); diff --git a/packages/hardhat-core/test/internal/core/config/default-config.ts b/packages/hardhat-core/test/internal/core/config/default-config.ts new file mode 100644 index 0000000000..9aa9ed455c --- /dev/null +++ b/packages/hardhat-core/test/internal/core/config/default-config.ts @@ -0,0 +1,23 @@ +import { assert } from "chai"; + +import { defaultHardhatNetworkParams } from "../../../../src/internal/core/config/default-config"; +import { HardforkName } from "../../../../src/internal/util/hardforks"; + +describe("Default config", function () { + it("should include block numbers for all hardforks", async function () { + const mainnetChainConfig = defaultHardhatNetworkParams.chains.get(1); + + if (mainnetChainConfig === undefined) { + assert.fail("Mainnet entry should exist"); + } + + for (const hardfork of Object.values(HardforkName)) { + const hardforkHistoryEntry = + mainnetChainConfig.hardforkHistory.get(hardfork); + assert.isDefined( + hardforkHistoryEntry, + `No hardfork history entry for ${hardfork}` + ); + } + }); +}); diff --git a/packages/hardhat-core/test/internal/core/config/vars.ts b/packages/hardhat-core/test/internal/core/config/vars.ts new file mode 100644 index 0000000000..7b89785e12 --- /dev/null +++ b/packages/hardhat-core/test/internal/core/config/vars.ts @@ -0,0 +1,117 @@ +import { expect } from "chai"; +import fs from "fs-extra"; +import * as os from "os"; +import { vars } from "../../../../src/internal/core/config/config-env"; +import { VarsManager } from "../../../../src/internal/core/vars/vars-manager"; +import { HardhatContext } from "../../../../src/internal/context"; +import { resetHardhatContext } from "../../../../src/internal/reset"; +import { VarsManagerSetup } from "../../../../src/internal/core/vars/vars-manager-setup"; + +describe("vars", () => { + const TMP_FILE_PATH = `${os.tmpdir()}/test-vars.json`; + let ctx: HardhatContext; + const ENV_VAR_PREFIX = "HARDHAT_VAR_"; + const ENV_KEY = "key_env_1"; + + before(() => { + ctx = HardhatContext.createHardhatContext(); + process.env[`${ENV_VAR_PREFIX}${ENV_KEY}`] = "val1"; + }); + + after(() => { + resetHardhatContext(); + delete process.env[`${ENV_VAR_PREFIX}${ENV_KEY}`]; + }); + + describe("setup scenario", () => { + beforeEach(() => { + fs.removeSync(TMP_FILE_PATH); + + // Create a new instance of the vars manager so that it can point to the test file + ctx.varsManager = new VarsManagerSetup(TMP_FILE_PATH); + + ctx.varsManager.set("key1", "val1"); + }); + + describe("hasVars", () => { + it("should return true if the key exists", () => { + expect(vars.has("key1")).to.equal(true); + }); + + it("should return false if the key does not exist", () => { + expect(vars.has("non-existing")).to.equal(false); + }); + + it("should return false for the env variable", () => { + expect(vars.has(ENV_KEY)).to.equal(false); + }); + }); + + describe("getVars", () => { + it("should return the value associated to the key", () => { + expect(vars.get("key1")).to.equal("val1"); + }); + + it("should return the default value for the var because the key is not found", () => { + expect(vars.get("nonExistingKey", "defaultValue")).to.equal( + "defaultValue" + ); + }); + + it("should not get the env variable", () => { + expect(vars.get(ENV_KEY)).to.equal(""); + }); + + it("should not throw an error if the key does not exist and no default value is set", () => { + vars.get("nonExistingKey"); + }); + }); + }); + + describe("normal scenario", () => { + beforeEach(() => { + fs.removeSync(TMP_FILE_PATH); + + // Create a new instance of the vars manager so that it can point to the test file + ctx.varsManager = new VarsManager(TMP_FILE_PATH); + + ctx.varsManager.set("key1", "val1"); + }); + + describe("hasVars", () => { + it("should return true if the key exists", () => { + expect(vars.has("key1")).to.equal(true); + }); + + it("should return false if the key does not exist", () => { + expect(vars.has("non-existing")).to.equal(false); + }); + + it("should return true for the env variable", () => { + expect(vars.has(ENV_KEY)).to.equal(true); + }); + }); + + describe("getVars", () => { + it("should return the value associated to the key", () => { + expect(vars.get("key1")).to.equal("val1"); + }); + + it("should return the default value for the var because the key is not found", () => { + expect(vars.get("nonExistingKey", "defaultValue")).to.equal( + "defaultValue" + ); + }); + + it("should get the env variable", () => { + expect(vars.get(ENV_KEY)).to.equal("val1"); + }); + + it("should throw an error if the key does not exist and no default value is set", () => { + expect(() => vars.get("nonExistingKey")).to.throw( + "HH1201: Cannot find a value for the configuration variable 'nonExistingKey'. Use 'npx hardhat vars set nonExistingKey' to set it or 'npx hardhat vars setup' to list all the configuration variables used by this project." + ); + }); + }); + }); +}); diff --git a/packages/hardhat-core/test/internal/core/providers/construction.ts b/packages/hardhat-core/test/internal/core/providers/construction.ts index 94089a8442..14fb0545a9 100644 --- a/packages/hardhat-core/test/internal/core/providers/construction.ts +++ b/packages/hardhat-core/test/internal/core/providers/construction.ts @@ -1,4 +1,5 @@ import { assert } from "chai"; +import sinon from "sinon"; import { defaultHdAccountsConfigParams, @@ -7,6 +8,10 @@ import { import { ERRORS } from "../../../../src/internal/core/errors-list"; import { numberToRpcQuantity } from "../../../../src/internal/core/jsonrpc/types/base-types"; import { BackwardsCompatibilityProviderAdapter } from "../../../../src/internal/core/providers/backwards-compatibility"; +import { + BoundExperimentalHardhatNetworkMessageTraceHook, + HardhatConfig, +} from "../../../../src/types"; import { applyProviderWrappers, createProvider, @@ -25,13 +30,50 @@ describe("Network config typeguards", async () => { }); describe("Base provider creation", () => { - it("Should create a valid HTTP provider and wrap it", () => { - const provider = createProvider("net", { - url: "http://127.0.0.1:8545", - ...defaultHttpNetworkParams, - }); + it("Should create a valid HTTP provider and wrap it", async () => { + const config = { + networks: { + net: { + url: "http://127.0.0.1:8545", + ...defaultHttpNetworkParams, + }, + }, + } as unknown as HardhatConfig; + const provider = await createProvider(config, "net"); + + assert.instanceOf(provider, BackwardsCompatibilityProviderAdapter); + }); + + it("Should extend the base provider by calling each supplied extender", async () => { + const artifacts = undefined; + const hooks: BoundExperimentalHardhatNetworkMessageTraceHook[] = []; + + const identity = (obj: any) => obj; + const extenders = [sinon.spy(identity), sinon.spy(identity)]; + + const config = { + networks: { + net: { + url: "http://127.0.0.1:8545", + ...defaultHttpNetworkParams, + }, + }, + paths: undefined, + } as unknown as HardhatConfig; + const provider = await createProvider( + config, + "net", + artifacts, + hooks, + extenders + ); assert.instanceOf(provider, BackwardsCompatibilityProviderAdapter); + for (const extender of extenders) { + assert.isTrue(extender.calledOnce); + // check that the extender is called with a provider + assert.property(extender.getCall(0).firstArg, "request"); + } }); }); @@ -54,14 +96,18 @@ describe("Base providers wrapping", () => { describe("Accounts wrapping", () => { it("Should wrap with a list of private keys as accounts", async () => { - const provider = applyProviderWrappers(mockedProvider, { - accounts: [ - "0x5ca14ebaee5e4a48b5341d9225f856115be72df55c7621b73fb0b6a1fdefcf24", - "0x4e24948ea2bbd95ccd2bac641aadf36acd7e7cc011b1186a83dfe8db6cc7b1ae", - "0x6dca0836dc90c159b9240aeff471441a134e1b215a7ffe9d69d335f325932665", - ], - url: "", - }); + const provider = applyProviderWrappers( + mockedProvider, + { + accounts: [ + "0x5ca14ebaee5e4a48b5341d9225f856115be72df55c7621b73fb0b6a1fdefcf24", + "0x4e24948ea2bbd95ccd2bac641aadf36acd7e7cc011b1186a83dfe8db6cc7b1ae", + "0x6dca0836dc90c159b9240aeff471441a134e1b215a7ffe9d69d335f325932665", + ], + url: "", + }, + [] + ); const accounts = await provider.request({ method: "eth_accounts" }); @@ -73,17 +119,21 @@ describe("Base providers wrapping", () => { }); it("Should wrap with an HD wallet provider", async () => { - const provider = applyProviderWrappers(mockedProvider, { - accounts: { - mnemonic: - "hurdle method ceiling design federal record unfair cloud end midnight corn oval", - initialIndex: 3, - count: 2, - path: defaultHdAccountsConfigParams.path, - passphrase: "", + const provider = applyProviderWrappers( + mockedProvider, + { + accounts: { + mnemonic: + "hurdle method ceiling design federal record unfair cloud end midnight corn oval", + initialIndex: 3, + count: 2, + path: defaultHdAccountsConfigParams.path, + passphrase: "", + }, + url: "", }, - url: "", - }); + [] + ); const accounts = await provider.request({ method: "eth_accounts" }); @@ -94,9 +144,13 @@ describe("Base providers wrapping", () => { }); it("Shouldn't wrap with an accounts-managing provider if not necessary", async () => { - const provider = applyProviderWrappers(mockedProvider, { - url: "", - }); + const provider = applyProviderWrappers( + mockedProvider, + { + url: "", + }, + [] + ); await provider.request({ method: "eth_accounts", @@ -118,10 +172,14 @@ describe("Base providers wrapping", () => { }); it("Should wrap with a fixed sender param", async () => { - const provider = applyProviderWrappers(mockedProvider, { - url: "", - from: "0xa2b6816c50d49101901d93f5302a3a57e0a1281b", - }); + const provider = applyProviderWrappers( + mockedProvider, + { + url: "", + from: "0xa2b6816c50d49101901d93f5302a3a57e0a1281b", + }, + [] + ); await provider.request({ method: "eth_sendTransaction", params: [{}] }); @@ -130,9 +188,13 @@ describe("Base providers wrapping", () => { }); it("Should wrap without a fixed sender param, using the default one", async () => { - const provider = applyProviderWrappers(mockedProvider, { - url: "", - }); + const provider = applyProviderWrappers( + mockedProvider, + { + url: "", + }, + [] + ); await provider.request({ method: "eth_sendTransaction", params: [{}] }); const [tx] = mockedProvider.getLatestParams("eth_sendTransaction"); @@ -153,10 +215,14 @@ describe("Base providers wrapping", () => { }); it("Should wrap with an auto gas provider if 'auto' is used", async () => { - const provider = applyProviderWrappers(mockedProvider, { - url: "", - gas: "auto", - }); + const provider = applyProviderWrappers( + mockedProvider, + { + url: "", + gas: "auto", + }, + [] + ); await provider.request({ method: "eth_sendTransaction", @@ -167,9 +233,13 @@ describe("Base providers wrapping", () => { }); it("Should wrap with an auto gas provider if undefined is used", async () => { - const provider = applyProviderWrappers(mockedProvider, { - url: "", - }); + const provider = applyProviderWrappers( + mockedProvider, + { + url: "", + }, + [] + ); await provider.request({ method: "eth_sendTransaction", @@ -180,10 +250,14 @@ describe("Base providers wrapping", () => { }); it("Should use the gasMultiplier", async () => { - const provider = applyProviderWrappers(mockedProvider, { - url: "", - gasMultiplier: OTHER_GAS_MULTIPLIER, - }); + const provider = applyProviderWrappers( + mockedProvider, + { + url: "", + gasMultiplier: OTHER_GAS_MULTIPLIER, + }, + [] + ); await provider.request({ method: "eth_sendTransaction", @@ -197,10 +271,14 @@ describe("Base providers wrapping", () => { }); it("Should wrap with a fixed gas provider if a number is used", async () => { - const provider = applyProviderWrappers(mockedProvider, { - url: "", - gas: 678, - }); + const provider = applyProviderWrappers( + mockedProvider, + { + url: "", + gas: 678, + }, + [] + ); await provider.request({ method: "eth_sendTransaction", @@ -217,29 +295,41 @@ describe("Base providers wrapping", () => { }); it("Should wrap with an auto gas price provider if 'auto' is used", async () => { - const provider = applyProviderWrappers(mockedProvider, { - url: "", - gasPrice: "auto", - }); + const provider = applyProviderWrappers( + mockedProvider, + { + url: "", + gasPrice: "auto", + }, + [] + ); const gasPrice = await provider.request({ method: "eth_gasPrice" }); assert.equal(gasPrice, numberToRpcQuantity(123)); }); it("Should wrap with an auto gas price provider if undefined is used", async () => { - const provider = applyProviderWrappers(mockedProvider, { - url: "", - }); + const provider = applyProviderWrappers( + mockedProvider, + { + url: "", + }, + [] + ); const gasPrice = await provider.request({ method: "eth_gasPrice" }); assert.equal(gasPrice, numberToRpcQuantity(123)); }); it("Should wrap with a fixed gas price provider if a number is used", async () => { - const provider = applyProviderWrappers(mockedProvider, { - url: "", - gasPrice: 789, - }); + const provider = applyProviderWrappers( + mockedProvider, + { + url: "", + gasPrice: 789, + }, + [] + ); await provider.request({ method: "eth_sendTransaction", params: [{}] }); const [{ gasPrice }] = mockedProvider.getLatestParams( @@ -252,10 +342,14 @@ describe("Base providers wrapping", () => { describe("Chain ID wrapping", () => { it("Should wrap with a chain id validation provider if a chainId is used", async () => { - const provider = applyProviderWrappers(mockedProvider, { - url: "", - chainId: 2, - }); + const provider = applyProviderWrappers( + mockedProvider, + { + url: "", + chainId: 2, + }, + [] + ); await expectHardhatErrorAsync( () => provider.request({ method: "eth_getAccounts", params: [] }), diff --git a/packages/hardhat-core/test/internal/core/providers/errors.ts b/packages/hardhat-core/test/internal/core/providers/errors.ts new file mode 100644 index 0000000000..7d0346819e --- /dev/null +++ b/packages/hardhat-core/test/internal/core/providers/errors.ts @@ -0,0 +1,87 @@ +import { assert } from "chai"; +import path from "path"; + +import { numberToRpcQuantity } from "../../../../src/internal/core/jsonrpc/types/base-types"; +import { + EXAMPLE_CONTRACT, + EXAMPLE_REVERT_CONTRACT, +} from "../../hardhat-network/helpers/contracts"; +import { deployContract } from "../../hardhat-network/helpers/transactions"; +import { + DEFAULT_ACCOUNTS_ADDRESSES, + PROVIDERS, +} from "../../hardhat-network/helpers/providers"; + +describe("provider errors", function () { + PROVIDERS.forEach(({ name, useProvider }) => { + describe(`${name} provider`, function () { + useProvider(); + + it("should show the right error message for revert reason strings", async function () { + const contractAddress = await deployContract( + this.provider, + `0x${EXAMPLE_REVERT_CONTRACT.bytecode.object}` + ); + + await assert.isRejected( + this.provider.send("eth_sendTransaction", [ + { + from: DEFAULT_ACCOUNTS_ADDRESSES[0], + to: contractAddress, + data: `${EXAMPLE_REVERT_CONTRACT.selectors.revertsWithReasonString}`, + }, + ]), + "reverted with reason string 'a reason'" + ); + }); + + it("should show the right error message for out of gas errors", async function () { + const contractAddress = await deployContract( + this.provider, + `0x${EXAMPLE_CONTRACT.bytecode.object}` + ); + + await assert.isRejected( + this.provider.send("eth_sendTransaction", [ + { + from: DEFAULT_ACCOUNTS_ADDRESSES[0], + to: contractAddress, + data: `${EXAMPLE_CONTRACT.selectors.modifiesState}0000000000000000000000000000000000000000000000000000000000000001`, + gas: numberToRpcQuantity(21_204), + }, + ]), + "Transaction ran out of gas" + ); + }); + + it("should include the right file", async function () { + // This test should prevents us from accidentally breaking the async stack + // trace when using an http provider. + + const contractAddress = await deployContract( + this.provider, + `0x${EXAMPLE_REVERT_CONTRACT.bytecode.object}` + ); + + let error: any; + try { + await this.provider.send("eth_sendTransaction", [ + { + from: DEFAULT_ACCOUNTS_ADDRESSES[0], + to: contractAddress, + data: `${EXAMPLE_REVERT_CONTRACT.selectors.revertsWithReasonString}`, + }, + ]); + } catch (e) { + error = e; + } + + assert.isDefined(error); + assert.include( + error.stack, + path.join("test", "internal", "core", "providers", "errors.ts") + ); + }); + }); + }); +}); diff --git a/packages/hardhat-core/test/internal/core/providers/gas-providers.ts b/packages/hardhat-core/test/internal/core/providers/gas-providers.ts index e302722168..cc88a957a5 100644 --- a/packages/hardhat-core/test/internal/core/providers/gas-providers.ts +++ b/packages/hardhat-core/test/internal/core/providers/gas-providers.ts @@ -256,6 +256,98 @@ describe("AutomaticGasPriceProvider", () => { }); }); + describe("When the eth_feeHistory result causes maxPriorityFeePerGas to be 0 and eth_maxPriorityFeePerGas doesn't exist", function () { + const latestBaseFeeInMockedProvider = 80; + + beforeEach(function () { + mockedProvider.setReturnValue("eth_feeHistory", { + baseFeePerGas: [ + numberToRpcQuantity(latestBaseFeeInMockedProvider), + numberToRpcQuantity( + Math.floor((latestBaseFeeInMockedProvider * 9) / 8) + ), + ], + reward: [["0x0"]], + }); + + mockedProvider.setReturnValue("eth_getBlockByNumber", { + baseFeePerGas: "0x1", + }); + }); + + it("should use a non-zero maxPriorityFeePerGas", async function () { + await provider.request({ + method: "eth_sendTransaction", + params: [ + { + from: "0x0000000000000000000000000000000000000011", + to: "0x0000000000000000000000000000000000000011", + value: 1, + }, + ], + }); + + const expectedBaseFee = Math.floor( + latestBaseFeeInMockedProvider * + (9 / 8) ** + Number( + AutomaticGasPriceProvider.EIP1559_BASE_FEE_MAX_FULL_BLOCKS_PREFERENCE + ) + ); + + const [tx] = mockedProvider.getLatestParams("eth_sendTransaction"); + assert.equal(tx.maxFeePerGas, expectedBaseFee); + assert.equal(tx.maxPriorityFeePerGas, "0x1"); + }); + }); + + describe("When the eth_feeHistory result causes maxPriorityFeePerGas to be 0 and eth_maxPriorityFeePerGas exists", function () { + const latestBaseFeeInMockedProvider = 80; + + beforeEach(function () { + mockedProvider.setReturnValue("eth_feeHistory", { + baseFeePerGas: [ + numberToRpcQuantity(latestBaseFeeInMockedProvider), + numberToRpcQuantity( + Math.floor((latestBaseFeeInMockedProvider * 9) / 8) + ), + ], + reward: [["0x0"]], + }); + + mockedProvider.setReturnValue("eth_getBlockByNumber", { + baseFeePerGas: "0x1", + }); + + mockedProvider.setReturnValue("eth_maxPriorityFeePerGas", "0x12"); + }); + + it("should use the the result of eth_maxPriorityFeePerGas as maxPriorityFeePerGas", async function () { + await provider.request({ + method: "eth_sendTransaction", + params: [ + { + from: "0x0000000000000000000000000000000000000011", + to: "0x0000000000000000000000000000000000000011", + value: 1, + }, + ], + }); + + const expectedBaseFee = Math.floor( + latestBaseFeeInMockedProvider * + (9 / 8) ** + Number( + AutomaticGasPriceProvider.EIP1559_BASE_FEE_MAX_FULL_BLOCKS_PREFERENCE + ) + ); + + const [tx] = mockedProvider.getLatestParams("eth_sendTransaction"); + assert.equal(tx.maxFeePerGas, expectedBaseFee); + assert.equal(tx.maxPriorityFeePerGas, "0x12"); + }); + }); + describe("When eth_feeHistory is available and EIP1559 is not supported", function () { const latestBaseFeeInMockedProvider = 80; diff --git a/packages/hardhat-core/test/internal/core/providers/http.ts b/packages/hardhat-core/test/internal/core/providers/http.ts index 8e84a63119..5d7c4b35bc 100644 --- a/packages/hardhat-core/test/internal/core/providers/http.ts +++ b/packages/hardhat-core/test/internal/core/providers/http.ts @@ -4,8 +4,6 @@ import { MockAgent, MockPool } from "undici"; import { HttpProvider } from "../../../../src/internal/core/providers/http"; import { SuccessfulJsonRpcResponse } from "../../../../src/internal/util/jsonrpc"; -import { expectErrorAsync } from "../../../helpers/errors"; - const TOO_MANY_REQUEST_STATUS = 429; function makeMockPool(url: string): MockPool { @@ -40,16 +38,26 @@ describe("HttpProvider", function () { assert.equal(result, successResponse.result); }); - it("should throw upon receiving a rate-limit response that lacks a retry-after header", async function () { + it("should retry even if the rate-limit response lacks a retry-after header", async function () { const mockPool = makeMockPool(url); + let tooManyRequestsReturned = false; + mockPool.intercept({ method: "POST", path: "/" }).reply(() => { + tooManyRequestsReturned = true; + return { + statusCode: TOO_MANY_REQUEST_STATUS, + data: "", + responseOptions: { headers: {} }, + }; + }); mockPool .intercept({ method: "POST", path: "/" }) - .reply(TOO_MANY_REQUEST_STATUS, {}); + .reply(200, successResponse); const provider = new HttpProvider(url, networkName, {}, 20000, mockPool); - await expectErrorAsync(async () => { - await provider.request({ method: "net_version" }); - }, `Too Many Requests error received from ${new URL(url).hostname}`); + const result = await provider.request({ method: "net_version" }); + assert.equal(result, successResponse.result); + assert(tooManyRequestsReturned); }); + it("should retry upon receiving a rate-limit response that includes a retry-after header", async function () { const mockPool = makeMockPool(url); let tooManyRequestsReturned = false; diff --git a/packages/hardhat-core/test/internal/core/providers/lazy-initialization.ts b/packages/hardhat-core/test/internal/core/providers/lazy-initialization.ts new file mode 100644 index 0000000000..a324fbcbda --- /dev/null +++ b/packages/hardhat-core/test/internal/core/providers/lazy-initialization.ts @@ -0,0 +1,229 @@ +import { assert } from "chai"; +import sinon from "sinon"; + +import { LazyInitializationProviderAdapter } from "../../../../src/internal/core/providers/lazy-initialization"; +import { JsonRpcRequest } from "../../../../src/types"; +import { ERRORS } from "../../../../src/internal/core/errors-list"; +import { expectHardhatError } from "../../../helpers/errors"; + +import { EthereumMockedProvider } from "./mocks"; + +describe("LazyInitializationProviderAdapter", () => { + let mock: EthereumMockedProvider; + let provider: LazyInitializationProviderAdapter; + let initializationCount: number; + let id: number; + + function createJsonRpcRequest( + method: string, + params: JsonRpcRequest["params"] + ) { + return { id: id++, jsonrpc: "2.0", method, params }; + } + + beforeEach(() => { + initializationCount = 0; + id = 1; + + mock = new EthereumMockedProvider(); + provider = new LazyInitializationProviderAdapter(async () => { + initializationCount += 1; + return mock; + }); + }); + + describe("_wrapped", () => { + it("should throw if accessed before initialization", () => { + expectHardhatError( + () => provider._wrapped, + ERRORS.GENERAL.UNINITIALIZED_PROVIDER + ); + }); + + it("should get the initialized provider", async () => { + await provider.init(); + assert.equal(provider._wrapped, mock); + }); + }); + + describe("init", () => { + it("should initialize the provider only once by calling the factory function", async () => { + await provider.init(); + await provider.init(); + + assert.equal(initializationCount, 1); + }); + + it("should initialize the provider only once even if init is called several times at the same time", async function () { + await Promise.all([ + provider.init(), + provider.init(), + provider.init(), + provider.init(), + provider.init(), + ]); + + assert.equal(initializationCount, 1); + }); + + it("should return the initialized provider", async () => { + const initializedProvider = await provider.init(); + + assert.equal(initializedProvider, mock); + }); + }); + + describe("EventEmitter", () => { + let callTimes: number; + function eventHandler() { + callTimes += 1; + } + + beforeEach(() => { + callTimes = 0; + }); + + it("it should work as an emitter before being initialized", () => { + provider.on("event", eventHandler); + provider.on("otherevent", eventHandler); + provider.once("onceevent", eventHandler); + provider.emit("event"); // 1 + provider.emit("otherevent"); // 2 + provider.emit("onceevent"); // 3 + provider.emit("onceevent"); // 3 + provider.off("otherevent", eventHandler); + provider.emit("otherevent"); // 3 + + assert.equal(callTimes, 3); + }); + + it("should move the registered events to the provider after initialization", async () => { + provider.on("event", eventHandler); + provider.on("otherevent", eventHandler); + provider.once("onceevent", eventHandler); + + await provider.request({ method: "a-method" }); // init the inner provider calling the constructor function + provider.emit("event"); // 1 + provider.emit("otherevent"); // 2 + provider.emit("onceevent"); // 3 + provider.emit("onceevent"); // 3 + + assert.deepEqual(callTimes, 3); + }); + }); + + describe("request", () => { + it("should call the intialization function when called", async () => { + await provider.request({ method: "method1", params: [1, 2, 3] }); + + assert.equal(initializationCount, 1); + }); + + it("should call the intialization function only once", async () => { + await provider.request({ method: "method1", params: [1, 2, 3] }); + await provider.request({ method: "method2", params: [66, 77] }); + await provider.request({ method: "method3", params: [99, 100] }); + + assert.equal(initializationCount, 1); + }); + + it("should call the intialization function only once even if multiple requests are done at the same time", async () => { + await Promise.all([ + provider.request({ method: "method1", params: [1, 2, 3] }), + provider.request({ method: "method2", params: [66, 77] }), + provider.request({ method: "method3", params: [99, 100] }), + ]); + + assert.equal(initializationCount, 1); + }); + + it("should forward the method to the initialized provider", async () => { + const requestSpy = sinon.spy(mock, "request"); + const requestParams = { method: "a-method" }; + await provider.request(requestParams); // init the inner provider calling the constructor function + + assert.isTrue(requestSpy.calledOnce); + assert.isTrue(requestSpy.calledOnceWith(requestParams)); + }); + }); + + describe("send", () => { + it("should call the intialization function when called", async () => { + await provider.send("method1", [1, 2, 3]); + + assert.equal(initializationCount, 1); + }); + + it("should call the intialization function only once", async () => { + await provider.send("method1", [1, 2, 3]); + await provider.send("method2", [66, 77]); + await provider.send("method3", [99, 100]); + + assert.equal(initializationCount, 1); + }); + + it("should forward the method to the initialized provider", async () => { + const sendSpy = sinon.spy(mock, "send"); + const sendParams = [1, 2, 44]; + await provider.send("method", sendParams); // init the inner provider calling the constructor function + + assert.isTrue(sendSpy.calledOnce); + assert.isTrue(sendSpy.calledOnceWith("method", sendParams)); + }); + }); + + describe("sendAsync", () => { + it("should call the intialization function when called", (done) => { + provider.sendAsync(createJsonRpcRequest("method1", [1, 2, 3]), () => { + assert.equal(initializationCount, 1); + done(); + }); + }); + + it("should call the intialization function only once", (done) => { + provider.sendAsync(createJsonRpcRequest("method1", [1, 2, 3]), () => { + provider.sendAsync(createJsonRpcRequest("method2", [66, 77]), () => { + provider.sendAsync(createJsonRpcRequest("method3", [99, 100]), () => { + assert.equal(initializationCount, 1); + done(); + }); + }); + }); + }); + + it("should call the intialization function only once even for unresolved calls", (done) => { + let checkCalls = 0; + const check = () => { + assert.equal(initializationCount, 1); + + checkCalls++; + if (checkCalls === 3) { + done(); + } + }; + + provider.sendAsync(createJsonRpcRequest("method1", [1, 2, 3]), check); + provider.sendAsync(createJsonRpcRequest("method2", [66, 77]), check); + provider.sendAsync(createJsonRpcRequest("method3", [99, 100]), check); + }); + + it("should forward the method to the initialized provider", (done) => { + const sendAsyncSpy = sinon.spy(mock, "sendAsync"); + const sendAsyncParams = createJsonRpcRequest("methodname", [ + "a", + "b", + 33, + ]); + const asyncCallback = () => { + assert.isTrue(sendAsyncSpy.calledOnce); + assert.isTrue( + sendAsyncSpy.calledOnceWith(sendAsyncParams, asyncCallback) + ); + done(); + }; + + // init the inner provider calling the constructor function + provider.sendAsync(sendAsyncParams, asyncCallback); + }); + }); +}); diff --git a/packages/hardhat-core/test/internal/core/providers/mocks.ts b/packages/hardhat-core/test/internal/core/providers/mocks.ts index 05afecc0ad..2a2ca3529b 100644 --- a/packages/hardhat-core/test/internal/core/providers/mocks.ts +++ b/packages/hardhat-core/test/internal/core/providers/mocks.ts @@ -1,11 +1,21 @@ import { EventEmitter } from "events"; -import { EIP1193Provider, RequestArguments } from "../../../../src/types"; +import { + EIP1193Provider, + EthereumProvider, + JsonRpcRequest, + JsonRpcResponse, + RequestArguments, +} from "../../../../src/types"; export class MockedProvider extends EventEmitter implements EIP1193Provider { - private _returnValues: any = {}; - private _latestParams: any = {}; - private _numberOfCalls: { [call: string]: number } = {}; + // Record + private _returnValues: Record = {}; + + // Record + private _latestParams: Record = {}; + + private _numberOfCalls: { [method: string]: number } = {}; // If a lambda is passed as value, it's return value is used. public setReturnValue(method: string, value: any) { @@ -52,3 +62,19 @@ export class MockedProvider extends EventEmitter implements EIP1193Provider { return ret; } } + +export class EthereumMockedProvider + extends EventEmitter + implements EthereumProvider +{ + public async request(_args: RequestArguments): Promise {} + + public async send(_method: string, _params: any[] = []) {} + + public sendAsync( + _payload: JsonRpcRequest, + callback: (error: any, response: JsonRpcResponse) => void + ) { + callback(null, {} as JsonRpcRequest); // this is here just to finish the "async" operation + } +} diff --git a/packages/hardhat-core/test/internal/core/providers/wrapper.ts b/packages/hardhat-core/test/internal/core/providers/wrapper.ts new file mode 100644 index 0000000000..28fe819246 --- /dev/null +++ b/packages/hardhat-core/test/internal/core/providers/wrapper.ts @@ -0,0 +1,69 @@ +import { assert } from "chai"; +import { ProviderWrapper } from "../../../../src/internal/core/providers/wrapper"; +import { RequestArguments } from "../../../../src/types"; +import { InvalidInputError } from "../../../../src/internal/core/providers/errors"; +import { MockedProvider } from "./mocks"; + +describe("ProviderWrapper", () => { + class WrappedProvider extends ProviderWrapper { + public async request(args: RequestArguments): Promise { + return this._wrappedProvider.request(args); + } + + public getParams(args: RequestArguments) { + return this._getParams(args); + } + } + + let mock: MockedProvider; + let provider: WrappedProvider; + + beforeEach(function () { + mock = new MockedProvider(); + provider = new WrappedProvider(mock); + }); + + describe("EventEmitter", () => { + let callTimes: number; + function eventHandler() { + callTimes += 1; + } + + beforeEach(() => { + callTimes = 0; + }); + + it("it should work as an emitter", () => { + provider.on("event", eventHandler); + provider.on("otherevent", eventHandler); + provider.once("onceevent", eventHandler); + provider.emit("event"); // 1 + provider.emit("otherevent"); // 2 + provider.emit("onceevent"); // 3 + provider.emit("onceevent"); // 3 + provider.off("otherevent", eventHandler); + provider.emit("otherevent"); // 3 + + assert.equal(callTimes, 3); + }); + }); + + describe("get params", () => { + it("should parse the params and return an array", () => { + const params = [1, "2", 3, "4"]; + const providerParams = provider.getParams({ method: "amethod", params }); + + assert.deepEqual(params, providerParams); + }); + + it("should throw if the params are an object", () => { + const params = { invalid: "params" }; + + assert.throw( + () => provider.getParams({ method: "amethod", params }), + InvalidInputError, + "Hardhat Network doesn't support JSON-RPC params sent as an object" + ); + }); + }); +}); diff --git a/packages/hardhat-core/test/internal/core/runtime-environment.ts b/packages/hardhat-core/test/internal/core/runtime-environment.ts index 241e43dd14..710ca1294a 100644 --- a/packages/hardhat-core/test/internal/core/runtime-environment.ts +++ b/packages/hardhat-core/test/internal/core/runtime-environment.ts @@ -17,6 +17,7 @@ import { HardhatConfig, HardhatRuntimeEnvironment, ParamDefinition, + ScopesMap, TasksMap, } from "../../../src/types"; import { @@ -80,6 +81,7 @@ describe("Environment", () => { }; let tasks: TasksMap; + let scopes: ScopesMap; let env: HardhatRuntimeEnvironment; let dsl: TasksDSL; @@ -90,6 +92,10 @@ describe("Environment", () => { return 27; }); + dsl.scope("scoped").task("task", async () => { + return 28; + }); + dsl .task("complexExampleTask", "a complex example task") .addPositionalParam( @@ -133,8 +139,9 @@ describe("Environment", () => { .setAction(async (_args: any[]) => _args); tasks = ctx.tasksDSL.getTaskDefinitions(); + scopes = ctx.tasksDSL.getScopesDefinitions(); - env = new Environment(config, args, tasks); + env = new Environment(config, args, tasks, scopes); ctx.setHardhatRuntimeEnvironment(env); }); @@ -154,6 +161,37 @@ describe("Environment", () => { assert.equal(ret, 27); }); + it("should run a scoped task correctly", async () => { + const ret = await env.run({ scope: "scoped", task: "task" }); + assert.equal(ret, 28); + }); + + it("should throw if the scope doesn't exist", async () => { + await expectHardhatErrorAsync( + () => env.run({ scope: "scopd", task: "task" }), + ERRORS.ARGUMENTS.UNRECOGNIZED_SCOPE + ); + }); + + it("should throw if a scoped task doesn't exist", async () => { + await expectHardhatErrorAsync( + () => env.run({ scope: "scoped", task: "tsk" }), + ERRORS.ARGUMENTS.UNRECOGNIZED_SCOPED_TASK + ); + }); + + it("should not run a scoped task with just task name", async () => { + await expectHardhatErrorAsync( + () => env.run("task"), + ERRORS.ARGUMENTS.UNRECOGNIZED_TASK + ); + + await expectHardhatErrorAsync( + () => env.run({ task: "task" }), + ERRORS.ARGUMENTS.UNRECOGNIZED_TASK + ); + }); + describe("run task arguments validation", () => { it("should throw on missing required argument", async () => { const taskName = "complexExampleTask"; @@ -287,10 +325,11 @@ describe("Environment", () => { }); }); - it("should fail trying to run a non existent task", () => { - env.run("invalid").catch((err) => { - assert.equal(err.number, ERRORS.ARGUMENTS.UNRECOGNIZED_TASK.number); - }); + it("should fail trying to run a non existent task", async () => { + await expectHardhatErrorAsync( + () => env.run("invalid"), + ERRORS.ARGUMENTS.UNRECOGNIZED_TASK + ); }); it("should clean global state after task execution", async () => { @@ -306,7 +345,8 @@ describe("Environment", () => { return 28; }); tasks = dsl.getTaskDefinitions(); - const localEnv = new Environment(config, args, tasks); + scopes = dsl.getScopesDefinitions(); + const localEnv = new Environment(config, args, tasks, scopes); assert.equal(await localEnv.run("example"), 28); }); @@ -407,7 +447,8 @@ describe("Environment", () => { config, { ...args, network: "NOPE" }, tasks, - ctx.extendersManager.getExtenders() + scopes, + ctx.environmentExtenders ); }, ERRORS.NETWORK.CONFIG_NOT_FOUND); }); @@ -418,7 +459,8 @@ describe("Environment", () => { config, { ...args, network: undefined }, tasks, - ctx.extendersManager.getExtenders() + scopes, + ctx.environmentExtenders ); assert.equal(env.network.name, "default"); @@ -525,7 +567,8 @@ describe("Environment", () => { config, args, tasks, - ctx.extendersManager.getExtenders() + scopes, + ctx.environmentExtenders ); assert.equal((env as any).__test_key, "a value"); assert.equal((env as any).__test_bleep(2), 4); diff --git a/packages/hardhat-core/test/internal/core/scoped-tasks.ts b/packages/hardhat-core/test/internal/core/scoped-tasks.ts new file mode 100644 index 0000000000..7c1830a7f9 --- /dev/null +++ b/packages/hardhat-core/test/internal/core/scoped-tasks.ts @@ -0,0 +1,70 @@ +import { assert } from "chai"; + +import { useFixtureProject } from "../../helpers/project"; +import { useEnvironment } from "../../helpers/environment"; + +describe("scoped tasks", () => { + useFixtureProject("scoped-tasks"); + useEnvironment(); + + it("should include scopes in the hre", async function () { + const scopes = Object.keys(this.env.scopes); + + // vars is a builtin scope + assert.sameMembers(scopes, ["vars", "my-scope", "another-scope"]); + + assert.equal(this.env.scopes["my-scope"].name, "my-scope"); + assert.equal( + this.env.scopes["my-scope"].description, + "my-scope description" + ); + + assert.equal(this.env.scopes["another-scope"].name, "another-scope"); + assert.equal( + this.env.scopes["another-scope"].description, + "overridden: another-scope description" + ); + }); + + it("shouldn't include scoped tasks in hre.tasks", async function () { + assert.isUndefined(this.env.tasks["my-task"]); + + assert.isDefined(this.env.scopes["my-scope"].tasks["my-task"]); + }); + + it("should be possible to run scoped tasks programmatically", async function () { + const result = await this.env.run({ + scope: "my-scope", + task: "my-task", + }); + + assert.equal(result, "my-scope/my-task"); + }); + + it("should run overridden tasks", async function () { + const result = await this.env.run({ + scope: "my-scope", + task: "overridden-task", + }); + + assert.equal(result, "overridden: my-scope/overridden-task"); + }); + + it("should run subtasks", async function () { + const result = await this.env.run({ + scope: "my-scope", + task: "my-subtask", + }); + + assert.equal(result, "my-scope/my-subtask"); + }); + + it("should run overridden subtasks", async function () { + const result = await this.env.run({ + scope: "my-scope", + task: "my-overridden-subtask", + }); + + assert.equal(result, "overridden: my-scope/my-overridden-subtask"); + }); +}); diff --git a/packages/hardhat-core/test/internal/core/tasks/dsl.ts b/packages/hardhat-core/test/internal/core/tasks/dsl.ts index 1fe74b1ae3..419b0fd515 100644 --- a/packages/hardhat-core/test/internal/core/tasks/dsl.ts +++ b/packages/hardhat-core/test/internal/core/tasks/dsl.ts @@ -2,7 +2,10 @@ import { assert } from "chai"; import { ERRORS } from "../../../../src/internal/core/errors-list"; import { TasksDSL } from "../../../../src/internal/core/tasks/dsl"; -import { expectHardhatErrorAsync } from "../../../helpers/errors"; +import { + expectHardhatError, + expectHardhatErrorAsync, +} from "../../../helpers/errors"; describe("TasksDSL", () => { let dsl: TasksDSL; @@ -60,6 +63,60 @@ describe("TasksDSL", () => { ); }); + it("should create a scope without a description", () => { + const scope = dsl.scope("solidity"); + assert.equal(scope.name, "solidity"); + assert.isUndefined(scope.description); + }); + + it("should create a scope with a description", () => { + const scope = dsl.scope("solidity", "solidity tasks"); + assert.equal(scope.name, "solidity"); + assert.equal(scope.description, "solidity tasks"); + }); + + it("should override the description of a scope without description", () => { + const scope = dsl.scope("solidity"); + assert.equal(scope.name, "solidity"); + assert.isUndefined(scope.description); + + const newScope = dsl.scope("solidity", "solidity tasks"); + assert.equal(newScope.name, "solidity"); + assert.equal(newScope.description, "solidity tasks"); + assert.equal(scope, newScope); + }); + + it("should override the description of a scope with a description", () => { + const scope = dsl.scope("solidity", "solidity tasks"); + assert.equal(scope.name, "solidity"); + assert.equal(scope.description, "solidity tasks"); + + const newScope = dsl.scope("solidity", "solidity tasks 2"); + assert.equal(newScope.name, "solidity"); + assert.equal(newScope.description, "solidity tasks 2"); + assert.equal(scope, newScope); + }); + + it("should not create a scope if its name clashes with existing task", () => { + dsl.task("compile"); // no scope + + expectHardhatError( + () => dsl.scope("compile"), + ERRORS.TASK_DEFINITIONS.TASK_SCOPE_CLASH, + "A clash was found while creating scope 'compile', since a task with that name already exists." + ); + }); + + it("should not create a task if its name clashes with existing scope", () => { + dsl.scope("compile"); + + expectHardhatError( + () => dsl.task("compile"), + ERRORS.TASK_DEFINITIONS.SCOPE_TASK_CLASH, + "A clash was found while creating task 'compile', since a scope with that name already exists." + ); + }); + it("should override task", () => { const action = async () => {}; diff --git a/packages/hardhat-core/test/internal/core/tasks/task-definitions.ts b/packages/hardhat-core/test/internal/core/tasks/task-definitions.ts index 13ee2066fe..2ec0c1869a 100644 --- a/packages/hardhat-core/test/internal/core/tasks/task-definitions.ts +++ b/packages/hardhat-core/test/internal/core/tasks/task-definitions.ts @@ -1,9 +1,11 @@ import { assert } from "chai"; +import sinon from "sinon"; import { ERRORS } from "../../../../src/internal/core/errors-list"; import * as types from "../../../../src/internal/core/params/argumentTypes"; import { OverriddenTaskDefinition, + SimpleScopeDefinition, SimpleTaskDefinition, } from "../../../../src/internal/core/tasks/task-definitions"; import { unsafeObjectKeys } from "../../../../src/internal/util/unsafe"; @@ -64,6 +66,49 @@ describe("SimpleTaskDefinition", () => { assert.isUndefined(taskDefinition.description); }); + it("starts without any scope", () => { + assert.isUndefined(taskDefinition.scope); + }); + + it("starts with an action that throws", () => { + expectHardhatError( + () => taskDefinition.action({}, {} as any, runSuperNop), + ERRORS.TASK_DEFINITIONS.ACTION_NOT_SET + ); + }); + }); + + describe("construction with task identifiers", () => { + let taskDefinition: SimpleTaskDefinition; + + before("init taskDefinition", () => { + taskDefinition = new SimpleTaskDefinition( + { scope: "scope", task: "name" }, + true + ); + }); + + it("gets the right name", () => { + assert.equal(taskDefinition.name, "name"); + }); + + it("gets the right scope", () => { + assert.equal(taskDefinition.scope, "scope"); + }); + + it("gets the right isSubtask flag", () => { + assert.isTrue(taskDefinition.isSubtask); + }); + + it("starts without any param defined", () => { + assert.deepEqual(taskDefinition.paramDefinitions, {}); + assert.isEmpty(taskDefinition.positionalParamDefinitions); + }); + + it("starts without any description", () => { + assert.isUndefined(taskDefinition.description); + }); + it("starts with an action that throws", () => { expectHardhatError( () => taskDefinition.action({}, {} as any, runSuperNop), @@ -1100,3 +1145,72 @@ describe("OverriddenTaskDefinition", () => { }); }); }); + +describe("SimpleScopeDefinition", () => { + it("should create a scope definition without a description", async function () { + const scopeDefinition = new SimpleScopeDefinition( + "scope", + undefined, + (() => {}) as any, + (() => {}) as any + ); + + assert.equal(scopeDefinition.name, "scope"); + assert.isUndefined(scopeDefinition.description); + }); + + it("should create a scope definition with a description", async function () { + const scopeDefinition = new SimpleScopeDefinition( + "scope", + "a description", + (() => {}) as any, + (() => {}) as any + ); + + assert.equal(scopeDefinition.name, "scope"); + assert.equal(scopeDefinition.description, "a description"); + }); + + it("should change the description with setDescription", async function () { + const scopeDefinition = new SimpleScopeDefinition( + "scope", + "a description", + (() => {}) as any, + (() => {}) as any + ); + + assert.equal(scopeDefinition.name, "scope"); + assert.equal(scopeDefinition.description, "a description"); + + scopeDefinition.setDescription("another description"); + + assert.equal(scopeDefinition.description, "another description"); + }); + + it("should call the right callbacks", async function () { + const addTask = sinon.spy(); + const addSubtask = sinon.spy(); + + const scopeDefinition = new SimpleScopeDefinition( + "scope", + "a description", + addTask, + addSubtask + ); + + assert.isFalse(addTask.called); + assert.isFalse(addSubtask.called); + + const taskAction: any = () => {}; + scopeDefinition.task("task", taskAction); + + assert.isTrue(addTask.calledOnce); + assert.isFalse(addSubtask.called); + + const subtaskAction: any = () => {}; + scopeDefinition.subtask("subtask", subtaskAction); + + assert.isTrue(addTask.calledOnce); + assert.isTrue(addSubtask.calledOnce); + }); +}); diff --git a/packages/hardhat-core/test/internal/core/vars/vars-manager-setup.ts b/packages/hardhat-core/test/internal/core/vars/vars-manager-setup.ts new file mode 100644 index 0000000000..0820f1d152 --- /dev/null +++ b/packages/hardhat-core/test/internal/core/vars/vars-manager-setup.ts @@ -0,0 +1,219 @@ +import "mocha"; +import fs from "fs-extra"; +import { assert, expect } from "chai"; +import * as os from "os"; +import { VarsManagerSetup } from "../../../../src/internal/core/vars/vars-manager-setup"; + +describe("VarsManagerSetup", () => { + const TMP_FILE_PATH = `${os.tmpdir()}/test-vars.json`; + let varsManagerSetup: VarsManagerSetup; + + beforeEach(() => { + fs.removeSync(TMP_FILE_PATH); + + fs.writeJSONSync(TMP_FILE_PATH, { + _format: "test", + vars: { + key1: { value: "val1" }, + key2: { value: "val2" }, + key3: { value: "val3" }, + key4: { value: "val4" }, + key5: { value: "val5" }, + key6: { value: "val6" }, + key7: { value: "val7" }, + }, + }); + + varsManagerSetup = new VarsManagerSetup(TMP_FILE_PATH); + }); + + // + // getRequiredVarsAlreadySet, getOptionalVarsAlreadySet, getRequiredVarsToSet and getOptionalVarsToSet are tested when testing the functions has and get + // + + describe("has - basic operations", () => { + it("should return keys only with the function getOptionalVarsAlreadySet", () => { + varsManagerSetup.has("key1"); + varsManagerSetup.has("key2"); + + assert.deepEqual(varsManagerSetup.getRequiredVarsAlreadySet(), []); + assert.deepEqual(varsManagerSetup.getOptionalVarsAlreadySet(), [ + "key1", + "key2", + ]); + + assert.deepEqual(varsManagerSetup.getRequiredVarsToSet(), []); + assert.deepEqual(varsManagerSetup.getOptionalVarsToSet(), []); + }); + + it("should return keys only with the function getOptionalVarsToSet", () => { + varsManagerSetup.has("nonExistingKey1"); + varsManagerSetup.has("nonExistingKey2"); + + assert.deepEqual(varsManagerSetup.getRequiredVarsAlreadySet(), []); + assert.deepEqual(varsManagerSetup.getOptionalVarsAlreadySet(), []); + + assert.deepEqual(varsManagerSetup.getRequiredVarsToSet(), []); + assert.deepEqual(varsManagerSetup.getOptionalVarsToSet(), [ + "nonExistingKey1", + "nonExistingKey2", + ]); + }); + }); + + describe("get - basic operations", () => { + it("should return keys only with the function getRequiredVarsAlreadySet", () => { + varsManagerSetup.get("key1"); + varsManagerSetup.get("key2"); + + assert.deepEqual(varsManagerSetup.getRequiredVarsAlreadySet(), [ + "key1", + "key2", + ]); + assert.deepEqual(varsManagerSetup.getOptionalVarsAlreadySet(), []); + + assert.deepEqual(varsManagerSetup.getRequiredVarsToSet(), []); + assert.deepEqual(varsManagerSetup.getOptionalVarsToSet(), []); + }); + + it("should return keys only with the function getRequiredVarsToSet", () => { + varsManagerSetup.get("nonExistingKey1"); + varsManagerSetup.get("nonExistingKey2"); + + assert.deepEqual(varsManagerSetup.getRequiredVarsAlreadySet(), []); + assert.deepEqual(varsManagerSetup.getOptionalVarsAlreadySet(), []); + + assert.deepEqual(varsManagerSetup.getRequiredVarsToSet(), [ + "nonExistingKey1", + "nonExistingKey2", + ]); + assert.deepEqual(varsManagerSetup.getOptionalVarsToSet(), []); + }); + + describe("default values is passed", () => { + it("should return keys only with the function getOptionalVarsAlreadySet", () => { + varsManagerSetup.get("key1", "defaultValue"); + + assert.deepEqual(varsManagerSetup.getRequiredVarsAlreadySet(), []); + assert.deepEqual(varsManagerSetup.getOptionalVarsAlreadySet(), [ + "key1", + ]); + + assert.deepEqual(varsManagerSetup.getRequiredVarsToSet(), []); + assert.deepEqual(varsManagerSetup.getOptionalVarsToSet(), []); + }); + + it("should return keys only with the function getOptionalVarsToSet", () => { + varsManagerSetup.get("nonExistingKey", "defaultValue"); + + assert.deepEqual(varsManagerSetup.getRequiredVarsAlreadySet(), []); + assert.deepEqual(varsManagerSetup.getOptionalVarsAlreadySet(), []); + + assert.deepEqual(varsManagerSetup.getRequiredVarsToSet(), []); + assert.deepEqual(varsManagerSetup.getOptionalVarsToSet(), [ + "nonExistingKey", + ]); + }); + }); + }); + + describe("mix of optional and required variables", () => { + /** + * How to calculate required and optional variables: + * + * G = get function + * H = has function + * GD = get function with default value + * + * optional variables = H + (GD - G) + * required variables = G - H + */ + + it("should return keys only for the already set variables", () => { + varsManagerSetup.has("key1"); + varsManagerSetup.has("key2"); + varsManagerSetup.has("key3"); + + varsManagerSetup.get("key1"); + varsManagerSetup.get("key2"); + varsManagerSetup.get("key6"); + varsManagerSetup.get("key7"); + varsManagerSetup.get("key3"); + + varsManagerSetup.get("key1", "defaultValue1"); + varsManagerSetup.get("key5", "defaultValue5"); + varsManagerSetup.get("key6", "defaultValue6"); + + assert.deepEqual(varsManagerSetup.getRequiredVarsAlreadySet(), [ + "key6", + "key7", + ]); + assert.deepEqual(varsManagerSetup.getOptionalVarsAlreadySet(), [ + "key1", + "key2", + "key3", + "key5", + ]); + + assert.deepEqual(varsManagerSetup.getRequiredVarsToSet(), []); + assert.deepEqual(varsManagerSetup.getOptionalVarsToSet(), []); + }); + + it("should return keys only for the variables that need to be set", () => { + varsManagerSetup.has("nonExistingKey1"); + varsManagerSetup.has("nonExistingKey2"); + varsManagerSetup.has("nonExistingKey3"); + + varsManagerSetup.get("nonExistingKey1"); + varsManagerSetup.get("nonExistingKey2"); + varsManagerSetup.get("nonExistingKey6"); + varsManagerSetup.get("nonExistingKey7"); + varsManagerSetup.get("nonExistingKey3"); + + varsManagerSetup.get("nonExistingKey1", "defaultValue1"); + varsManagerSetup.get("nonExistingKey5", "defaultValue5"); + varsManagerSetup.get("nonExistingKey6", "defaultValue6"); + + assert.deepEqual(varsManagerSetup.getRequiredVarsAlreadySet(), []); + assert.deepEqual(varsManagerSetup.getOptionalVarsAlreadySet(), []); + + assert.deepEqual(varsManagerSetup.getRequiredVarsToSet(), [ + "nonExistingKey6", + "nonExistingKey7", + ]); + assert.deepEqual(varsManagerSetup.getOptionalVarsToSet(), [ + "nonExistingKey1", + "nonExistingKey2", + "nonExistingKey3", + "nonExistingKey5", + ]); + }); + }); + + describe("env variables are present", () => { + const ENV_VAR_PREFIX = "HARDHAT_VAR_"; + const KEY = "key_env_1"; + + beforeEach(() => { + process.env[`${ENV_VAR_PREFIX}${KEY}`] = "val1"; + }); + + afterEach(() => { + delete process.env[`${ENV_VAR_PREFIX}${KEY}`]; + }); + + it("should return false, env vars should be ignored during setup", () => { + expect(varsManagerSetup.has(KEY)).to.equal(false); + }); + + it("should return an empty string, env vars should be ignored during setup", () => { + expect(varsManagerSetup.get(KEY)).to.equal(""); + }); + + it("should return an the default value, env vars should be ignored during setup", () => { + expect(varsManagerSetup.get(KEY, "defaultValue")).to.equal( + "defaultValue" + ); + }); + }); +}); diff --git a/packages/hardhat-core/test/internal/core/vars/vars-manager.ts b/packages/hardhat-core/test/internal/core/vars/vars-manager.ts new file mode 100644 index 0000000000..b945d3f1c1 --- /dev/null +++ b/packages/hardhat-core/test/internal/core/vars/vars-manager.ts @@ -0,0 +1,239 @@ +import fs from "fs-extra"; +import { expect } from "chai"; +import * as os from "os"; +import { VarsManager } from "../../../../src/internal/core/vars/vars-manager"; + +describe("VarsManager", () => { + let TMP_FILE_PATH: string; + let varsManager: VarsManager; + + beforeEach(() => { + TMP_FILE_PATH = `${os.tmpdir()}/test-vars.json`; + fs.removeSync(TMP_FILE_PATH); + + varsManager = new VarsManager(TMP_FILE_PATH); + }); + + // + // For deep testing of the set, has, get, list and delete methods, see the last test + // + + describe("format", () => { + it("should contain the _format property and it should have a valid value", () => { + const format = fs.readJSONSync(TMP_FILE_PATH)._format; + + expect(format).to.not.equal(undefined); + expect(format.length).to.be.greaterThan(0); + }); + }); + + describe("getStoragePath", () => { + it("should get the path where the key-value pairs are stored", () => { + expect(varsManager.getStoragePath()).to.equal(TMP_FILE_PATH); + }); + }); + + describe("set", () => { + it("should throw if the key is invalid", () => { + expect(() => varsManager.set("invalid key", "val")).to.throw( + "HH1202: Invalid name for a configuration variable: 'invalid key'. Configuration variables can only have alphanumeric characters and underscores, and they cannot start with a number." + ); + + expect(() => varsManager.set("0key", "val")).to.throw( + "HH1202: Invalid name for a configuration variable: '0key'. Configuration variables can only have alphanumeric characters and underscores, and they cannot start with a number." + ); + + expect(() => varsManager.set("invalid!", "val")).to.throw( + "HH1202: Invalid name for a configuration variable: 'invalid!'. Configuration variables can only have alphanumeric characters and underscores, and they cannot start with a number." + ); + }); + + it("should throw if the value is invalid", () => { + expect(() => varsManager.set("key", "")).to.throw( + "HH1203: A configuration variable cannot have an empty value." + ); + }); + }); + + describe("the json file should match all the operations performed with the VarsManager", () => { + function performOperations() { + varsManager.set("key1", "val1"); + varsManager.set("key2", "val2"); + varsManager.set("key3", "val3"); + + varsManager.delete("key1"); + varsManager.delete("non-existent"); + + varsManager.set("key4", "val4"); + varsManager.set("key5", "val5"); + + varsManager.delete("key5"); + } + + it("should match", () => { + performOperations(); + + const vars = fs.readJSONSync(TMP_FILE_PATH).vars; + expect(vars).to.deep.equal({ + key2: { value: "val2" }, + key3: { value: "val3" }, + key4: { value: "val4" }, + }); + }); + + it("should match after reloading the VarsManager (json file is persistent in storage)", () => { + performOperations(); + + const newVarsManager = new VarsManager(TMP_FILE_PATH); + + expect(newVarsManager.get("key1")).to.equal(undefined); + expect(newVarsManager.get("key2")).to.equal("val2"); + expect(newVarsManager.get("key3")).to.equal("val3"); + expect(newVarsManager.get("key4")).to.equal("val4"); + expect(newVarsManager.get("key5")).to.equal(undefined); + }); + }); + + describe("test all methods (set, get, list and delete)", () => { + it("should execute all methods correctly", () => { + // set + varsManager.set("key1", "val1"); + varsManager.set("key2", "val2"); + varsManager.set("key3", "val3"); + + // has + expect(varsManager.has("key1")).to.equal(true); + expect(varsManager.has("key4")).to.equal(false); + + // delete + expect(varsManager.delete("key1")).to.equal(true); + expect(varsManager.delete("non-existent")).to.equal(false); + + // get + expect(varsManager.get("key1")).to.equal(undefined); + expect(varsManager.get("key2")).to.equal("val2"); + expect(varsManager.get("key3")).to.equal("val3"); + + // list + expect(varsManager.list()).to.deep.equal(["key2", "key3"]); + + // delete + expect(varsManager.delete("key2")).to.equal(true); + expect(varsManager.delete("key3")).to.equal(true); + + // list + expect(varsManager.list()).to.deep.equal([]); + + // get + expect(varsManager.get("key3")).to.equal(undefined); + + // set + varsManager.set("key1", "val1"); + varsManager.set("key4", "val4"); + varsManager.set("key5", "val5"); + + // list + expect(varsManager.list()).to.deep.equal(["key1", "key4", "key5"]); + + // get + expect(varsManager.get("key1")).to.equal("val1"); + expect(varsManager.get("key4")).to.equal("val4"); + expect(varsManager.get("key5")).to.equal("val5"); + }); + }); + + describe("load vars from environment variables", () => { + const ENV_VAR_PREFIX = "HARDHAT_VAR_"; + const KEY1 = "KEY_ENV_1"; + const KEY2 = "KEY_ENV_2"; + + describe("when ENV variables are correctly set", () => { + beforeEach(() => { + process.env[`${ENV_VAR_PREFIX}${KEY1}`] = "val1"; + process.env[`${ENV_VAR_PREFIX}${KEY2}`] = "val2"; + varsManager = new VarsManager(TMP_FILE_PATH); + }); + + afterEach(() => { + delete process.env[`${ENV_VAR_PREFIX}${KEY1}`]; + delete process.env[`${ENV_VAR_PREFIX}${KEY2}`]; + }); + + describe("function has (without env variables)", () => { + it("should not have the key-value pairs from the environment variables", () => { + expect(varsManager.has(KEY1)).to.equal(false); + }); + }); + + describe("function has (with env variables)", () => { + it("should have the key-value pairs from the environment variables", () => { + expect(varsManager.has(KEY1, true)).to.equal(true); + }); + }); + + describe("function get (without env variables)", () => { + it("should get the value from the file, not from the env keys", () => { + expect(varsManager.get(KEY1)).to.equal(undefined); + }); + + it("should get the value from the file, not from the env keys (same key as the env variable)", () => { + varsManager.set(KEY1, "storedValue"); + + expect(varsManager.get(KEY1)).to.equal("storedValue"); + }); + }); + + describe("function get (with env variables)", () => { + it("should load the key-value pairs from the environment variables", () => { + expect(varsManager.get(KEY1, undefined, true)).to.equal("val1"); + }); + + it("should show the env variable value. Env variables have priority over the stored ones", () => { + varsManager.set(KEY1, "storedValue"); + + expect(varsManager.get(KEY1, undefined, true)).to.equal("val1"); + }); + }); + + it("should return only the env variables keys", () => { + expect(varsManager.getEnvVars()).to.deep.equal([ + `${ENV_VAR_PREFIX}${KEY1}`, + `${ENV_VAR_PREFIX}${KEY2}`, + ]); + }); + + it("should not store the env variable in the file but only in the cache", () => { + // Add a new key-value pair to be sure that env variables are not added when the cache is stored on file during the set operation + varsManager.set("key", "val"); + + const vars = fs.readJSONSync(TMP_FILE_PATH).vars; + + expect(vars).to.deep.equal({ + key: { value: "val" }, + }); + }); + }); + + describe("error when env key is wrong", () => { + it("should throw an error because the env variable key is not correct", () => { + process.env[`${ENV_VAR_PREFIX}0_invalidKey`] = "val1"; + + expect(() => new VarsManager(TMP_FILE_PATH)).to.throw( + "HH1202: Invalid name for a configuration variable: '0_invalidKey'. Configuration variables can only have alphanumeric characters and underscores, and they cannot start with a number." + ); + + delete process.env[`${ENV_VAR_PREFIX}0_invalidKey`]; + }); + + it("should throw an error because the env variable value is not correct", () => { + process.env[`${ENV_VAR_PREFIX}${KEY1}`] = " "; // space and tab to be sure that spaces are striped correctly + + expect(() => new VarsManager(TMP_FILE_PATH)).to.throw( + `HH300: Invalid environment variable '${ENV_VAR_PREFIX}${KEY1}' with value: ' '` + ); + + delete process.env[`${ENV_VAR_PREFIX}${KEY1}`]; + }); + }); + }); +}); diff --git a/packages/hardhat-core/test/internal/hardhat-network/console-log.ts b/packages/hardhat-core/test/internal/hardhat-network/console-log.ts new file mode 100644 index 0000000000..d62ed9da54 --- /dev/null +++ b/packages/hardhat-core/test/internal/hardhat-network/console-log.ts @@ -0,0 +1,77 @@ +import { assert } from "chai"; +import { useEnvironment } from "../../helpers/environment"; +import { useFixtureProject } from "../../helpers/project"; +import { TASK_COMPILE } from "../../../src/builtin-tasks/task-names"; + +describe("Solidity console.log should print numbers without losing precision, occurrences of %d and %i should be correctly replaced with %s", function () { + const n1 = "11111111111111111111111111111111"; + const n2 = "22222222222222222222222222222222"; + const n3 = "33333333333333333333333333333333"; + + // Set up the test environment + useFixtureProject("console-log"); + useEnvironment(); + + it("should print all the numbers without losing precision", async function () { + await this.env.run(TASK_COMPILE, { quiet: true }); + + // Retrieve the artifact of the solidity file compiled in the previous command + const artifact = this.env.artifacts.readArtifactSync("Test"); + + // Deploy contract and get receipt + const [deployer] = await this.env.network.provider.send("eth_accounts"); + const tx = await this.env.network.provider.send("eth_sendTransaction", [ + { + from: deployer, + data: artifact.bytecode, + }, + ]); + const receipt = await this.env.network.provider.send( + "eth_getTransactionReceipt", + [tx] + ); + + // Modify console.log to store the messages that are gonna be printed when executing the smart contract function + const originalConsoleLog = console.log; + const capturedLogs: any[] = []; + console.log = (v: any) => { + capturedLogs.push(v); + }; + + // Call the contract function + await this.env.network.provider.send("eth_sendTransaction", [ + { + from: deployer, + to: receipt.contractAddress, + data: "0xf8a8fd6d", // selector of 'test()' + }, + ]); + + // Restore the original console.log + console.log = originalConsoleLog; + + // Process the captured logs as needed + assert.strictEqual("123456789123456789123456789", capturedLogs[0]); + assert.strictEqual("123456789123456789123456789", capturedLogs[1]); + assert.strictEqual(`${n1}${n2}${n3}`, capturedLogs[2]); + assert.strictEqual(`${n1} %i ${n1}`, capturedLogs[3]); + // When % are in even number it means that they are escaped so %d and %i are not transformed into %s. + // See util.format docs for more info. + assert.strictEqual(`${n1} %d %2 %%d %%${n3} %%%d`, capturedLogs[4]); + assert.strictEqual(`${n1} %i %2 %%i %%${n3} %%%i`, capturedLogs[5]); + assert.strictEqual(`${n1} %s %2 %%s %%${n3} %%%s`, capturedLogs[6]); + assert.strictEqual("%s", capturedLogs[7]); + assert.strictEqual("%%d", capturedLogs[8]); + assert.strictEqual("%s", capturedLogs[9]); + assert.strictEqual("%s %s %s %%d", capturedLogs[10]); + assert.strictEqual( + "1111111111111111114444444444444444444455555555555555555555", + capturedLogs[11] + ); + assert.strictEqual("1", capturedLogs[12]); + assert.strictEqual("12", capturedLogs[13]); + assert.strictEqual("13", capturedLogs[14]); + + assert.strictEqual(capturedLogs.length, 15); + }); +}); diff --git a/packages/hardhat-core/test/internal/hardhat-network/helpers/contracts.ts b/packages/hardhat-core/test/internal/hardhat-network/helpers/contracts.ts index 8c36e2d2a8..ee43d8914d 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/helpers/contracts.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/helpers/contracts.ts @@ -1,3 +1,7 @@ +// When a contract is compiled, two bytecodes are generated: the bytecode and the deployedBytecode. +// When you need to deploy a contract, for example using the eth_sendTransaction method, use the bytecode. +// When you need to override an existing deployed contract, such as when setting the code property using the eth_call method, use the deployedBytecode. + export const EXAMPLE_READ_CONTRACT = { sourceCode: ` pragma solidity ^0.8.0; @@ -747,3 +751,499 @@ contract Example { }, topics: {}, }; + +export const STATE_OVERRIDE_SET_CONTRACT_A = { + sourceCode: ` + // SPDX-License-Identifier: MIT + pragma solidity ^0.8.18; + + import "./B.sol"; + import "./D.sol"; + + contract A { + B public contractBInstance; + D public contractDInstance; + uint256 public x = 1; + uint256 public y = 2; + + constructor(address _contractBAddress, address _contractDAddress) { + contractBInstance = B(_contractBAddress); + contractDInstance = D(_contractDAddress); + } + + function getX() public view returns (uint256){ + return x; + } + + function getY() public view returns (uint256){ + return y; + } + + function getXAndY() public view returns (uint256, uint256) { + return (x, y); + } + + function senderBalance() public view returns (uint256 balance) { + balance = msg.sender.balance; + } + + function getMessageFromBContract() public view returns (string memory){ + return contractBInstance.getMessage(); + } + + function deployContractAndGetMultipleBalances() public returns ( + uint256 balance, + uint256, + address, + string memory, + uint256 + ){ + return ( + msg.sender.balance, + address(this).balance, + contractDInstance.deployChildContract(), + contractBInstance.getMessage(), + y + ); + } + } + `, + bytecode: { + linkReferences: {}, + object: + "60806040526001600255600260035534801561001a57600080fd5b50604051610a4e380380610a4e833981810160405281019061003c9190610127565b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610167565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100f4826100c9565b9050919050565b610104816100e9565b811461010f57600080fd5b50565b600081519050610121816100fb565b92915050565b6000806040838503121561013e5761013d6100c4565b5b600061014c85828601610112565b925050602061015d85828601610112565b9150509250929050565b6108d8806101766000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806378d76b451161006657806378d76b451461013d5780638ce671ec1461015c578063a56dfe4a1461017a578063f399d46714610198578063f537ca07146101b65761009e565b80630b7f1665146100a35780630c55699c146100c157806348b94982146100df5780634c53bb6d146100fd5780635197c7aa1461011f575b600080fd5b6100ab6101d4565b6040516100b8919061047f565b60405180910390f35b6100c96101de565b6040516100d6919061047f565b60405180910390f35b6100e76101e4565b6040516100f4919061052a565b60405180910390f35b61010561027f565b60405161011695949392919061058d565b60405180910390f35b6101276103dc565b604051610134919061047f565b60405180910390f35b6101456103e6565b6040516101539291906105e7565b60405180910390f35b6101646103f7565b604051610171919061047f565b60405180910390f35b610182610416565b60405161018f919061047f565b60405180910390f35b6101a061041c565b6040516101ad919061066f565b60405180910390f35b6101be610440565b6040516101cb91906106ab565b60405180910390f35b6000600354905090565b60025481565b606060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce6d41de6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610251573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061027a9190610800565b905090565b6000806000606060003373ffffffffffffffffffffffffffffffffffffffff163147600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c34c041c6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610310573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103349190610875565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce6d41de6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561039f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906103c89190610800565b600354945094509450945094509091929394565b6000600254905090565b600080600254600354915091509091565b60003373ffffffffffffffffffffffffffffffffffffffff1631905090565b60035481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000819050919050565b61047981610466565b82525050565b60006020820190506104946000830184610470565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156104d45780820151818401526020810190506104b9565b60008484015250505050565b6000601f19601f8301169050919050565b60006104fc8261049a565b61050681856104a5565b93506105168185602086016104b6565b61051f816104e0565b840191505092915050565b6000602082019050818103600083015261054481846104f1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006105778261054c565b9050919050565b6105878161056c565b82525050565b600060a0820190506105a26000830188610470565b6105af6020830187610470565b6105bc604083018661057e565b81810360608301526105ce81856104f1565b90506105dd6080830184610470565b9695505050505050565b60006040820190506105fc6000830185610470565b6106096020830184610470565b9392505050565b6000819050919050565b600061063561063061062b8461054c565b610610565b61054c565b9050919050565b60006106478261061a565b9050919050565b60006106598261063c565b9050919050565b6106698161064e565b82525050565b60006020820190506106846000830184610660565b92915050565b60006106958261063c565b9050919050565b6106a58161068a565b82525050565b60006020820190506106c0600083018461069c565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61071c826104e0565b810181811067ffffffffffffffff8211171561073b5761073a6106e4565b5b80604052505050565b600061074e6106c6565b905061075a8282610713565b919050565b600067ffffffffffffffff82111561077a576107796106e4565b5b610783826104e0565b9050602081019050919050565b60006107a361079e8461075f565b610744565b9050828152602081018484840111156107bf576107be6106df565b5b6107ca8482856104b6565b509392505050565b600082601f8301126107e7576107e66106da565b5b81516107f7848260208601610790565b91505092915050565b600060208284031215610816576108156106d0565b5b600082015167ffffffffffffffff811115610834576108336106d5565b5b610840848285016107d2565b91505092915050565b6108528161056c565b811461085d57600080fd5b50565b60008151905061086f81610849565b92915050565b60006020828403121561088b5761088a6106d0565b5b600061089984828501610860565b9150509291505056fea26469706673582212205da29fc38e70aa34456f8bd796cf21386a8e42c07ef2628e5a004168195e08cb64736f6c63430008120033", + opcodes: + "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x2 SSTORE PUSH1 0x2 PUSH1 0x3 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0xA4E CODESIZE SUB DUP1 PUSH2 0xA4E DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH2 0x3C SWAP2 SWAP1 PUSH2 0x127 JUMP JUMPDEST DUP2 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP POP PUSH2 0x167 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xF4 DUP3 PUSH2 0xC9 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x104 DUP2 PUSH2 0xE9 JUMP JUMPDEST DUP2 EQ PUSH2 0x10F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x121 DUP2 PUSH2 0xFB JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0x13E JUMPI PUSH2 0x13D PUSH2 0xC4 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x14C DUP6 DUP3 DUP7 ADD PUSH2 0x112 JUMP JUMPDEST SWAP3 POP POP PUSH1 0x20 PUSH2 0x15D DUP6 DUP3 DUP7 ADD PUSH2 0x112 JUMP JUMPDEST SWAP2 POP POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH2 0x8D8 DUP1 PUSH2 0x176 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x9E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x78D76B45 GT PUSH2 0x66 JUMPI DUP1 PUSH4 0x78D76B45 EQ PUSH2 0x13D JUMPI DUP1 PUSH4 0x8CE671EC EQ PUSH2 0x15C JUMPI DUP1 PUSH4 0xA56DFE4A EQ PUSH2 0x17A JUMPI DUP1 PUSH4 0xF399D467 EQ PUSH2 0x198 JUMPI DUP1 PUSH4 0xF537CA07 EQ PUSH2 0x1B6 JUMPI PUSH2 0x9E JUMP JUMPDEST DUP1 PUSH4 0xB7F1665 EQ PUSH2 0xA3 JUMPI DUP1 PUSH4 0xC55699C EQ PUSH2 0xC1 JUMPI DUP1 PUSH4 0x48B94982 EQ PUSH2 0xDF JUMPI DUP1 PUSH4 0x4C53BB6D EQ PUSH2 0xFD JUMPI DUP1 PUSH4 0x5197C7AA EQ PUSH2 0x11F JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xAB PUSH2 0x1D4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xB8 SWAP2 SWAP1 PUSH2 0x47F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xC9 PUSH2 0x1DE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD6 SWAP2 SWAP1 PUSH2 0x47F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xE7 PUSH2 0x1E4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xF4 SWAP2 SWAP1 PUSH2 0x52A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x105 PUSH2 0x27F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x116 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x58D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x127 PUSH2 0x3DC JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x134 SWAP2 SWAP1 PUSH2 0x47F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x145 PUSH2 0x3E6 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x153 SWAP3 SWAP2 SWAP1 PUSH2 0x5E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x164 PUSH2 0x3F7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x171 SWAP2 SWAP1 PUSH2 0x47F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x182 PUSH2 0x416 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x18F SWAP2 SWAP1 PUSH2 0x47F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1A0 PUSH2 0x41C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1AD SWAP2 SWAP1 PUSH2 0x66F JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x1BE PUSH2 0x440 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1CB SWAP2 SWAP1 PUSH2 0x6AB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 PUSH1 0x3 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x2 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCE6D41DE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x251 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x27A SWAP2 SWAP1 PUSH2 0x800 JUMP JUMPDEST SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x60 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND BALANCE SELFBALANCE PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xC34C041C PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 GAS CALL ISZERO DUP1 ISZERO PUSH2 0x310 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x334 SWAP2 SWAP1 PUSH2 0x875 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xCE6D41DE PUSH1 0x40 MLOAD DUP2 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x39F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x0 DUP3 RETURNDATACOPY RETURNDATASIZE PUSH1 0x1F NOT PUSH1 0x1F DUP3 ADD AND DUP3 ADD DUP1 PUSH1 0x40 MSTORE POP DUP2 ADD SWAP1 PUSH2 0x3C8 SWAP2 SWAP1 PUSH2 0x800 JUMP JUMPDEST PUSH1 0x3 SLOAD SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x2 SLOAD PUSH1 0x3 SLOAD SWAP2 POP SWAP2 POP SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND BALANCE SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x3 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x479 DUP2 PUSH2 0x466 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x494 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x470 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4D4 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x4B9 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4FC DUP3 PUSH2 0x49A JUMP JUMPDEST PUSH2 0x506 DUP2 DUP6 PUSH2 0x4A5 JUMP JUMPDEST SWAP4 POP PUSH2 0x516 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x4B6 JUMP JUMPDEST PUSH2 0x51F DUP2 PUSH2 0x4E0 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x544 DUP2 DUP5 PUSH2 0x4F1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x577 DUP3 PUSH2 0x54C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x587 DUP2 PUSH2 0x56C JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0xA0 DUP3 ADD SWAP1 POP PUSH2 0x5A2 PUSH1 0x0 DUP4 ADD DUP9 PUSH2 0x470 JUMP JUMPDEST PUSH2 0x5AF PUSH1 0x20 DUP4 ADD DUP8 PUSH2 0x470 JUMP JUMPDEST PUSH2 0x5BC PUSH1 0x40 DUP4 ADD DUP7 PUSH2 0x57E JUMP JUMPDEST DUP2 DUP2 SUB PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x5CE DUP2 DUP6 PUSH2 0x4F1 JUMP JUMPDEST SWAP1 POP PUSH2 0x5DD PUSH1 0x80 DUP4 ADD DUP5 PUSH2 0x470 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x5FC PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x470 JUMP JUMPDEST PUSH2 0x609 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x470 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x635 PUSH2 0x630 PUSH2 0x62B DUP5 PUSH2 0x54C JUMP JUMPDEST PUSH2 0x610 JUMP JUMPDEST PUSH2 0x54C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x647 DUP3 PUSH2 0x61A JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x659 DUP3 PUSH2 0x63C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x669 DUP2 PUSH2 0x64E JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x684 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x660 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x695 DUP3 PUSH2 0x63C JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x6A5 DUP2 PUSH2 0x68A JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x6C0 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x69C JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 MLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH2 0x71C DUP3 PUSH2 0x4E0 JUMP JUMPDEST DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR ISZERO PUSH2 0x73B JUMPI PUSH2 0x73A PUSH2 0x6E4 JUMP JUMPDEST JUMPDEST DUP1 PUSH1 0x40 MSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x74E PUSH2 0x6C6 JUMP JUMPDEST SWAP1 POP PUSH2 0x75A DUP3 DUP3 PUSH2 0x713 JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x77A JUMPI PUSH2 0x779 PUSH2 0x6E4 JUMP JUMPDEST JUMPDEST PUSH2 0x783 DUP3 PUSH2 0x4E0 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x7A3 PUSH2 0x79E DUP5 PUSH2 0x75F JUMP JUMPDEST PUSH2 0x744 JUMP JUMPDEST SWAP1 POP DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP5 DUP5 DUP5 ADD GT ISZERO PUSH2 0x7BF JUMPI PUSH2 0x7BE PUSH2 0x6DF JUMP JUMPDEST JUMPDEST PUSH2 0x7CA DUP5 DUP3 DUP6 PUSH2 0x4B6 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x1F DUP4 ADD SLT PUSH2 0x7E7 JUMPI PUSH2 0x7E6 PUSH2 0x6DA JUMP JUMPDEST JUMPDEST DUP2 MLOAD PUSH2 0x7F7 DUP5 DUP3 PUSH1 0x20 DUP7 ADD PUSH2 0x790 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x816 JUMPI PUSH2 0x815 PUSH2 0x6D0 JUMP JUMPDEST JUMPDEST PUSH1 0x0 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x834 JUMPI PUSH2 0x833 PUSH2 0x6D5 JUMP JUMPDEST JUMPDEST PUSH2 0x840 DUP5 DUP3 DUP6 ADD PUSH2 0x7D2 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x852 DUP2 PUSH2 0x56C JUMP JUMPDEST DUP2 EQ PUSH2 0x85D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0x86F DUP2 PUSH2 0x849 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x88B JUMPI PUSH2 0x88A PUSH2 0x6D0 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x899 DUP5 DUP3 DUP6 ADD PUSH2 0x860 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x5D LOG2 SWAP16 0xC3 DUP15 PUSH17 0xAA34456F8BD796CF21386A8E42C07EF262 DUP15 GAS STOP COINBASE PUSH9 0x195E08CB64736F6C63 NUMBER STOP ADDMOD SLT STOP CALLER ", + sourceMap: + "101:1238:0:-:0;;;204:1;185:20;;231:1;212:20;;241:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;340:17;318;;:40;;;;;;;;;;;;;;;;;;391:17;369;;:40;;;;;;;;;;;;;;;;;;241:176;;101:1238;;88:117:3;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:143::-;753:5;784:6;778:13;769:22;;800:33;827:5;800:33;:::i;:::-;696:143;;;;:::o;845:507::-;924:6;932;981:2;969:9;960:7;956:23;952:32;949:119;;;987:79;;:::i;:::-;949:119;1107:1;1132:64;1188:7;1179:6;1168:9;1164:22;1132:64;:::i;:::-;1122:74;;1078:128;1245:2;1271:64;1327:7;1318:6;1307:9;1303:22;1271:64;:::i;:::-;1261:74;;1216:129;845:507;;;;;:::o;101:1238:0:-;;;;;;;", + }, + abi: [ + { + inputs: [ + { + internalType: "address", + name: "_contractBAddress", + type: "address", + }, + { + internalType: "address", + name: "_contractDAddress", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "contractBInstance", + outputs: [ + { + internalType: "contract B", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "contractDInstance", + outputs: [ + { + internalType: "contract D", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "deployContractAndGetMultipleBalances", + outputs: [ + { + internalType: "uint256", + name: "balance", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "address", + name: "", + type: "address", + }, + { + internalType: "string", + name: "", + type: "string", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "getMessageFromBContract", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getX", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getXAndY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getY", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "senderBalance", + outputs: [ + { + internalType: "uint256", + name: "balance", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "x", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "y", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + ], + selectors: { + deployContractAndGetMultipleBalances: "0x4c53bb6d", + getMessageFromBContract: "0x48b94982", + getX: "0x5197c7aa", + getXAndY: "0x78d76b45", + getY: "0x0b7f1665", + senderBalance: "0x8ce671ec", + }, + topics: {}, +}; + +export const STATE_OVERRIDE_SET_CONTRACT_B = { + sourceCode: ` + // SPDX-License-Identifier: MIT + pragma solidity ^0.8.18; + + contract B { + string public message = "Hello from B!"; + + function getMessage() public view returns (string memory) { + return message; + } + } + `, + bytecode: { + linkReferences: {}, + object: + "60806040526040518060400160405280600d81526020017f48656c6c6f2066726f6d204221000000000000000000000000000000000000008152506000908161004891906102ab565b5034801561005557600080fd5b5061037d565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806100dc57607f821691505b6020821081036100ef576100ee610095565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026101577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261011a565b610161868361011a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006101a86101a361019e84610179565b610183565b610179565b9050919050565b6000819050919050565b6101c28361018d565b6101d66101ce826101af565b848454610127565b825550505050565b600090565b6101eb6101de565b6101f68184846101b9565b505050565b5b8181101561021a5761020f6000826101e3565b6001810190506101fc565b5050565b601f82111561025f57610230816100f5565b6102398461010a565b81016020851015610248578190505b61025c6102548561010a565b8301826101fb565b50505b505050565b600082821c905092915050565b600061028260001984600802610264565b1980831691505092915050565b600061029b8383610271565b9150826002028217905092915050565b6102b48261005b565b67ffffffffffffffff8111156102cd576102cc610066565b5b6102d782546100c4565b6102e282828561021e565b600060209050601f8311600181146103155760008415610303578287015190505b61030d858261028f565b865550610375565b601f198416610323866100f5565b60005b8281101561034b57848901518255600182019150602085019450602081019050610326565b868310156103685784890151610364601f891682610271565b8355505b6001600288020188555050505b505050505050565b6102df8061038c6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ce6d41de1461003b578063e21f37ce14610059575b600080fd5b610043610077565b6040516100509190610227565b60405180910390f35b610061610109565b60405161006e9190610227565b60405180910390f35b60606000805461008690610278565b80601f01602080910402602001604051908101604052809291908181526020018280546100b290610278565b80156100ff5780601f106100d4576101008083540402835291602001916100ff565b820191906000526020600020905b8154815290600101906020018083116100e257829003601f168201915b5050505050905090565b6000805461011690610278565b80601f016020809104026020016040519081016040528092919081815260200182805461014290610278565b801561018f5780601f106101645761010080835404028352916020019161018f565b820191906000526020600020905b81548152906001019060200180831161017257829003601f168201915b505050505081565b600081519050919050565b600082825260208201905092915050565b60005b838110156101d15780820151818401526020810190506101b6565b60008484015250505050565b6000601f19601f8301169050919050565b60006101f982610197565b61020381856101a2565b93506102138185602086016101b3565b61021c816101dd565b840191505092915050565b6000602082019050818103600083015261024181846101ee565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061029057607f821691505b6020821081036102a3576102a2610249565b5b5091905056fea26469706673582212203c003eeb65b4457267d443a41efb42191b2f8b4b83c358c7d9251fc642c35ea964736f6c63430008120033", + opcodes: + "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F2066726F6D20422100000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x0 SWAP1 DUP2 PUSH2 0x48 SWAP2 SWAP1 PUSH2 0x2AB JUMP JUMPDEST POP CALLVALUE DUP1 ISZERO PUSH2 0x55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 DIV SWAP1 POP PUSH1 0x1 DUP3 AND DUP1 PUSH2 0xDC JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0xEF JUMPI PUSH2 0xEE PUSH2 0x95 JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP DUP2 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 PUSH1 0x1F DUP4 ADD DIV SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 SHL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x8 DUP4 MUL PUSH2 0x157 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH2 0x11A JUMP JUMPDEST PUSH2 0x161 DUP7 DUP4 PUSH2 0x11A JUMP JUMPDEST SWAP6 POP DUP1 NOT DUP5 AND SWAP4 POP DUP1 DUP7 AND DUP5 OR SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A8 PUSH2 0x1A3 PUSH2 0x19E DUP5 PUSH2 0x179 JUMP JUMPDEST PUSH2 0x183 JUMP JUMPDEST PUSH2 0x179 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1C2 DUP4 PUSH2 0x18D JUMP JUMPDEST PUSH2 0x1D6 PUSH2 0x1CE DUP3 PUSH2 0x1AF JUMP JUMPDEST DUP5 DUP5 SLOAD PUSH2 0x127 JUMP JUMPDEST DUP3 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x1EB PUSH2 0x1DE JUMP JUMPDEST PUSH2 0x1F6 DUP2 DUP5 DUP5 PUSH2 0x1B9 JUMP JUMPDEST POP POP POP JUMP JUMPDEST JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x21A JUMPI PUSH2 0x20F PUSH1 0x0 DUP3 PUSH2 0x1E3 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x1FC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x25F JUMPI PUSH2 0x230 DUP2 PUSH2 0xF5 JUMP JUMPDEST PUSH2 0x239 DUP5 PUSH2 0x10A JUMP JUMPDEST DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x248 JUMPI DUP2 SWAP1 POP JUMPDEST PUSH2 0x25C PUSH2 0x254 DUP6 PUSH2 0x10A JUMP JUMPDEST DUP4 ADD DUP3 PUSH2 0x1FB JUMP JUMPDEST POP POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 SHR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x282 PUSH1 0x0 NOT DUP5 PUSH1 0x8 MUL PUSH2 0x264 JUMP JUMPDEST NOT DUP1 DUP4 AND SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x29B DUP4 DUP4 PUSH2 0x271 JUMP JUMPDEST SWAP2 POP DUP3 PUSH1 0x2 MUL DUP3 OR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2B4 DUP3 PUSH2 0x5B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2CD JUMPI PUSH2 0x2CC PUSH2 0x66 JUMP JUMPDEST JUMPDEST PUSH2 0x2D7 DUP3 SLOAD PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x2E2 DUP3 DUP3 DUP6 PUSH2 0x21E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 SWAP1 POP PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x303 JUMPI DUP3 DUP8 ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x30D DUP6 DUP3 PUSH2 0x28F JUMP JUMPDEST DUP7 SSTORE POP PUSH2 0x375 JUMP JUMPDEST PUSH1 0x1F NOT DUP5 AND PUSH2 0x323 DUP7 PUSH2 0xF5 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x34B JUMPI DUP5 DUP10 ADD MLOAD DUP3 SSTORE PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP6 ADD SWAP5 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x326 JUMP JUMPDEST DUP7 DUP4 LT ISZERO PUSH2 0x368 JUMPI DUP5 DUP10 ADD MLOAD PUSH2 0x364 PUSH1 0x1F DUP10 AND DUP3 PUSH2 0x271 JUMP JUMPDEST DUP4 SSTORE POP JUMPDEST PUSH1 0x1 PUSH1 0x2 DUP9 MUL ADD DUP9 SSTORE POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x2DF DUP1 PUSH2 0x38C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x36 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCE6D41DE EQ PUSH2 0x3B JUMPI DUP1 PUSH4 0xE21F37CE EQ PUSH2 0x59 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x43 PUSH2 0x77 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x50 SWAP2 SWAP1 PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x61 PUSH2 0x109 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x6E SWAP2 SWAP1 PUSH2 0x227 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD PUSH2 0x86 SWAP1 PUSH2 0x278 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0xB2 SWAP1 PUSH2 0x278 JUMP JUMPDEST DUP1 ISZERO PUSH2 0xFF JUMPI DUP1 PUSH1 0x1F LT PUSH2 0xD4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0xFF JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0xE2 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x116 SWAP1 PUSH2 0x278 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x142 SWAP1 PUSH2 0x278 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x18F JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x164 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x18F JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x172 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x1D1 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x1B6 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1F9 DUP3 PUSH2 0x197 JUMP JUMPDEST PUSH2 0x203 DUP2 DUP6 PUSH2 0x1A2 JUMP JUMPDEST SWAP4 POP PUSH2 0x213 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x1B3 JUMP JUMPDEST PUSH2 0x21C DUP2 PUSH2 0x1DD JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x241 DUP2 DUP5 PUSH2 0x1EE JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 DIV SWAP1 POP PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x290 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x2A3 JUMPI PUSH2 0x2A2 PUSH2 0x249 JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODECOPY STOP RETURNDATACOPY 0xEB PUSH6 0xB4457267D443 LOG4 0x1E 0xFB TIMESTAMP NOT SHL 0x2F DUP12 0x4B DUP4 0xC3 PC 0xC7 0xD9 0x25 0x1F 0xC6 TIMESTAMP 0xC3 0x5E 0xA9 PUSH5 0x736F6C6343 STOP ADDMOD SLT STOP CALLER ", + sourceMap: + "61:160:0:-:0;;;79:39;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;61:160;;;;;;;;;;;;7:99:1;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:180::-;160:77;157:1;150:88;257:4;254:1;247:15;281:4;278:1;271:15;298:180;346:77;343:1;336:88;443:4;440:1;433:15;467:4;464:1;457:15;484:320;528:6;565:1;559:4;555:12;545:22;;612:1;606:4;602:12;633:18;623:81;;689:4;681:6;677:17;667:27;;623:81;751:2;743:6;740:14;720:18;717:38;714:84;;770:18;;:::i;:::-;714:84;535:269;484:320;;;:::o;810:141::-;859:4;882:3;874:11;;905:3;902:1;895:14;939:4;936:1;926:18;918:26;;810:141;;;:::o;957:93::-;994:6;1041:2;1036;1029:5;1025:14;1021:23;1011:33;;957:93;;;:::o;1056:107::-;1100:8;1150:5;1144:4;1140:16;1119:37;;1056:107;;;;:::o;1169:393::-;1238:6;1288:1;1276:10;1272:18;1311:97;1341:66;1330:9;1311:97;:::i;:::-;1429:39;1459:8;1448:9;1429:39;:::i;:::-;1417:51;;1501:4;1497:9;1490:5;1486:21;1477:30;;1550:4;1540:8;1536:19;1529:5;1526:30;1516:40;;1245:317;;1169:393;;;;;:::o;1568:77::-;1605:7;1634:5;1623:16;;1568:77;;;:::o;1651:60::-;1679:3;1700:5;1693:12;;1651:60;;;:::o;1717:142::-;1767:9;1800:53;1818:34;1827:24;1845:5;1827:24;:::i;:::-;1818:34;:::i;:::-;1800:53;:::i;:::-;1787:66;;1717:142;;;:::o;1865:75::-;1908:3;1929:5;1922:12;;1865:75;;;:::o;1946:269::-;2056:39;2087:7;2056:39;:::i;:::-;2117:91;2166:41;2190:16;2166:41;:::i;:::-;2158:6;2151:4;2145:11;2117:91;:::i;:::-;2111:4;2104:105;2022:193;1946:269;;;:::o;2221:73::-;2266:3;2221:73;:::o;2300:189::-;2377:32;;:::i;:::-;2418:65;2476:6;2468;2462:4;2418:65;:::i;:::-;2353:136;2300:189;;:::o;2495:186::-;2555:120;2572:3;2565:5;2562:14;2555:120;;;2626:39;2663:1;2656:5;2626:39;:::i;:::-;2599:1;2592:5;2588:13;2579:22;;2555:120;;;2495:186;;:::o;2687:543::-;2788:2;2783:3;2780:11;2777:446;;;2822:38;2854:5;2822:38;:::i;:::-;2906:29;2924:10;2906:29;:::i;:::-;2896:8;2892:44;3089:2;3077:10;3074:18;3071:49;;;3110:8;3095:23;;3071:49;3133:80;3189:22;3207:3;3189:22;:::i;:::-;3179:8;3175:37;3162:11;3133:80;:::i;:::-;2792:431;;2777:446;2687:543;;;:::o;3236:117::-;3290:8;3340:5;3334:4;3330:16;3309:37;;3236:117;;;;:::o;3359:169::-;3403:6;3436:51;3484:1;3480:6;3472:5;3469:1;3465:13;3436:51;:::i;:::-;3432:56;3517:4;3511;3507:15;3497:25;;3410:118;3359:169;;;;:::o;3533:295::-;3609:4;3755:29;3780:3;3774:4;3755:29;:::i;:::-;3747:37;;3817:3;3814:1;3810:11;3804:4;3801:21;3793:29;;3533:295;;;;:::o;3833:1395::-;3950:37;3983:3;3950:37;:::i;:::-;4052:18;4044:6;4041:30;4038:56;;;4074:18;;:::i;:::-;4038:56;4118:38;4150:4;4144:11;4118:38;:::i;:::-;4203:67;4263:6;4255;4249:4;4203:67;:::i;:::-;4297:1;4321:4;4308:17;;4353:2;4345:6;4342:14;4370:1;4365:618;;;;5027:1;5044:6;5041:77;;;5093:9;5088:3;5084:19;5078:26;5069:35;;5041:77;5144:67;5204:6;5197:5;5144:67;:::i;:::-;5138:4;5131:81;5000:222;4335:887;;4365:618;4417:4;4413:9;4405:6;4401:22;4451:37;4483:4;4451:37;:::i;:::-;4510:1;4524:208;4538:7;4535:1;4532:14;4524:208;;;4617:9;4612:3;4608:19;4602:26;4594:6;4587:42;4668:1;4660:6;4656:14;4646:24;;4715:2;4704:9;4700:18;4687:31;;4561:4;4558:1;4554:12;4549:17;;4524:208;;;4760:6;4751:7;4748:19;4745:179;;;4818:9;4813:3;4809:19;4803:26;4861:48;4903:4;4895:6;4891:17;4880:9;4861:48;:::i;:::-;4853:6;4846:64;4768:156;4745:179;4970:1;4966;4958:6;4954:14;4950:22;4944:4;4937:36;4372:611;;;4335:887;;3925:1303;;;3833:1395;;:::o;61:160:0:-;;;;;;;", + }, + abi: [ + { + inputs: [], + name: "getMessage", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "message", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + ], + selectors: { + getMessage: "0xce6d41de", + }, + topics: {}, +}; + +// Used to be injected as code, so the deployedBytecode is used +export const STATE_OVERRIDE_SET_CONTRACT_C = { + sourceCode: ` + // SPDX-License-Identifier: MIT + pragma solidity ^0.8.18; + + contract C { + function getMessage() public pure returns (string memory) { + return "Hello from the C contract"; + } + } + `, + bytecode: { + linkReferences: {}, + object: + "608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ce6d41de14610030575b600080fd5b61003861004e565b604051610045919061011b565b60405180910390f35b60606040518060400160405280601981526020017f48656c6c6f2066726f6d20746865204320636f6e747261637400000000000000815250905090565b600081519050919050565b600082825260208201905092915050565b60005b838110156100c55780820151818401526020810190506100aa565b60008484015250505050565b6000601f19601f8301169050919050565b60006100ed8261008b565b6100f78185610096565b93506101078185602086016100a7565b610110816100d1565b840191505092915050565b6000602082019050818103600083015261013581846100e2565b90509291505056fea26469706673582212209d88a8cca2171eecc043817f3642e261beb1a1c5613345d89d6d52fcbc75b64064736f6c63430008120033", + opcodes: + "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x2B JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xCE6D41DE EQ PUSH2 0x30 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x38 PUSH2 0x4E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x45 SWAP2 SWAP1 PUSH2 0x11B JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F2066726F6D20746865204320636F6E747261637400000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xC5 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xAA JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0xED DUP3 PUSH2 0x8B JUMP JUMPDEST PUSH2 0xF7 DUP2 DUP6 PUSH2 0x96 JUMP JUMPDEST SWAP4 POP PUSH2 0x107 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0xA7 JUMP JUMPDEST PUSH2 0x110 DUP2 PUSH2 0xD1 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x135 DUP2 DUP5 PUSH2 0xE2 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 DUP9 0xA8 0xCC LOG2 OR 0x1E 0xEC 0xC0 NUMBER DUP2 PUSH32 0x3642E261BEB1A1C5613345D89D6D52FCBC75B64064736F6C6343000812003300 ", + sourceMap: + "61:132:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;79:111;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;122:13;148:34;;;;;;;;;;;;;;;;;;;79:111;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o", + }, + abi: [ + { + inputs: [], + name: "getMessage", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "pure", + type: "function", + }, + ], + selectors: { + getMessage: "0xce6d41de", + }, + topics: {}, +}; + +export const STATE_OVERRIDE_SET_CONTRACT_D = { + sourceCode: ` + // SPDX-License-Identifier: MIT + pragma solidity ^0.8.18; + + contract ChildContract {} + + contract D { + address public childContractAddress; + string public message = "Hello from D!"; + + function deployChildContract() public returns (address) { + ChildContract childContract = new ChildContract(); + childContractAddress = address(childContract); + return childContractAddress; + } + } + `, + bytecode: { + linkReferences: {}, + object: + "60806040526040518060400160405280600d81526020017f48656c6c6f2066726f6d204421000000000000000000000000000000000000008152506001908161004891906102ab565b5034801561005557600080fd5b5061037d565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806100dc57607f821691505b6020821081036100ef576100ee610095565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026101577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261011a565b610161868361011a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006101a86101a361019e84610179565b610183565b610179565b9050919050565b6000819050919050565b6101c28361018d565b6101d66101ce826101af565b848454610127565b825550505050565b600090565b6101eb6101de565b6101f68184846101b9565b505050565b5b8181101561021a5761020f6000826101e3565b6001810190506101fc565b5050565b601f82111561025f57610230816100f5565b6102398461010a565b81016020851015610248578190505b61025c6102548561010a565b8301826101fb565b50505b505050565b600082821c905092915050565b600061028260001984600802610264565b1980831691505092915050565b600061029b8383610271565b9150826002028217905092915050565b6102b48261005b565b67ffffffffffffffff8111156102cd576102cc610066565b5b6102d782546100c4565b6102e282828561021e565b600060209050601f8311600181146103155760008415610303578287015190505b61030d858261028f565b865550610375565b601f198416610323866100f5565b60005b8281101561034b57848901518255600182019150602085019450602081019050610326565b868310156103685784890151610364601f891682610271565b8355505b6001600288020188555050505b505050505050565b6103f38061038c6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063c34c041c14610046578063dbd2cbba14610064578063e21f37ce14610082575b600080fd5b61004e6100a0565b60405161005b9190610234565b60405180910390f35b61006c610135565b6040516100799190610234565b60405180910390f35b61008a610159565b60405161009791906102df565b60405180910390f35b6000806040516100af906101e7565b604051809103906000f0801580156100cb573d6000803e3d6000fd5b509050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6001805461016690610330565b80601f016020809104026020016040519081016040528092919081815260200182805461019290610330565b80156101df5780601f106101b4576101008083540402835291602001916101df565b820191906000526020600020905b8154815290600101906020018083116101c257829003601f168201915b505050505081565b605c8061036283390190565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061021e826101f3565b9050919050565b61022e81610213565b82525050565b60006020820190506102496000830184610225565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561028957808201518184015260208101905061026e565b60008484015250505050565b6000601f19601f8301169050919050565b60006102b18261024f565b6102bb818561025a565b93506102cb81856020860161026b565b6102d481610295565b840191505092915050565b600060208201905081810360008301526102f981846102a6565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061034857607f821691505b60208210810361035b5761035a610301565b5b5091905056fe6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220d4129538b1bf339dcd5d8f4f2ec8d6372253ef966d8a7cc0169c1c4c74712eec64736f6c63430008120033a2646970667358221220a0c89990f9f2d28209db8dd44d208496802780179b1d27add66e4b34d4e2debc64736f6c63430008120033", + opcodes: + "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0xD DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F2066726F6D20442100000000000000000000000000000000000000 DUP2 MSTORE POP PUSH1 0x1 SWAP1 DUP2 PUSH2 0x48 SWAP2 SWAP1 PUSH2 0x2AB JUMP JUMPDEST POP CALLVALUE DUP1 ISZERO PUSH2 0x55 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x37D JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 DIV SWAP1 POP PUSH1 0x1 DUP3 AND DUP1 PUSH2 0xDC JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0xEF JUMPI PUSH2 0xEE PUSH2 0x95 JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP DUP2 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 PUSH1 0x1F DUP4 ADD DIV SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 SHL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x8 DUP4 MUL PUSH2 0x157 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH2 0x11A JUMP JUMPDEST PUSH2 0x161 DUP7 DUP4 PUSH2 0x11A JUMP JUMPDEST SWAP6 POP DUP1 NOT DUP5 AND SWAP4 POP DUP1 DUP7 AND DUP5 OR SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1A8 PUSH2 0x1A3 PUSH2 0x19E DUP5 PUSH2 0x179 JUMP JUMPDEST PUSH2 0x183 JUMP JUMPDEST PUSH2 0x179 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1C2 DUP4 PUSH2 0x18D JUMP JUMPDEST PUSH2 0x1D6 PUSH2 0x1CE DUP3 PUSH2 0x1AF JUMP JUMPDEST DUP5 DUP5 SLOAD PUSH2 0x127 JUMP JUMPDEST DUP3 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH2 0x1EB PUSH2 0x1DE JUMP JUMPDEST PUSH2 0x1F6 DUP2 DUP5 DUP5 PUSH2 0x1B9 JUMP JUMPDEST POP POP POP JUMP JUMPDEST JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x21A JUMPI PUSH2 0x20F PUSH1 0x0 DUP3 PUSH2 0x1E3 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH2 0x1FC JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH2 0x25F JUMPI PUSH2 0x230 DUP2 PUSH2 0xF5 JUMP JUMPDEST PUSH2 0x239 DUP5 PUSH2 0x10A JUMP JUMPDEST DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH2 0x248 JUMPI DUP2 SWAP1 POP JUMPDEST PUSH2 0x25C PUSH2 0x254 DUP6 PUSH2 0x10A JUMP JUMPDEST DUP4 ADD DUP3 PUSH2 0x1FB JUMP JUMPDEST POP POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 SHR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x282 PUSH1 0x0 NOT DUP5 PUSH1 0x8 MUL PUSH2 0x264 JUMP JUMPDEST NOT DUP1 DUP4 AND SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x29B DUP4 DUP4 PUSH2 0x271 JUMP JUMPDEST SWAP2 POP DUP3 PUSH1 0x2 MUL DUP3 OR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x2B4 DUP3 PUSH2 0x5B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x2CD JUMPI PUSH2 0x2CC PUSH2 0x66 JUMP JUMPDEST JUMPDEST PUSH2 0x2D7 DUP3 SLOAD PUSH2 0xC4 JUMP JUMPDEST PUSH2 0x2E2 DUP3 DUP3 DUP6 PUSH2 0x21E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 SWAP1 POP PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH2 0x315 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH2 0x303 JUMPI DUP3 DUP8 ADD MLOAD SWAP1 POP JUMPDEST PUSH2 0x30D DUP6 DUP3 PUSH2 0x28F JUMP JUMPDEST DUP7 SSTORE POP PUSH2 0x375 JUMP JUMPDEST PUSH1 0x1F NOT DUP5 AND PUSH2 0x323 DUP7 PUSH2 0xF5 JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH2 0x34B JUMPI DUP5 DUP10 ADD MLOAD DUP3 SSTORE PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP6 ADD SWAP5 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x326 JUMP JUMPDEST DUP7 DUP4 LT ISZERO PUSH2 0x368 JUMPI DUP5 DUP10 ADD MLOAD PUSH2 0x364 PUSH1 0x1F DUP10 AND DUP3 PUSH2 0x271 JUMP JUMPDEST DUP4 SSTORE POP JUMPDEST PUSH1 0x1 PUSH1 0x2 DUP9 MUL ADD DUP9 SSTORE POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x3F3 DUP1 PUSH2 0x38C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xC34C041C EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xDBD2CBBA EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0xE21F37CE EQ PUSH2 0x82 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0xA0 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x234 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x6C PUSH2 0x135 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x79 SWAP2 SWAP1 PUSH2 0x234 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x8A PUSH2 0x159 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x97 SWAP2 SWAP1 PUSH2 0x2DF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 MLOAD PUSH2 0xAF SWAP1 PUSH2 0x1E7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 PUSH1 0x0 CREATE DUP1 ISZERO DUP1 ISZERO PUSH2 0xCB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP SWAP1 POP DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x1 DUP1 SLOAD PUSH2 0x166 SWAP1 PUSH2 0x330 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x192 SWAP1 PUSH2 0x330 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1DF JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1B4 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1DF JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1C2 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x5C DUP1 PUSH2 0x362 DUP4 CODECOPY ADD SWAP1 JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x21E DUP3 PUSH2 0x1F3 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x22E DUP2 PUSH2 0x213 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x249 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0x225 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x289 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x26E JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2B1 DUP3 PUSH2 0x24F JUMP JUMPDEST PUSH2 0x2BB DUP2 DUP6 PUSH2 0x25A JUMP JUMPDEST SWAP4 POP PUSH2 0x2CB DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x26B JUMP JUMPDEST PUSH2 0x2D4 DUP2 PUSH2 0x295 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x2F9 DUP2 DUP5 PUSH2 0x2A6 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 DIV SWAP1 POP PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x348 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x35B JUMPI PUSH2 0x35A PUSH2 0x301 JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x3F DUP1 PUSH1 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD4 SLT SWAP6 CODESIZE 0xB1 0xBF CALLER SWAP14 0xCD 0x5D DUP16 0x4F 0x2E 0xC8 0xD6 CALLDATACOPY 0x22 MSTORE8 0xEF SWAP7 PUSH14 0x8A7CC0169C1C4C74712EEC64736F PUSH13 0x63430008120033A26469706673 PC 0x22 SLT KECCAK256 LOG0 0xC8 SWAP10 SWAP1 0xF9 CALLCODE 0xD2 DUP3 MULMOD 0xDB DUP14 0xD4 0x4D KECCAK256 DUP5 SWAP7 DUP1 0x27 DUP1 OR SWAP12 SAR 0x27 0xAD 0xD6 PUSH15 0x4B34D4E2DEBC64736F6C6343000812 STOP CALLER ", + sourceMap: + "90:329:0:-:0;;;150:39;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;90:329;;;;;;;;;;;;7:99:1;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:180::-;160:77;157:1;150:88;257:4;254:1;247:15;281:4;278:1;271:15;298:180;346:77;343:1;336:88;443:4;440:1;433:15;467:4;464:1;457:15;484:320;528:6;565:1;559:4;555:12;545:22;;612:1;606:4;602:12;633:18;623:81;;689:4;681:6;677:17;667:27;;623:81;751:2;743:6;740:14;720:18;717:38;714:84;;770:18;;:::i;:::-;714:84;535:269;484:320;;;:::o;810:141::-;859:4;882:3;874:11;;905:3;902:1;895:14;939:4;936:1;926:18;918:26;;810:141;;;:::o;957:93::-;994:6;1041:2;1036;1029:5;1025:14;1021:23;1011:33;;957:93;;;:::o;1056:107::-;1100:8;1150:5;1144:4;1140:16;1119:37;;1056:107;;;;:::o;1169:393::-;1238:6;1288:1;1276:10;1272:18;1311:97;1341:66;1330:9;1311:97;:::i;:::-;1429:39;1459:8;1448:9;1429:39;:::i;:::-;1417:51;;1501:4;1497:9;1490:5;1486:21;1477:30;;1550:4;1540:8;1536:19;1529:5;1526:30;1516:40;;1245:317;;1169:393;;;;;:::o;1568:77::-;1605:7;1634:5;1623:16;;1568:77;;;:::o;1651:60::-;1679:3;1700:5;1693:12;;1651:60;;;:::o;1717:142::-;1767:9;1800:53;1818:34;1827:24;1845:5;1827:24;:::i;:::-;1818:34;:::i;:::-;1800:53;:::i;:::-;1787:66;;1717:142;;;:::o;1865:75::-;1908:3;1929:5;1922:12;;1865:75;;;:::o;1946:269::-;2056:39;2087:7;2056:39;:::i;:::-;2117:91;2166:41;2190:16;2166:41;:::i;:::-;2158:6;2151:4;2145:11;2117:91;:::i;:::-;2111:4;2104:105;2022:193;1946:269;;;:::o;2221:73::-;2266:3;2221:73;:::o;2300:189::-;2377:32;;:::i;:::-;2418:65;2476:6;2468;2462:4;2418:65;:::i;:::-;2353:136;2300:189;;:::o;2495:186::-;2555:120;2572:3;2565:5;2562:14;2555:120;;;2626:39;2663:1;2656:5;2626:39;:::i;:::-;2599:1;2592:5;2588:13;2579:22;;2555:120;;;2495:186;;:::o;2687:543::-;2788:2;2783:3;2780:11;2777:446;;;2822:38;2854:5;2822:38;:::i;:::-;2906:29;2924:10;2906:29;:::i;:::-;2896:8;2892:44;3089:2;3077:10;3074:18;3071:49;;;3110:8;3095:23;;3071:49;3133:80;3189:22;3207:3;3189:22;:::i;:::-;3179:8;3175:37;3162:11;3133:80;:::i;:::-;2792:431;;2777:446;2687:543;;;:::o;3236:117::-;3290:8;3340:5;3334:4;3330:16;3309:37;;3236:117;;;;:::o;3359:169::-;3403:6;3436:51;3484:1;3480:6;3472:5;3469:1;3465:13;3436:51;:::i;:::-;3432:56;3517:4;3511;3507:15;3497:25;;3410:118;3359:169;;;;:::o;3533:295::-;3609:4;3755:29;3780:3;3774:4;3755:29;:::i;:::-;3747:37;;3817:3;3814:1;3810:11;3804:4;3801:21;3793:29;;3533:295;;;;:::o;3833:1395::-;3950:37;3983:3;3950:37;:::i;:::-;4052:18;4044:6;4041:30;4038:56;;;4074:18;;:::i;:::-;4038:56;4118:38;4150:4;4144:11;4118:38;:::i;:::-;4203:67;4263:6;4255;4249:4;4203:67;:::i;:::-;4297:1;4321:4;4308:17;;4353:2;4345:6;4342:14;4370:1;4365:618;;;;5027:1;5044:6;5041:77;;;5093:9;5088:3;5084:19;5078:26;5069:35;;5041:77;5144:67;5204:6;5197:5;5144:67;:::i;:::-;5138:4;5131:81;5000:222;4335:887;;4365:618;4417:4;4413:9;4405:6;4401:22;4451:37;4483:4;4451:37;:::i;:::-;4510:1;4524:208;4538:7;4535:1;4532:14;4524:208;;;4617:9;4612:3;4608:19;4602:26;4594:6;4587:42;4668:1;4660:6;4656:14;4646:24;;4715:2;4704:9;4700:18;4687:31;;4561:4;4558:1;4554:12;4549:17;;4524:208;;;4760:6;4751:7;4748:19;4745:179;;;4818:9;4813:3;4809:19;4803:26;4861:48;4903:4;4895:6;4891:17;4880:9;4861:48;:::i;:::-;4853:6;4846:64;4768:156;4745:179;4970:1;4966;4958:6;4954:14;4950:22;4944:4;4937:36;4372:611;;;4335:887;;3925:1303;;;3833:1395;;:::o;90:329:0:-;;;;;;;", + }, + abi: [ + { + inputs: [], + name: "childContractAddress", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "deployChildContract", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [], + name: "message", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + ], + selectors: { + childContractAddress: "0xdbd2cbba", + deployChildContract: "0xc34c041c", + }, + topics: {}, +}; + +export const DEBUG_TRACE_CALL_CONTRACT_A = { + sourceCode: ` + // SPDX-License-Identifier: MIT + pragma solidity ^0.8.18; + + contract A { + string public message = "Hello from contract!"; + + function getMessage() public view returns (string memory) { + return message; + } + + function requireGreaterThanFive(uint256 number) external pure { + require(number >= 5, "Number must be greater than or equal to 5"); + } + } + `, + bytecode: { + linkReferences: {}, + object: + "60806040526040518060400160405280601481526020017f48656c6c6f2066726f6d20636f6e747261637421000000000000000000000000815250600090816200004a9190620002d9565b503480156200005857600080fd5b50620003c0565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620000e157607f821691505b602082108103620000f757620000f662000099565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620001617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000122565b6200016d868362000122565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620001ba620001b4620001ae8462000185565b6200018f565b62000185565b9050919050565b6000819050919050565b620001d68362000199565b620001ee620001e582620001c1565b8484546200012f565b825550505050565b600090565b62000205620001f6565b62000212818484620001cb565b505050565b5b818110156200023a576200022e600082620001fb565b60018101905062000218565b5050565b601f82111562000289576200025381620000fd565b6200025e8462000112565b810160208510156200026e578190505b620002866200027d8562000112565b83018262000217565b50505b505050565b600082821c905092915050565b6000620002ae600019846008026200028e565b1980831691505092915050565b6000620002c983836200029b565b9150826002028217905092915050565b620002e4826200005f565b67ffffffffffffffff8111156200030057620002ff6200006a565b5b6200030c8254620000c8565b620003198282856200023e565b600060209050601f8311600181146200035157600084156200033c578287015190505b620003488582620002bb565b865550620003b8565b601f1984166200036186620000fd565b60005b828110156200038b5784890151825560018201915060208501945060208101905062000364565b86831015620003ab5784890151620003a7601f8916826200029b565b8355505b6001600288020188555050505b505050505050565b61044780620003d06000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063922af8a714610046578063ce6d41de14610062578063e21f37ce14610080575b600080fd5b610060600480360381019061005b9190610240565b61009e565b005b61006a6100e5565b60405161007791906102fd565b60405180910390f35b610088610177565b60405161009591906102fd565b60405180910390f35b60058110156100e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100d990610391565b60405180910390fd5b50565b6060600080546100f4906103e0565b80601f0160208091040260200160405190810160405280929190818152602001828054610120906103e0565b801561016d5780601f106101425761010080835404028352916020019161016d565b820191906000526020600020905b81548152906001019060200180831161015057829003601f168201915b5050505050905090565b60008054610184906103e0565b80601f01602080910402602001604051908101604052809291908181526020018280546101b0906103e0565b80156101fd5780601f106101d2576101008083540402835291602001916101fd565b820191906000526020600020905b8154815290600101906020018083116101e057829003601f168201915b505050505081565b600080fd5b6000819050919050565b61021d8161020a565b811461022857600080fd5b50565b60008135905061023a81610214565b92915050565b60006020828403121561025657610255610205565b5b60006102648482850161022b565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156102a757808201518184015260208101905061028c565b60008484015250505050565b6000601f19601f8301169050919050565b60006102cf8261026d565b6102d98185610278565b93506102e9818560208601610289565b6102f2816102b3565b840191505092915050565b6000602082019050818103600083015261031781846102c4565b905092915050565b7f4e756d626572206d7573742062652067726561746572207468616e206f72206560008201527f7175616c20746f20350000000000000000000000000000000000000000000000602082015250565b600061037b602983610278565b91506103868261031f565b604082019050919050565b600060208201905081810360008301526103aa8161036e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806103f857607f821691505b60208210810361040b5761040a6103b1565b5b5091905056fea264697066735822122020ca109dafe8d18c33567a0178897e773d2e68d523f0a39ee5b9080615a8774964736f6c63430008120033", + opcodes: + "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x14 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F2066726F6D20636F6E747261637421000000000000000000000000 DUP2 MSTORE POP PUSH1 0x0 SWAP1 DUP2 PUSH3 0x4A SWAP2 SWAP1 PUSH3 0x2D9 JUMP JUMPDEST POP CALLVALUE DUP1 ISZERO PUSH3 0x58 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH3 0x3C0 JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 DIV SWAP1 POP PUSH1 0x1 DUP3 AND DUP1 PUSH3 0xE1 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH3 0xF7 JUMPI PUSH3 0xF6 PUSH3 0x99 JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP DUP2 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 PUSH1 0x1F DUP4 ADD DIV SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 SHL SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x8 DUP4 MUL PUSH3 0x161 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH3 0x122 JUMP JUMPDEST PUSH3 0x16D DUP7 DUP4 PUSH3 0x122 JUMP JUMPDEST SWAP6 POP DUP1 NOT DUP5 AND SWAP4 POP DUP1 DUP7 AND DUP5 OR SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1BA PUSH3 0x1B4 PUSH3 0x1AE DUP5 PUSH3 0x185 JUMP JUMPDEST PUSH3 0x18F JUMP JUMPDEST PUSH3 0x185 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH3 0x1D6 DUP4 PUSH3 0x199 JUMP JUMPDEST PUSH3 0x1EE PUSH3 0x1E5 DUP3 PUSH3 0x1C1 JUMP JUMPDEST DUP5 DUP5 SLOAD PUSH3 0x12F JUMP JUMPDEST DUP3 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 SWAP1 JUMP JUMPDEST PUSH3 0x205 PUSH3 0x1F6 JUMP JUMPDEST PUSH3 0x212 DUP2 DUP5 DUP5 PUSH3 0x1CB JUMP JUMPDEST POP POP POP JUMP JUMPDEST JUMPDEST DUP2 DUP2 LT ISZERO PUSH3 0x23A JUMPI PUSH3 0x22E PUSH1 0x0 DUP3 PUSH3 0x1FB JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP1 POP PUSH3 0x218 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1F DUP3 GT ISZERO PUSH3 0x289 JUMPI PUSH3 0x253 DUP2 PUSH3 0xFD JUMP JUMPDEST PUSH3 0x25E DUP5 PUSH3 0x112 JUMP JUMPDEST DUP2 ADD PUSH1 0x20 DUP6 LT ISZERO PUSH3 0x26E JUMPI DUP2 SWAP1 POP JUMPDEST PUSH3 0x286 PUSH3 0x27D DUP6 PUSH3 0x112 JUMP JUMPDEST DUP4 ADD DUP3 PUSH3 0x217 JUMP JUMPDEST POP POP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 SHR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x2AE PUSH1 0x0 NOT DUP5 PUSH1 0x8 MUL PUSH3 0x28E JUMP JUMPDEST NOT DUP1 DUP4 AND SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x2C9 DUP4 DUP4 PUSH3 0x29B JUMP JUMPDEST SWAP2 POP DUP3 PUSH1 0x2 MUL DUP3 OR SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH3 0x2E4 DUP3 PUSH3 0x5F JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH3 0x300 JUMPI PUSH3 0x2FF PUSH3 0x6A JUMP JUMPDEST JUMPDEST PUSH3 0x30C DUP3 SLOAD PUSH3 0xC8 JUMP JUMPDEST PUSH3 0x319 DUP3 DUP3 DUP6 PUSH3 0x23E JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 SWAP1 POP PUSH1 0x1F DUP4 GT PUSH1 0x1 DUP2 EQ PUSH3 0x351 JUMPI PUSH1 0x0 DUP5 ISZERO PUSH3 0x33C JUMPI DUP3 DUP8 ADD MLOAD SWAP1 POP JUMPDEST PUSH3 0x348 DUP6 DUP3 PUSH3 0x2BB JUMP JUMPDEST DUP7 SSTORE POP PUSH3 0x3B8 JUMP JUMPDEST PUSH1 0x1F NOT DUP5 AND PUSH3 0x361 DUP7 PUSH3 0xFD JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP3 DUP2 LT ISZERO PUSH3 0x38B JUMPI DUP5 DUP10 ADD MLOAD DUP3 SSTORE PUSH1 0x1 DUP3 ADD SWAP2 POP PUSH1 0x20 DUP6 ADD SWAP5 POP PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH3 0x364 JUMP JUMPDEST DUP7 DUP4 LT ISZERO PUSH3 0x3AB JUMPI DUP5 DUP10 ADD MLOAD PUSH3 0x3A7 PUSH1 0x1F DUP10 AND DUP3 PUSH3 0x29B JUMP JUMPDEST DUP4 SSTORE POP JUMPDEST PUSH1 0x1 PUSH1 0x2 DUP9 MUL ADD DUP9 SSTORE POP POP POP JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH2 0x447 DUP1 PUSH3 0x3D0 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x922AF8A7 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xCE6D41DE EQ PUSH2 0x62 JUMPI DUP1 PUSH4 0xE21F37CE EQ PUSH2 0x80 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x60 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x240 JUMP JUMPDEST PUSH2 0x9E JUMP JUMPDEST STOP JUMPDEST PUSH2 0x6A PUSH2 0xE5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x77 SWAP2 SWAP1 PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x88 PUSH2 0x177 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0x2FD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x5 DUP2 LT ISZERO PUSH2 0xE2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD PUSH2 0xD9 SWAP1 PUSH2 0x391 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x0 DUP1 SLOAD PUSH2 0xF4 SWAP1 PUSH2 0x3E0 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x120 SWAP1 PUSH2 0x3E0 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x16D JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x142 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x16D JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x150 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH2 0x184 SWAP1 PUSH2 0x3E0 JUMP JUMPDEST DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD PUSH2 0x1B0 SWAP1 PUSH2 0x3E0 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1FD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1D2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1FD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1E0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x21D DUP2 PUSH2 0x20A JUMP JUMPDEST DUP2 EQ PUSH2 0x228 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x23A DUP2 PUSH2 0x214 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x256 JUMPI PUSH2 0x255 PUSH2 0x205 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x264 DUP5 DUP3 DUP6 ADD PUSH2 0x22B JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x2A7 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x28C JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 ADD MSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1F NOT PUSH1 0x1F DUP4 ADD AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x2CF DUP3 PUSH2 0x26D JUMP JUMPDEST PUSH2 0x2D9 DUP2 DUP6 PUSH2 0x278 JUMP JUMPDEST SWAP4 POP PUSH2 0x2E9 DUP2 DUP6 PUSH1 0x20 DUP7 ADD PUSH2 0x289 JUMP JUMPDEST PUSH2 0x2F2 DUP2 PUSH2 0x2B3 JUMP JUMPDEST DUP5 ADD SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x317 DUP2 DUP5 PUSH2 0x2C4 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E756D626572206D7573742062652067726561746572207468616E206F722065 PUSH1 0x0 DUP3 ADD MSTORE PUSH32 0x7175616C20746F20350000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x37B PUSH1 0x29 DUP4 PUSH2 0x278 JUMP JUMPDEST SWAP2 POP PUSH2 0x386 DUP3 PUSH2 0x31F JUMP JUMPDEST PUSH1 0x40 DUP3 ADD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP DUP2 DUP2 SUB PUSH1 0x0 DUP4 ADD MSTORE PUSH2 0x3AA DUP2 PUSH2 0x36E JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x2 DUP3 DIV SWAP1 POP PUSH1 0x1 DUP3 AND DUP1 PUSH2 0x3F8 JUMPI PUSH1 0x7F DUP3 AND SWAP2 POP JUMPDEST PUSH1 0x20 DUP3 LT DUP2 SUB PUSH2 0x40B JUMPI PUSH2 0x40A PUSH2 0x3B1 JUMP JUMPDEST JUMPDEST POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 KECCAK256 0xCA LT SWAP14 0xAF 0xE8 0xD1 DUP13 CALLER JUMP PUSH27 0x178897E773D2E68D523F0A39EE5B9080615A8774964736F6C6343 STOP ADDMOD SLT STOP CALLER ", + sourceMap: + "61:321:0:-:0;;;79:46;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;61:321;;;;;;;;;;;;7:99:1;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:180::-;160:77;157:1;150:88;257:4;254:1;247:15;281:4;278:1;271:15;298:180;346:77;343:1;336:88;443:4;440:1;433:15;467:4;464:1;457:15;484:320;528:6;565:1;559:4;555:12;545:22;;612:1;606:4;602:12;633:18;623:81;;689:4;681:6;677:17;667:27;;623:81;751:2;743:6;740:14;720:18;717:38;714:84;;770:18;;:::i;:::-;714:84;535:269;484:320;;;:::o;810:141::-;859:4;882:3;874:11;;905:3;902:1;895:14;939:4;936:1;926:18;918:26;;810:141;;;:::o;957:93::-;994:6;1041:2;1036;1029:5;1025:14;1021:23;1011:33;;957:93;;;:::o;1056:107::-;1100:8;1150:5;1144:4;1140:16;1119:37;;1056:107;;;;:::o;1169:393::-;1238:6;1288:1;1276:10;1272:18;1311:97;1341:66;1330:9;1311:97;:::i;:::-;1429:39;1459:8;1448:9;1429:39;:::i;:::-;1417:51;;1501:4;1497:9;1490:5;1486:21;1477:30;;1550:4;1540:8;1536:19;1529:5;1526:30;1516:40;;1245:317;;1169:393;;;;;:::o;1568:77::-;1605:7;1634:5;1623:16;;1568:77;;;:::o;1651:60::-;1679:3;1700:5;1693:12;;1651:60;;;:::o;1717:142::-;1767:9;1800:53;1818:34;1827:24;1845:5;1827:24;:::i;:::-;1818:34;:::i;:::-;1800:53;:::i;:::-;1787:66;;1717:142;;;:::o;1865:75::-;1908:3;1929:5;1922:12;;1865:75;;;:::o;1946:269::-;2056:39;2087:7;2056:39;:::i;:::-;2117:91;2166:41;2190:16;2166:41;:::i;:::-;2158:6;2151:4;2145:11;2117:91;:::i;:::-;2111:4;2104:105;2022:193;1946:269;;;:::o;2221:73::-;2266:3;2221:73;:::o;2300:189::-;2377:32;;:::i;:::-;2418:65;2476:6;2468;2462:4;2418:65;:::i;:::-;2353:136;2300:189;;:::o;2495:186::-;2555:120;2572:3;2565:5;2562:14;2555:120;;;2626:39;2663:1;2656:5;2626:39;:::i;:::-;2599:1;2592:5;2588:13;2579:22;;2555:120;;;2495:186;;:::o;2687:543::-;2788:2;2783:3;2780:11;2777:446;;;2822:38;2854:5;2822:38;:::i;:::-;2906:29;2924:10;2906:29;:::i;:::-;2896:8;2892:44;3089:2;3077:10;3074:18;3071:49;;;3110:8;3095:23;;3071:49;3133:80;3189:22;3207:3;3189:22;:::i;:::-;3179:8;3175:37;3162:11;3133:80;:::i;:::-;2792:431;;2777:446;2687:543;;;:::o;3236:117::-;3290:8;3340:5;3334:4;3330:16;3309:37;;3236:117;;;;:::o;3359:169::-;3403:6;3436:51;3484:1;3480:6;3472:5;3469:1;3465:13;3436:51;:::i;:::-;3432:56;3517:4;3511;3507:15;3497:25;;3410:118;3359:169;;;;:::o;3533:295::-;3609:4;3755:29;3780:3;3774:4;3755:29;:::i;:::-;3747:37;;3817:3;3814:1;3810:11;3804:4;3801:21;3793:29;;3533:295;;;;:::o;3833:1395::-;3950:37;3983:3;3950:37;:::i;:::-;4052:18;4044:6;4041:30;4038:56;;;4074:18;;:::i;:::-;4038:56;4118:38;4150:4;4144:11;4118:38;:::i;:::-;4203:67;4263:6;4255;4249:4;4203:67;:::i;:::-;4297:1;4321:4;4308:17;;4353:2;4345:6;4342:14;4370:1;4365:618;;;;5027:1;5044:6;5041:77;;;5093:9;5088:3;5084:19;5078:26;5069:35;;5041:77;5144:67;5204:6;5197:5;5144:67;:::i;:::-;5138:4;5131:81;5000:222;4335:887;;4365:618;4417:4;4413:9;4405:6;4401:22;4451:37;4483:4;4451:37;:::i;:::-;4510:1;4524:208;4538:7;4535:1;4532:14;4524:208;;;4617:9;4612:3;4608:19;4602:26;4594:6;4587:42;4668:1;4660:6;4656:14;4646:24;;4715:2;4704:9;4700:18;4687:31;;4561:4;4558:1;4554:12;4549:17;;4524:208;;;4760:6;4751:7;4748:19;4745:179;;;4818:9;4813:3;4809:19;4803:26;4861:48;4903:4;4895:6;4891:17;4880:9;4861:48;:::i;:::-;4853:6;4846:64;4768:156;4745:179;4970:1;4966;4958:6;4954:14;4950:22;4944:4;4937:36;4372:611;;;4335:887;;3925:1303;;;3833:1395;;:::o;61:321:0:-;;;;;;;", + }, + abi: [ + { + inputs: [], + name: "getMessage", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "message", + outputs: [ + { + internalType: "string", + name: "", + type: "string", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "number", + type: "uint256", + }, + ], + name: "requireGreaterThanFive", + outputs: [], + stateMutability: "pure", + type: "function", + }, + ], + selectors: { + getMessage: "0xce6d41de", + requireGreaterThanFive: "0x922af8a7", + }, + topics: {}, +}; diff --git a/packages/hardhat-core/test/internal/hardhat-network/helpers/providers.ts b/packages/hardhat-core/test/internal/hardhat-network/helpers/providers.ts index 3719c67d6d..cb37eb70e3 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/helpers/providers.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/helpers/providers.ts @@ -126,11 +126,11 @@ export const FORKED_PROVIDERS: Array<{ useProvider: (options?: UseProviderOptions) => void; }> = []; -if (INFURA_URL !== undefined) { - const url = INFURA_URL; +if (ALCHEMY_URL !== undefined) { + const url = ALCHEMY_URL; PROVIDERS.push({ - name: "Infura Forked", + name: "Alchemy Forked", isFork: true, isJsonRpc: false, networkId: DEFAULT_NETWORK_ID, @@ -146,7 +146,7 @@ if (INFURA_URL !== undefined) { }); INTERVAL_MINING_PROVIDERS.push({ - name: "Infura Forked", + name: "Alchemy Forked", isFork: true, isJsonRpc: false, useProvider: (options: UseProviderOptions = {}) => { @@ -165,7 +165,7 @@ if (INFURA_URL !== undefined) { }); FORKED_PROVIDERS.push({ - rpcProvider: "Infura", + rpcProvider: "Alchemy", jsonRpcUrl: url, useProvider: (options: UseProviderOptions = {}) => { useProvider({ @@ -178,11 +178,11 @@ if (INFURA_URL !== undefined) { }); } -if (ALCHEMY_URL !== undefined) { - const url = ALCHEMY_URL; +if (INFURA_URL !== undefined) { + const url = INFURA_URL; FORKED_PROVIDERS.push({ - rpcProvider: "Alchemy", + rpcProvider: "Infura", jsonRpcUrl: url, useProvider: (options: UseProviderOptions = {}) => { useProvider({ diff --git a/packages/hardhat-core/test/internal/hardhat-network/helpers/useProvider.ts b/packages/hardhat-core/test/internal/hardhat-network/helpers/useProvider.ts index eb1d36efaa..cb42a2cc6b 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/helpers/useProvider.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/helpers/useProvider.ts @@ -96,6 +96,7 @@ export function useProvider({ forkConfig, coinbase, allowBlocksWithSameTimestamp, + enableTransientStorage: false, }, this.logger ); diff --git a/packages/hardhat-core/test/internal/hardhat-network/jsonrpc/client.ts b/packages/hardhat-core/test/internal/hardhat-network/jsonrpc/client.ts index 6e997ad79c..7d0a06ef88 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/jsonrpc/client.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/jsonrpc/client.ts @@ -346,10 +346,6 @@ describe("JsonRpcClient", () => { }); it("returns null for non-existent block", async function () { - if (rpcProvider === "Alchemy") { - // skipped because of https://github.com/NomicFoundation/hardhat/issues/3712 - this.skip(); - } const block = await client.getBlockByNumber( forkNumber + 1000n, true diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/baseFeePerGas.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/baseFeePerGas.ts index 7e013b3ad5..2c5bd0a8ad 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/baseFeePerGas.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/baseFeePerGas.ts @@ -10,7 +10,7 @@ import { } from "../../../../src/internal/core/jsonrpc/types/base-types"; import { EthereumProvider } from "../../../../src/types"; import { makeForkClient } from "../../../../src/internal/hardhat-network/provider/utils/makeForkClient"; -import { INFURA_URL } from "../../../setup"; +import { ALCHEMY_URL } from "../../../setup"; import { rpcToBlockData } from "../../../../src/internal/hardhat-network/provider/fork/rpcToBlockData"; async function getLatestBaseFeePerGas(provider: EthereumProvider) { @@ -102,14 +102,14 @@ describe("Block's baseFeePerGas", function () { useProvider(); it("Should use the same base fee as the one remote networks's forked block", async function () { - if (INFURA_URL === undefined) { + if (ALCHEMY_URL === undefined) { this.skip(); return; } const blockNumber = await this.provider.send("eth_blockNumber"); const { forkClient } = await makeForkClient({ - jsonRpcUrl: INFURA_URL!, + jsonRpcUrl: ALCHEMY_URL!, }); const remoteLatestBlockBaseFeePerGas = diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/fork/ForkBlockchain.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/fork/ForkBlockchain.ts index 9c6927946c..5e29c138c1 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/fork/ForkBlockchain.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/fork/ForkBlockchain.ts @@ -10,8 +10,11 @@ import { assert } from "chai"; import { JsonRpcClient } from "../../../../../src/internal/hardhat-network/jsonrpc/client"; import { ForkBlockchain } from "../../../../../src/internal/hardhat-network/provider/fork/ForkBlockchain"; import { randomHashBuffer } from "../../../../../src/internal/hardhat-network/provider/utils/random"; -import { makeForkClient } from "../../../../../src/internal/hardhat-network/provider/utils/makeForkClient"; -import { INFURA_URL } from "../../../../setup"; +import { + makeForkClient, + getLastSafeBlock, +} from "../../../../../src/internal/hardhat-network/provider/utils/makeForkClient"; +import { ALCHEMY_URL } from "../../../../setup"; import { createTestLog, createTestReceipt, @@ -45,14 +48,14 @@ describe("ForkBlockchain", () => { } before(async function () { - if (INFURA_URL === undefined) { + if (ALCHEMY_URL === undefined) { this.skip(); return; } }); beforeEach(async () => { - const clientResult = await makeForkClient({ jsonRpcUrl: INFURA_URL! }); + const clientResult = await makeForkClient({ jsonRpcUrl: ALCHEMY_URL! }); client = clientResult.forkClient; forkBlockNumber = clientResult.forkBlockNumber; @@ -66,6 +69,17 @@ describe("ForkBlockchain", () => { assert.instanceOf(fb, ForkBlockchain); }); + describe("getLastSafeBlock", () => { + it("should return a safe block that is the difference between the latestBlock and maxReorg", () => { + assert.strictEqual(getLastSafeBlock(100n, 50n), 50n); + assert.strictEqual(getLastSafeBlock(100n, 100n), 0n); // 0 is a valid fork block number + }); + + it("should return latestBlock as fork block because the difference between the latestBlock and maxReorg is < 0", () => { + assert.strictEqual(getLastSafeBlock(20n, 200n), 20n); + }); + }); + describe("getBlock", () => { it("can get remote block object by block number", async () => { const block = await fb.getBlock(BLOCK_NUMBER_OF_10496585); diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/fork/ForkStateManager.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/fork/ForkStateManager.ts index f133a082db..c5b4688013 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/fork/ForkStateManager.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/fork/ForkStateManager.ts @@ -17,7 +17,7 @@ import { } from "../../../../../src/internal/hardhat-network/provider/utils/random"; import { makeForkClient } from "../../../../../src/internal/hardhat-network/provider/utils/makeForkClient"; import { keccak256 } from "../../../../../src/internal/util/keccak"; -import { INFURA_URL } from "../../../../setup"; +import { ALCHEMY_URL } from "../../../../setup"; import { DAI_ADDRESS, DAI_TOTAL_SUPPLY_STORAGE_POSITION, @@ -32,14 +32,14 @@ describe("ForkStateManager", () => { let fsm: ForkStateManager; before(async function () { - if (INFURA_URL === undefined) { + if (ALCHEMY_URL === undefined) { this.skip(); return; } }); beforeEach(async () => { - const clientResult = await makeForkClient({ jsonRpcUrl: INFURA_URL! }); + const clientResult = await makeForkClient({ jsonRpcUrl: ALCHEMY_URL! }); client = clientResult.forkClient; forkBlockNumber = clientResult.forkBlockNumber; diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/forked-provider.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/forked-provider.ts index 9606e5e8b7..fcdbe19bc7 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/forked-provider.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/forked-provider.ts @@ -9,7 +9,7 @@ import { } from "../../../../src/internal/core/jsonrpc/types/base-types"; import { InvalidInputError } from "../../../../src/internal/core/providers/errors"; import { LegacyRpcTransactionOutput } from "../../../../src/internal/hardhat-network/provider/output"; -import { INFURA_URL } from "../../../setup"; +import { ALCHEMY_URL } from "../../../setup"; import { workaroundWindowsCiFailures } from "../../../utils/workaround-windows-ci-failures"; import { assertQuantity, @@ -485,14 +485,14 @@ describe("Forked provider", function () { describe("blocks timestamps", () => { it("should use a timestamp relative to the forked block timestamp", async function () { - if (INFURA_URL === undefined) { + if (ALCHEMY_URL === undefined) { this.skip(); } await this.provider.send("hardhat_reset", [ { forking: { - jsonRpcUrl: INFURA_URL, + jsonRpcUrl: ALCHEMY_URL, blockNumber: 11565019, // first block of 2021 }, }, diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/hardhat-network-options.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/hardhat-network-options.ts index f1cf6b534c..2d25a991cc 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/hardhat-network-options.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/hardhat-network-options.ts @@ -10,7 +10,7 @@ import { HardhatNetworkConfig } from "../../../../src/types"; import { useEnvironment } from "../../../helpers/environment"; import { expectErrorAsync } from "../../../helpers/errors"; import { useFixtureProject } from "../../../helpers/project"; -import { INFURA_URL } from "../../../setup"; +import { ALCHEMY_URL } from "../../../setup"; describe("Hardhat Network special options", function () { describe("allowUnlimitedContractSize", function () { @@ -111,7 +111,7 @@ describe("Hardhat Network special options", function () { }); describe("When forking", function () { - if (INFURA_URL === undefined) { + if (ALCHEMY_URL === undefined) { return; } diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/interval-mining-provider.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/interval-mining-provider.ts index 200efbbfed..755132b951 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/interval-mining-provider.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/interval-mining-provider.ts @@ -2,7 +2,7 @@ import { assert } from "chai"; import sinon from "sinon"; import { rpcQuantityToNumber } from "../../../../src/internal/core/jsonrpc/types/base-types"; -import { INFURA_URL } from "../../../setup"; +import { ALCHEMY_URL } from "../../../setup"; import { workaroundWindowsCiFailures } from "../../../utils/workaround-windows-ci-failures"; import { setCWD } from "../helpers/cwd"; import { INTERVAL_MINING_PROVIDERS } from "../helpers/providers"; @@ -69,7 +69,7 @@ describe("Interval mining provider", function () { await this.provider.send("hardhat_reset", [ { forking: { - jsonRpcUrl: INFURA_URL, + jsonRpcUrl: ALCHEMY_URL, blockNumber: safeBlockInThePast, }, }, diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/debug/traceCall.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/debug/traceCall.ts new file mode 100644 index 0000000000..c9662960c6 --- /dev/null +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/debug/traceCall.ts @@ -0,0 +1,142 @@ +import _ from "lodash"; + +import { ethers } from "ethers"; +import { trace as contractAGetMessageTrace } from "../../../../../fixture-debug-traces/traceCall/contractAGetMessage"; +import { trace as contractAGetMessageTraceDebugConfig } from "../../../../../fixture-debug-traces/traceCall/contractAGetMessageDebugConfig"; +import { trace as ethTransferTrace } from "../../../../../fixture-debug-traces/traceCall/ethTransfer"; +import { trace as contractAThrowError } from "../../../../../fixture-debug-traces/traceCall/contractAThrowError"; +import { assertInvalidArgumentsError } from "../../../helpers/assertions"; +import { + DEBUG_TRACE_CALL_CONTRACT_A, + STATE_OVERRIDE_SET_CONTRACT_B, +} from "../../../helpers/contracts"; +import { setCWD } from "../../../helpers/cwd"; +import { + DEFAULT_ACCOUNTS_ADDRESSES, + PROVIDERS, +} from "../../../helpers/providers"; +import { deployContract } from "../../../helpers/transactions"; +import { assertEqualTraces } from "../../utils/assertEqualTraces"; +import { numberToRpcQuantity } from "../../../../../../src/internal/core/jsonrpc/types/base-types"; + +// Set the base quantity to the value used in GETH to generate the traces +const BASE_GAS_QUANTITY = numberToRpcQuantity(50000000); + +describe("Debug module", function () { + PROVIDERS.forEach(({ name, useProvider }) => { + describe(`${name} provider`, function () { + setCWD(); + useProvider(); + + describe("debug_traceCall", function () { + const deployerAddress = DEFAULT_ACCOUNTS_ADDRESSES[2]; + let contractAAddress: string; + + beforeEach(async function () { + contractAAddress = await deployContract( + this.provider, + `0x${DEBUG_TRACE_CALL_CONTRACT_A.bytecode.object}` + ); + }); + + it("should get the correct trace when calling a function from contract A", async function () { + const trace = await this.provider.send("debug_traceCall", [ + { + from: deployerAddress, + to: contractAAddress, + data: DEBUG_TRACE_CALL_CONTRACT_A.selectors.getMessage, + gas: BASE_GAS_QUANTITY, + }, + "latest", + ]); + + assertEqualTraces(trace, contractAGetMessageTrace); + }); + + it("should get the correct trace when calling a function from contract A and the blockTag is not defined (default value = latest)", async function () { + const trace = await this.provider.send("debug_traceCall", [ + { + from: deployerAddress, + to: contractAAddress, + data: DEBUG_TRACE_CALL_CONTRACT_A.selectors.getMessage, + gas: BASE_GAS_QUANTITY, + }, + // blockTag not defined, it should automatically default to "latest" + ]); + + assertEqualTraces(trace, contractAGetMessageTrace); + }); + + it("should get the correct trace when calling a function from contract A with a specific rpcDebugTracingConfig", async function () { + const trace = await this.provider.send("debug_traceCall", [ + { + from: deployerAddress, + to: contractAAddress, + data: DEBUG_TRACE_CALL_CONTRACT_A.selectors.getMessage, + gas: BASE_GAS_QUANTITY, + }, + "latest", + // Set a specific rpcDebugTracingConfig configuration + { + disableStorage: true, + disableMemory: true, + disableStack: true, + }, + ]); + + assertEqualTraces(trace, contractAGetMessageTraceDebugConfig); + }); + + it("should get the correct error trace when calling a function from contract A that throws an error", async function () { + const abiCoder = new ethers.AbiCoder(); + // The number should be >= 5. If not, an error will be thrown + const encodedParameter = abiCoder.encode(["uint256"], [1]).slice(2); + + const trace = await this.provider.send("debug_traceCall", [ + { + from: deployerAddress, + to: contractAAddress, + data: `${DEBUG_TRACE_CALL_CONTRACT_A.selectors.requireGreaterThanFive}${encodedParameter}`, + gas: BASE_GAS_QUANTITY, + }, + "latest", + ]); + + assertEqualTraces(trace, contractAThrowError); + }); + + it("should get the correct trace when performing an ETH transfer between addresses", async function () { + const trace = await this.provider.send("debug_traceCall", [ + { + from: deployerAddress, + to: DEFAULT_ACCOUNTS_ADDRESSES[1], + value: "0x12", + }, + "latest", + ]); + + assertEqualTraces(trace, ethTransferTrace); + }); + + it("Should throw an error when the value passed as tracer is not supported (3rd parameter)", async function () { + await assertInvalidArgumentsError( + this.provider, + "debug_traceCall", + [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_B.selectors.getMessage, + }, + "latest", + { + tracer: "unsupportedTracer", + }, + ], + "Hardhat currently only supports the default tracer, so no tracer parameter should be passed." + ); + }); + }); + }); + }); +}); diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/debug.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/debug/traceTransaction.ts similarity index 73% rename from packages/hardhat-core/test/internal/hardhat-network/provider/modules/debug.ts rename to packages/hardhat-core/test/internal/hardhat-network/provider/modules/debug/traceTransaction.ts index e422038e64..3b2484883a 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/debug.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/debug/traceTransaction.ts @@ -1,23 +1,27 @@ import { assert } from "chai"; import _ from "lodash"; -import { defaultHardhatNetworkParams } from "../../../../../src/internal/core/config/default-config"; -import { BackwardsCompatibilityProviderAdapter } from "../../../../../src/internal/core/providers/backwards-compatibility"; -import { ModulesLogger } from "../../../../../src/internal/hardhat-network/provider/modules/logger"; -import { ForkConfig } from "../../../../../src/internal/hardhat-network/provider/node-types"; -import { RpcDebugTraceOutput } from "../../../../../src/internal/hardhat-network/provider/output"; -import { HardhatNetworkProvider } from "../../../../../src/internal/hardhat-network/provider/provider"; -import { EthereumProvider } from "../../../../../src/types"; -import { trace as mainnetPostLondonTxTrace } from "../../../../fixture-debug-traces/mainnetPostLondonTxTrace"; -import { trace as mainnetReturnsDataTrace } from "../../../../fixture-debug-traces/mainnetReturnsDataTrace"; -import { trace as mainnetReturnsDataTraceGeth } from "../../../../fixture-debug-traces/mainnetReturnsDataTraceGeth"; -import { trace as mainnetRevertTrace } from "../../../../fixture-debug-traces/mainnetRevertTrace"; -import { trace as modifiesStateTrace } from "../../../../fixture-debug-traces/modifiesStateTrace"; -import { INFURA_URL } from "../../../../setup"; -import { assertInvalidInputError } from "../../helpers/assertions"; -import { FORK_TESTS_CACHE_PATH } from "../../helpers/constants"; -import { EXAMPLE_CONTRACT } from "../../helpers/contracts"; -import { setCWD } from "../../helpers/cwd"; +import { defaultHardhatNetworkParams } from "../../../../../../src/internal/core/config/default-config"; +import { BackwardsCompatibilityProviderAdapter } from "../../../../../../src/internal/core/providers/backwards-compatibility"; +import { ModulesLogger } from "../../../../../../src/internal/hardhat-network/provider/modules/logger"; +import { ForkConfig } from "../../../../../../src/internal/hardhat-network/provider/node-types"; +import { RpcDebugTraceOutput } from "../../../../../../src/internal/hardhat-network/provider/output"; +import { HardhatNetworkProvider } from "../../../../../../src/internal/hardhat-network/provider/provider"; +import { EthereumProvider } from "../../../../../../src/types"; +import { trace as mainnetPostLondonTxTrace } from "../../../../../fixture-debug-traces/mainnetPostLondonTxTrace"; +import { trace as mainnetReturnsDataTrace } from "../../../../../fixture-debug-traces/mainnetReturnsDataTrace"; +import { trace as mainnetReturnsDataTraceGeth } from "../../../../../fixture-debug-traces/mainnetReturnsDataTraceGeth"; +import { trace as mainnetRevertTrace } from "../../../../../fixture-debug-traces/mainnetRevertTrace"; +import { trace as modifiesStateTrace } from "../../../../../fixture-debug-traces/modifiesStateTrace"; +import { trace as elongatedMemoryRegressionTestTrace } from "../../../../../fixture-debug-traces/elongatedMemoryRegressionTestTrace"; +import { ALCHEMY_URL } from "../../../../../setup"; +import { + assertInvalidArgumentsError, + assertInvalidInputError, +} from "../../../helpers/assertions"; +import { FORK_TESTS_CACHE_PATH } from "../../../helpers/constants"; +import { EXAMPLE_CONTRACT } from "../../../helpers/contracts"; +import { setCWD } from "../../../helpers/cwd"; import { DEFAULT_ACCOUNTS, DEFAULT_ACCOUNTS_ADDRESSES, @@ -26,14 +30,15 @@ import { DEFAULT_HARDFORK, DEFAULT_NETWORK_ID, PROVIDERS, -} from "../../helpers/providers"; -import { sendDummyTransaction } from "../../helpers/sendDummyTransaction"; -import { deployContract } from "../../helpers/transactions"; -import { assertEqualTraces } from "../utils/assertEqualTraces"; +} from "../../../helpers/providers"; +import { sendDummyTransaction } from "../../../helpers/sendDummyTransaction"; +import { deployContract } from "../../../helpers/transactions"; +import { assertEqualTraces } from "../../utils/assertEqualTraces"; +import { numberToRpcQuantity } from "../../../../../../src/internal/core/jsonrpc/types/base-types"; -// temporarily skipped because the latest version of ethereumjs +// TODO: temporarily skip some of the tests because the latest version of ethereumjs // sometimes wrongly adds dummy empty words in the memory field -describe.skip("Debug module", function () { +describe("Debug module", function () { PROVIDERS.forEach(({ name, useProvider }) => { describe(`${name} provider`, function () { setCWD(); @@ -68,6 +73,20 @@ describe.skip("Debug module", function () { }); }); + it("Should throw an error when the value passed as tracer is not supported", async function () { + await assertInvalidArgumentsError( + this.provider, + "debug_traceTransaction", + [ + "0x1234567876543234567876543456765434567aeaeaed67616732632762762373", + { + tracer: "unsupportedTracer", + }, + ], + "Hardhat currently only supports the default tracer, so no tracer parameter should be passed." + ); + }); + it("Should return the right values for fake sender txs", async function () { const impersonatedAddress = "0xC014BA5EC014ba5ec014Ba5EC014ba5Ec014bA5E"; @@ -80,7 +99,7 @@ describe.skip("Debug module", function () { { from: DEFAULT_ACCOUNTS_ADDRESSES[0], to: impersonatedAddress, - value: "0x100", + value: numberToRpcQuantity(10n ** 18n), }, ]); @@ -153,6 +172,28 @@ describe.skip("Debug module", function () { }); }); + // Regression test, see issue: https://github.com/NomicFoundation/hardhat/issues/3858 + it("The memory property should not have additional superfluous zeros", async function () { + // push0 push0 mstore push0 + const bytecode = "0x5F5F525F"; + const address = "0x1234567890123456789012345678901234567890"; + + await this.provider.send("hardhat_setCode", [address, bytecode]); + + const tx = await this.provider.send("eth_sendTransaction", [ + { + from: DEFAULT_ACCOUNTS_ADDRESSES[2], + to: address, + }, + ]); + + const trace = await this.provider.send("debug_traceTransaction", [ + tx, + ]); + + assertEqualTraces(trace, elongatedMemoryRegressionTestTrace); + }); + describe("berlin", function () { useProvider({ hardfork: "berlin" }); @@ -191,11 +232,11 @@ describe.skip("Debug module", function () { let provider: EthereumProvider; beforeEach(function () { - if (INFURA_URL === undefined) { + if (ALCHEMY_URL === undefined) { this.skip(); } const forkConfig: ForkConfig = { - jsonRpcUrl: INFURA_URL!, + jsonRpcUrl: ALCHEMY_URL!, blockNumber: 11_954_000, }; @@ -219,6 +260,7 @@ describe.skip("Debug module", function () { forkConfig, forkCachePath: FORK_TESTS_CACHE_PATH, allowBlocksWithSameTimestamp: false, + enableTransientStorage: false, }, logger ); @@ -315,11 +357,11 @@ describe.skip("Debug module", function () { let provider: EthereumProvider; beforeEach(function () { - if (INFURA_URL === undefined) { + if (ALCHEMY_URL === undefined) { this.skip(); } const forkConfig: ForkConfig = { - jsonRpcUrl: INFURA_URL!, + jsonRpcUrl: ALCHEMY_URL!, blockNumber: 15_204_358, }; @@ -343,6 +385,7 @@ describe.skip("Debug module", function () { forkConfig, forkCachePath: FORK_TESTS_CACHE_PATH, allowBlocksWithSameTimestamp: false, + enableTransientStorage: false, }, logger ); diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/call.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/call.ts index 149838f443..e57a552d3f 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/call.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/call.ts @@ -1,17 +1,20 @@ import { assert } from "chai"; import { Client } from "undici"; +import { ethers } from "ethers"; import { numberToRpcQuantity, rpcDataToNumber, rpcQuantityToNumber, rpcDataToBigInt, rpcQuantityToBigInt, + numberToRpcStorageSlot, } from "../../../../../../../src/internal/core/jsonrpc/types/base-types"; import { getCurrentTimestamp } from "../../../../../../../src/internal/hardhat-network/provider/utils/getCurrentTimestamp"; import { workaroundWindowsCiFailures } from "../../../../../../utils/workaround-windows-ci-failures"; import { assertAddressBalance, + assertInvalidArgumentsError, assertInvalidInputError, } from "../../../../helpers/assertions"; import { @@ -19,6 +22,10 @@ import { EXAMPLE_CONTRACT, EXAMPLE_READ_CONTRACT, EXAMPLE_REVERT_CONTRACT, + STATE_OVERRIDE_SET_CONTRACT_A, + STATE_OVERRIDE_SET_CONTRACT_B, + STATE_OVERRIDE_SET_CONTRACT_C, + STATE_OVERRIDE_SET_CONTRACT_D, } from "../../../../helpers/contracts"; import { setCWD } from "../../../../helpers/cwd"; import { @@ -498,6 +505,749 @@ describe("Eth module", function () { }); }); + describe("eth_call with state override", function () { + const deployerAddress = DEFAULT_ACCOUNTS_ADDRESSES[2]; + let contractAAddress: string; + let contractBAddress: string; + let contractDAddress: string; + + beforeEach(async function () { + // Contract A imports contract B and D, so first deploy contract B and contract D + contractBAddress = await deployContract( + this.provider, + `0x${STATE_OVERRIDE_SET_CONTRACT_B.bytecode.object}` + ); + + contractDAddress = await deployContract( + this.provider, + `0x${STATE_OVERRIDE_SET_CONTRACT_D.bytecode.object}` + ); + + // Contract A constructor requires the addresses of contract B and contract D. + // These values are encoded and appended to the data containing the bytecode of contract A + const abiCoder = new ethers.AbiCoder(); + const encodedParameters = abiCoder + .encode( + ["address", "address"], + [contractBAddress, contractDAddress] + ) + .slice(2); + + contractAAddress = await deployContract( + this.provider, + `0x${STATE_OVERRIDE_SET_CONTRACT_A.bytecode.object}${encodedParameters}` + ); + }); + + it("should call eth_call without the optional state override properties", async function () { + const xAndy = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.getXAndY, + }, + "latest", + ]); + + assert.equal( + xAndy, + "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" + ); + }); + + it("should call eth_call with an empty object passed as state override properties", async function () { + const xAndy = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.getXAndY, + }, + "latest", + {}, + ]); + + assert.equal( + xAndy, + "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" + ); + }); + + it("should throw an error because the key address used is invalid", async function () { + await assertInvalidArgumentsError( + this.provider, + "eth_call", + [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.senderBalance, + }, + "latest", + { + // Invalid address + [deployerAddress.slice(0, -2)]: { + balance: "0x0", + }, + }, + ], + `Errors encountered in param 2: Invalid value "0xce9efd622e568b3a21b19532c77fc76c93c34b" supplied to : { [K in address]: stateOverrideOptions } | undefined/0xce9efd622e568b3a21b19532c77fc76c93c34b: address` + ); + }); + + it("should throw an error because an invalid storage key is used", async function () { + await assertInvalidArgumentsError( + this.provider, + "eth_call", + [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.senderBalance, + }, + "latest", + { + [deployerAddress]: { + stateDiff: { + // Invalid storage address (shorter than 64 chars) + "0x00000000000000000000000000000000000000000000000000000000000002": + "0x000000000000000000000000000000000000000000000000000000000000000c", + }, + }, + }, + ], + `Errors encountered in param 2: Invalid value "0x00000000000000000000000000000000000000000000000000000000000002" supplied to : { [K in address]: stateOverrideOptions } | undefined/0xce9efd622e568b3a21b19532c77fc76c93c34bd4: stateOverrideOptions/stateDiff: { [K in Storage slot hex string]: Storage slot } | undefined/0x00000000000000000000000000000000000000000000000000000000000002: Storage slot hex string` + ); + }); + + describe("balance", function () { + it("should override the balance and then revert it to the original value after the override", async function () { + const balanceBefore = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.senderBalance, + }, + "latest", + ]); + + const overrideBalance = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.senderBalance, + }, + "latest", + { + [deployerAddress]: { + balance: "0x1", + }, + }, + ]); + + assert.equal( + overrideBalance, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + assert.notEqual(balanceBefore, overrideBalance); + + const balanceAfter = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.senderBalance, + }, + "latest", + ]); + + assert.equal(balanceAfter, balanceBefore); + }); + + it("should allow the balance property to be null without throwing an error", async function () { + const balanceBefore = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.senderBalance, + }, + "latest", + ]); + + const balanceAfter = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.senderBalance, + }, + "latest", + { + [contractAAddress]: { + balance: null, + }, + }, + ]); + + assert.equal(balanceAfter, balanceBefore); + }); + + describe("test the limit value (32 bytes) for the balance", function () { + const maxBalance: bigint = 2n ** 256n - 1n; + + it("should be successful, the balance value is the maximum allowed value", async function () { + await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.senderBalance, + }, + "latest", + { + [deployerAddress]: { + balance: numberToRpcQuantity(maxBalance), + }, + }, + ]); + }); + + it("should throw an error, the balance value is too big", async function () { + await assertInvalidInputError( + this.provider, + "eth_call", + [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors + .senderBalance, + }, + "latest", + { + [deployerAddress]: { + balance: numberToRpcQuantity(maxBalance + 1n), + }, + }, + ], + "The 'balance' property should occupy a maximum of 32 bytes (balance=115792089237316195423570985008687907853269984665640564039457584007913129639936)." + ); + }); + }); + }); + + describe("nonce", function () { + let currentDAddrNonce: bigint; + + this.beforeEach(async function () { + // Get the nonce for the D address + currentDAddrNonce = rpcQuantityToBigInt( + await this.provider.send("eth_getTransactionCount", [ + contractDAddress, + "latest", + ]) + ); + }); + + function rpcDataToAddress(hexString: string): string { + assert.lengthOf(hexString, 66); + return `0x${hexString.slice(-40)}`; + } + + it("should not override the nonce", async function () { + const predictedAddress = ethers.getCreateAddress({ + from: contractDAddress, + nonce: currentDAddrNonce, + }); + + const actualAddress = rpcDataToAddress( + await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractDAddress, + data: STATE_OVERRIDE_SET_CONTRACT_D.selectors + .deployChildContract, + }, + "latest", + ]) + ); + + assert.equal( + actualAddress.toLowerCase(), + predictedAddress.toLowerCase() + ); + }); + + it("should override the nonce and then revert it to the original value after the override", async function () { + const nonceBefore = currentDAddrNonce; + + const overrideNonce = 0x1234n; + + const predictedAddress = ethers.getCreateAddress({ + from: contractDAddress, + nonce: overrideNonce, + }); + + const actualAddress = rpcDataToAddress( + await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractDAddress, + data: STATE_OVERRIDE_SET_CONTRACT_D.selectors + .deployChildContract, + }, + "latest", + { + [contractDAddress]: { + nonce: numberToRpcQuantity(overrideNonce), + }, + }, + ]) + ); + + assert.equal( + actualAddress.toLowerCase(), + predictedAddress.toLowerCase() + ); + + // Check that nonce has been reverted + const nonceAfter = rpcQuantityToBigInt( + await this.provider.send("eth_getTransactionCount", [ + contractDAddress, + "latest", + ]) + ); + + assert.equal(nonceAfter, nonceBefore); + }); + + it("should allow the nonce property to be null without throwing an error", async function () { + const predictedAddress = ethers.getCreateAddress({ + from: contractDAddress, + nonce: currentDAddrNonce, + }); + + const actualAddress = rpcDataToAddress( + await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractDAddress, + data: STATE_OVERRIDE_SET_CONTRACT_D.selectors + .deployChildContract, + }, + "latest", + { + [contractDAddress]: { nonce: null }, + }, + ]) + ); + + assert.equal( + actualAddress.toLowerCase(), + predictedAddress.toLowerCase() + ); + }); + + describe("test the limit value (8 bytes) for the nonce", function () { + const maxNonce: bigint = 2n ** 64n - 1n; + + it("should be successful, the nonce value is the maximum allowed value", async function () { + await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.senderBalance, + }, + "latest", + { + [deployerAddress]: { + nonce: numberToRpcQuantity(maxNonce), + }, + }, + ]); + }); + + it("should throw an error, the nonce value is too big", async function () { + await assertInvalidInputError( + this.provider, + "eth_call", + [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors + .senderBalance, + }, + "latest", + { + [deployerAddress]: { + nonce: numberToRpcQuantity(maxNonce + 1n), + }, + }, + ], + "The 'nonce' property should occupy a maximum of 8 bytes (nonce=18446744073709551616)." + ); + }); + }); + }); + + describe("code", function () { + function encodeString(s: string): string { + const abiCoder = new ethers.AbiCoder(); + return abiCoder.encode(["string"], [s]); + } + + it("should revert the original code after that the code of contract B has been override with the code of contract C", async function () { + const messageBefore = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors + .getMessageFromBContract, + }, + "latest", + ]); + + assert.equal(messageBefore, encodeString("Hello from B!")); + + const messageOverride = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors + .getMessageFromBContract, + }, + "latest", + { + [contractBAddress]: { + code: `0x${STATE_OVERRIDE_SET_CONTRACT_C.bytecode.object}`, + }, + }, + ]); + + // Message should be the one from contract C + assert.equal( + messageOverride, + encodeString("Hello from the C contract") + ); + + const messageAfter = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors + .getMessageFromBContract, + }, + "latest", + ]); + + assert.equal(messageAfter, messageBefore); + }); + + it("should allow the code property to be null without throwing an error", async function () { + const message = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors + .getMessageFromBContract, + }, + "latest", + { + [contractBAddress]: { + code: null, + }, + }, + ]); + + assert.equal(message, encodeString("Hello from B!")); + }); + }); + + it("should throw an error when both the state and the stateDiff properties are defined", async function () { + await assertInvalidInputError( + this.provider, + "eth_call", + [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.getXAndY, + }, + "latest", + { + [contractAAddress]: { + state: {}, + stateDiff: {}, + }, + }, + ], + "The properties 'state' and 'stateDiff' cannot be used simultaneously when configuring the state override set passed to the eth_call method." + ); + }); + + describe("state property", function () { + it("should override the state: clear all the storage", async function () { + const storage = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.getXAndY, + }, + "latest", + { + [contractAAddress]: { + state: {}, + }, + }, + ]); + + // x and y should be overriden to 0 + assert.equal( + storage, + "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ); + }); + + it("should override the storage and then revert it to the original value after the override", async function () { + // Clear all the storage and then set the storage at slot 3 with value 0x0...0C + const storageBefore = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.getXAndY, + }, + "latest", + ]); + + assert.equal( + storageBefore, + "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" + ); + + const storageOverride = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.getXAndY, + }, + "latest", + { + [contractAAddress]: { + state: { + // Memory slot starting at 3, location where y is stored + "0x0000000000000000000000000000000000000000000000000000000000000003": + "0x000000000000000000000000000000000000000000000000000000000000000c", + }, + }, + }, + ]); + + // x should be cleared, y should be overriden to c + assert.equal( + storageOverride, + "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c" + ); + + const storageAfter = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.getXAndY, + }, + "latest", + ]); + + assert.equal(storageAfter, storageBefore); + }); + + it("should allow the state property to be null without throwing an error", async function () { + const storage = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.getXAndY, + }, + "latest", + { + [contractAAddress]: { + state: null, + }, + }, + ]); + + assert.equal( + storage, + "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" + ); + }); + }); + + describe("stateDiff property", function () { + it("should override the storage and then revert it to the original value after the override", async function () { + // Override only the storage starting at slot 3 (variable y) + const storageBefore = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.getXAndY, + }, + "latest", + ]); + + assert.equal( + storageBefore, + "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" + ); + + const storageOverride = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.getXAndY, + }, + "latest", + { + [contractAAddress]: { + stateDiff: { + // Memory slot starting at 3, location where y is stored + "0x0000000000000000000000000000000000000000000000000000000000000003": + "0x000000000000000000000000000000000000000000000000000000000000000c", + }, + }, + }, + ]); + + // x should not be override, y should be override to c + assert.equal( + storageOverride, + "0x0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000c" + ); + + const storageAfter = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.getXAndY, + }, + "latest", + ]); + + assert.equal(storageAfter, storageBefore); + }); + + it("should override both the storage starting at slot 2 (variable x), and the storage starting at slot 3 (variable y)", async function () { + const storage = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.getXAndY, + }, + "latest", + { + [contractAAddress]: { + stateDiff: { + // Memory slot starting at 2, location where x is stored + "0x0000000000000000000000000000000000000000000000000000000000000002": + "0x000000000000000000000000000000000000000000000000000000000000000c", + // Memory slot starting at 3, location where y is stored + "0x0000000000000000000000000000000000000000000000000000000000000003": + "0x000000000000000000000000000000000000000000000000000000000000000c", + }, + }, + }, + ]); + + // Both x and y should be overriden + assert.equal( + storage, + "0x000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000c" + ); + }); + + it("should allow the stateDiff property to be null without throwing an error", async function () { + const storage = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors.getXAndY, + }, + "latest", + { + [contractAAddress]: { + stateDiff: null, + }, + }, + ]); + + assert.equal( + storage, + "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002" + ); + }); + }); + + it("should override multiple addresses and properties at the same time", async function () { + const overrideSenderBalance = 0x123456789n; + const overrideContractABalance = 0x11223344n; + const overrideContractAYValue = 0x222222211111111111n; + const overrideContractDNonce = 0x999n; + + const result = await this.provider.send("eth_call", [ + { + from: deployerAddress, + to: contractAAddress, + data: STATE_OVERRIDE_SET_CONTRACT_A.selectors + .deployContractAndGetMultipleBalances, + }, + "latest", + { + [deployerAddress]: { + balance: numberToRpcQuantity(overrideSenderBalance), + }, + [contractAAddress]: { + balance: numberToRpcQuantity(overrideContractABalance), + // Override y variable at slot 3 + stateDiff: { + "0x0000000000000000000000000000000000000000000000000000000000000003": + numberToRpcStorageSlot(overrideContractAYValue), + }, + }, + [contractBAddress]: { + code: `0x${STATE_OVERRIDE_SET_CONTRACT_C.bytecode.object}`, + }, + [contractDAddress]: { + nonce: numberToRpcQuantity(overrideContractDNonce), + }, + }, + ]); + + const abiCoder = new ethers.AbiCoder(); + + const [ + senderBalance, + contractABalance, + contractDDeployedAddress, + contractBMessage, + contractAYValue, + ] = abiCoder.decode( + ["uint", "uint", "address", "string", "uint"], + result + ); + + assert.equal(senderBalance, overrideSenderBalance); + assert.equal(contractABalance, overrideContractABalance); + assert.equal( + contractDDeployedAddress.toLowerCase(), + ethers + .getCreateAddress({ + from: contractDAddress, + nonce: overrideContractDNonce, + }) + .toLowerCase() + ); + + assert.equal(contractBMessage, "Hello from the C contract"); + assert.equal(contractAYValue, overrideContractAYValue); + }); + }); + describe("Fee price fields", function () { let deploymentBytecode: string; let balanceSelector: string; @@ -824,7 +1574,7 @@ contract C { // send the transaction using an http client, otherwise the wrapped // provider will intercept the response and throw an error - async function call({ from, to, data }: any) { + async function call({ from, to, data }: any): Promise { return client .request({ method: "POST", diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/estimateGas.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/estimateGas.ts index c0e3a01053..391d4deb8f 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/estimateGas.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/estimateGas.ts @@ -433,7 +433,7 @@ describe("Eth module", function () { // send the transaction using an http client, otherwise the wrapped // provider will intercept the response and throw an error - async function estimateGas({ from, to, data }: any) { + async function estimateGas({ from, to, data }: any): Promise { return client .request({ method: "POST", diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/getTransactionByHash.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/getTransactionByHash.ts index 02533498d1..efc07c2a5e 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/getTransactionByHash.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/getTransactionByHash.ts @@ -19,7 +19,7 @@ import { EIP1559RpcTransactionOutput, LegacyRpcTransactionOutput, } from "../../../../../../../src/internal/hardhat-network/provider/output"; -import { INFURA_URL } from "../../../../../../setup"; +import { ALCHEMY_URL } from "../../../../../../setup"; import { workaroundWindowsCiFailures } from "../../../../../../utils/workaround-windows-ci-failures"; import { assertAccessListTransaction, @@ -324,13 +324,13 @@ describe("Eth module", function () { }); it("should get an existing transaction from goerli", async function () { - if (!isFork || INFURA_URL === undefined) { + if (!isFork || ALCHEMY_URL === undefined) { this.skip(); } - const goerliUrl = INFURA_URL.replace("mainnet", "goerli"); + const goerliUrl = ALCHEMY_URL.replace("mainnet", "goerli"); // If "mainnet" is not present the replacement failed so we skip the test - if (goerliUrl === INFURA_URL) { + if (goerliUrl === ALCHEMY_URL) { this.skip(); } diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/sendRawTransaction.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/sendRawTransaction.ts index 8ad3c1649d..d0e0d5b403 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/sendRawTransaction.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/sendRawTransaction.ts @@ -189,7 +189,7 @@ describe("Eth module", function () { // // this method uses the first default account, and it assumes that // that account sent a tx before, so it uses a nonce of 1 - async function sendRawTransaction({ to, data }: any) { + async function sendRawTransaction({ to, data }: any): Promise { const tx = TransactionFactory.fromTxData( { to, diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/sendTransaction.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/sendTransaction.ts index 80e218e651..4bd3e1251f 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/sendTransaction.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/sendTransaction.ts @@ -1181,7 +1181,7 @@ describe("Eth module", function () { // send the transaction using an http client, otherwise the wrapped // provider will intercept the response and throw an error - async function sendTransaction({ from, to, data }: any) { + async function sendTransaction({ from, to, data }: any): Promise { return client .request({ method: "POST", diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/subscribe.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/subscribe.ts index 18e60ca840..a6c1e1ce81 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/subscribe.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/methods/subscribe.ts @@ -182,12 +182,12 @@ describe("Eth module", function () { DEFAULT_ACCOUNTS_ADDRESSES[0] ); - const abiEncoder = new ethers.utils.Interface(contractA.abi); + const abiEncoder = new ethers.Interface(contractA.abi); const filterId = await this.provider.send("eth_subscribe", [ "logs", { address, - topic: abiEncoder.getEventTopic("TokensMinted"), + topic: abiEncoder.getEvent("TokensMinted")?.topicHash, }, ]); diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/websocket.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/websocket.ts index f3db1e7613..ef3de84d18 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/websocket.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/eth/websocket.ts @@ -342,14 +342,12 @@ describe("Eth module", function () { }); describe("ethers.WebSocketProvider", function () { - let provider: ethers.providers.WebSocketProvider; + let provider: ethers.WebSocketProvider; beforeEach(async function () { if (this.serverInfo !== undefined) { const { address, port } = this.serverInfo; - provider = new ethers.providers.WebSocketProvider( - `ws://${address}:${port}` - ); + provider = new ethers.WebSocketProvider(`ws://${address}:${port}`); } else { this.skip(); } @@ -375,7 +373,7 @@ describe("Eth module", function () { ); await sleep(100); - const signer = provider.getSigner(); + const signer = await provider.getSigner(); await signer.sendTransaction({ to: await signer.getAddress(), }); @@ -384,8 +382,8 @@ describe("Eth module", function () { }); it("contract events work", async function () { - const signer = provider.getSigner(); - const Factory = new ethers.ContractFactory( + const signer = await provider.getSigner(); + const Factory = new ethers.ContractFactory<[], ethers.Contract>( EXAMPLE_CONTRACT.abi, EXAMPLE_CONTRACT.bytecode, signer diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/hardhat.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/hardhat.ts index 3f3e06a385..bd24a7de1b 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/modules/hardhat.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/modules/hardhat.ts @@ -11,7 +11,7 @@ import { } from "../../../../../src/internal/core/jsonrpc/types/base-types"; import { CompilerOutputContract } from "../../../../../src/types/artifacts"; import { expectErrorAsync } from "../../../../helpers/errors"; -import { INFURA_URL } from "../../../../setup"; +import { ALCHEMY_URL } from "../../../../setup"; import { workaroundWindowsCiFailures } from "../../../../utils/workaround-windows-ci-failures"; import { assertInternalError, @@ -1305,7 +1305,7 @@ describe("Hardhat module", function () { describe("hardhat_reset", function () { before(function () { - if (INFURA_URL === undefined) { + if (ALCHEMY_URL === undefined) { this.skip(); } }); @@ -1334,7 +1334,7 @@ describe("Hardhat module", function () { await assertInvalidArgumentsError(this.provider, "hardhat_reset", [ { forking: { - jsonRpcUrl: INFURA_URL, + jsonRpcUrl: ALCHEMY_URL, blockNumber: "0", }, }, @@ -1345,7 +1345,7 @@ describe("Hardhat module", function () { const result = await this.provider.send("hardhat_reset", [ { forking: { - jsonRpcUrl: INFURA_URL, + jsonRpcUrl: ALCHEMY_URL, blockNumber: safeBlockInThePast, }, }, @@ -1435,7 +1435,7 @@ describe("Hardhat module", function () { await this.provider.send("hardhat_reset", [ { forking: { - jsonRpcUrl: INFURA_URL, + jsonRpcUrl: ALCHEMY_URL, blockNumber: safeBlockInThePast, }, }, @@ -1448,13 +1448,13 @@ describe("Hardhat module", function () { await this.provider.send("hardhat_reset", [ { forking: { - jsonRpcUrl: INFURA_URL, + jsonRpcUrl: ALCHEMY_URL, blockNumber: safeBlockInThePast, }, }, ]); await this.provider.send("hardhat_reset", [ - { forking: { jsonRpcUrl: INFURA_URL } }, + { forking: { jsonRpcUrl: ALCHEMY_URL } }, ]); // This condition is rather loose as Infura can sometimes return @@ -1483,7 +1483,7 @@ describe("Hardhat module", function () { await this.provider.send("hardhat_reset", [ { forking: { - jsonRpcUrl: INFURA_URL, + jsonRpcUrl: ALCHEMY_URL, blockNumber: safeBlockInThePast, }, }, @@ -1495,7 +1495,7 @@ describe("Hardhat module", function () { await this.provider.send("hardhat_reset", [ { forking: { - jsonRpcUrl: INFURA_URL, + jsonRpcUrl: ALCHEMY_URL, blockNumber: safeBlockInThePast, }, }, @@ -1701,7 +1701,7 @@ describe("Hardhat module", function () { describe("hardhat_setCode", function () { let contractNine: CompilerOutputContract; - let abiEncoder: ethers.utils.Interface; + let abiEncoder: ethers.Interface; before(async function () { [ , @@ -1715,7 +1715,7 @@ describe("Hardhat module", function () { function returnNine() public pure returns (int) { return 9; } } `); - abiEncoder = new ethers.utils.Interface(contractNine.abi); + abiEncoder = new ethers.Interface(contractNine.abi); }); it("should reject an invalid address", async function () { @@ -2182,7 +2182,7 @@ describe("Hardhat module", function () { ]); // Assert: Verify that the contract retrieves the modified value. - const abiEncoder = new ethers.utils.Interface(storageContract.abi); + const abiEncoder = new ethers.Interface(storageContract.abi); assert.equal( await this.provider.send("eth_call", [ { diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/node.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/node.ts index 1914b7010a..c6866d0c6f 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/node.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/node.ts @@ -13,6 +13,7 @@ import { defaultHardhatNetworkParams } from "../../../../src/internal/core/confi import { HardhatNode } from "../../../../src/internal/hardhat-network/provider/node"; import { ForkedNodeConfig, + LocalNodeConfig, NodeConfig, RunCallResult, } from "../../../../src/internal/hardhat-network/provider/node-types"; @@ -23,7 +24,7 @@ import { HardhatNetworkChainConfig, HardhatNetworkChainsConfig, } from "../../../../src/types"; -import { INFURA_URL } from "../../../setup"; +import { ALCHEMY_URL } from "../../../setup"; import { assertQuantity } from "../helpers/assertions"; import { EMPTY_ACCOUNT_ADDRESS, @@ -78,6 +79,7 @@ describe("HardhatNode", () => { coinbase: "0x0000000000000000000000000000000000000000", chains: defaultHardhatNetworkParams.chains, allowBlocksWithSameTimestamp: false, + enableTransientStorage: false, }; const gasPrice = 20; let node: HardhatNode; @@ -694,7 +696,7 @@ describe("HardhatNode", () => { }); describe("full block", function () { - if (INFURA_URL === undefined) { + if (ALCHEMY_URL === undefined) { return; } @@ -703,43 +705,44 @@ describe("HardhatNode", () => { // its receipts contain the state root, and we can't compute it { networkName: "mainnet", - url: INFURA_URL, + url: ALCHEMY_URL, blockToRun: 4370001n, chainId: 1, }, { networkName: "mainnet", - url: INFURA_URL, + url: ALCHEMY_URL, blockToRun: 7280001n, chainId: 1, }, { networkName: "mainnet", - url: INFURA_URL, + url: ALCHEMY_URL, blockToRun: 9069001n, chainId: 1, }, { networkName: "mainnet", - url: INFURA_URL, + url: ALCHEMY_URL, blockToRun: 9300077n, chainId: 1, }, { networkName: "mainnet", - url: INFURA_URL, + url: ALCHEMY_URL, blockToRun: 17_050_001n, // post-shanghai chainId: 1, }, { networkName: "goerli", - url: INFURA_URL.replace("mainnet", "goerli"), + url: ALCHEMY_URL.replace("mainnet", "goerli"), blockToRun: 7728449n, // this block has both EIP-2930 and EIP-1559 txs chainId: 5, }, { networkName: "sepolia", - url: INFURA_URL.replace("mainnet", "sepolia"), + url: ALCHEMY_URL.replace("alchemyapi.io", "g.alchemy.com") // temporary fix until we fix our github secret + .replace("mainnet", "sepolia"), blockToRun: 3095000n, // this block is post-shanghai chainId: 11155111, }, @@ -844,7 +847,7 @@ describe("HardhatNode", () => { block: bigint, targetNode: HardhatNode ): Promise { - const contractInterface = new ethers.utils.Interface([ + const contractInterface = new ethers.Interface([ "function Hello() public pure returns (string)", ]); @@ -871,7 +874,7 @@ describe("HardhatNode", () => { describe("should run calls in the right hardfork context", async function () { this.timeout(10000); before(function () { - if (INFURA_URL === undefined) { + if (ALCHEMY_URL === undefined) { this.skip(); return; } @@ -890,7 +893,7 @@ describe("HardhatNode", () => { networkId: 1, hardfork: "london", forkConfig: { - jsonRpcUrl: INFURA_URL!, + jsonRpcUrl: ALCHEMY_URL!, blockNumber: Number(eip1559ActivationBlock), }, forkCachePath: FORK_TESTS_CACHE_PATH, @@ -901,6 +904,7 @@ describe("HardhatNode", () => { mempoolOrder: "priority", coinbase: "0x0000000000000000000000000000000000000000", allowBlocksWithSameTimestamp: false, + enableTransientStorage: false, }; describe("when forking with a default hardfork activation history", function () { @@ -1046,7 +1050,7 @@ describe("HardhatNode", () => { }); it("should support a historical call in the context of a block added via mineBlocks()", async function () { - if (INFURA_URL === undefined) { + if (ALCHEMY_URL === undefined) { this.skip(); return; } @@ -1056,7 +1060,7 @@ describe("HardhatNode", () => { networkId: 1, hardfork: "london", forkConfig: { - jsonRpcUrl: INFURA_URL, + jsonRpcUrl: ALCHEMY_URL, blockNumber: 12965000, // eip1559ActivationBlock }, forkCachePath: FORK_TESTS_CACHE_PATH, @@ -1067,6 +1071,7 @@ describe("HardhatNode", () => { mempoolOrder: "priority", coinbase: "0x0000000000000000000000000000000000000000", allowBlocksWithSameTimestamp: false, + enableTransientStorage: false, }; const [, hardhatNode] = await HardhatNode.create(nodeConfig); @@ -1083,4 +1088,288 @@ describe("HardhatNode", () => { ) ); }); + + describe("enableTransientStorage", function () { + const TLOAD_DEPLOYMENT_BYTECODE = "0x60FF5c"; // PUSH1 FF TLOAD + const TSTORE_DEPLOYMENT_BYTECODE = "0x60FF60FF5d"; // PUSH1 FF TLOAD + + const nodeConfig: LocalNodeConfig = { + automine: true, + chainId: 1, + networkId: 1, + hardfork: "london", + blockGasLimit: 1_000_000, + minGasPrice: 0n, + genesisAccounts: DEFAULT_ACCOUNTS, + chains: defaultHardhatNetworkParams.chains, + mempoolOrder: "priority", + coinbase: "0x0000000000000000000000000000000000000000", + allowBlocksWithSameTimestamp: false, + enableTransientStorage: false, + }; + + describe("When not enabled and on a fork that doesn't support it", function () { + it("Should revert if trying to run TLOAD in a tx", async function () { + const [, hardhatNode] = await HardhatNode.create(nodeConfig); + + const tx = createTestTransaction({ + nonce: 0, + from: DEFAULT_ACCOUNTS_ADDRESSES[0], + to: undefined, + data: TLOAD_DEPLOYMENT_BYTECODE, + gasLimit: 1_000_000n, + gasPrice: 10n ** 9n, + }); + + const transactionResult = await hardhatNode.sendTransaction(tx); + + if ( + typeof transactionResult === "string" || + Array.isArray(transactionResult) + ) { + assert.fail("Expected a MineBlockResult"); + } + + const error = transactionResult.traces[0].error; + assert.isDefined(error); + assert.include(error!.message, "invalid opcode"); + }); + + it("Should revert if trying to run TSTORE in a tx", async function () { + const [, hardhatNode] = await HardhatNode.create(nodeConfig); + + const tx = createTestTransaction({ + nonce: 0, + from: DEFAULT_ACCOUNTS_ADDRESSES[0], + to: undefined, + data: TSTORE_DEPLOYMENT_BYTECODE, + gasLimit: 1_000_000n, + gasPrice: 10n ** 9n, + }); + + const transactionResult = await hardhatNode.sendTransaction(tx); + + if ( + typeof transactionResult === "string" || + Array.isArray(transactionResult) + ) { + assert.fail("Expected a MineBlockResult"); + } + + const error = transactionResult.traces[0].error; + assert.isDefined(error); + assert.include(error!.message, "invalid opcode"); + }); + + it("Should revert if trying to run TLOAD in a call", async function () { + const [, hardhatNode] = await HardhatNode.create(nodeConfig); + + const callResult = await hardhatNode.runCall( + { + to: undefined, + from: toBuffer(DEFAULT_ACCOUNTS_ADDRESSES[0]), + data: toBuffer(TLOAD_DEPLOYMENT_BYTECODE), + value: 0n, + gasLimit: 1_000_000n, + }, + 0n + ); + + assert.isDefined(callResult.error); + assert.include(callResult.error!.message, "invalid opcode"); + }); + + it("Should revert if trying to run TSTORE in a call", async function () { + const [, hardhatNode] = await HardhatNode.create(nodeConfig); + + const callResult = await hardhatNode.runCall( + { + to: undefined, + from: toBuffer(DEFAULT_ACCOUNTS_ADDRESSES[0]), + data: toBuffer(TSTORE_DEPLOYMENT_BYTECODE), + value: 0n, + gasLimit: 1_000_000n, + }, + 0n + ); + + assert.isDefined(callResult.error); + assert.include(callResult.error!.message, "invalid opcode"); + }); + + it("Should revert if trying to run TLOAD in a gasEstimate", async function () { + const [, hardhatNode] = await HardhatNode.create(nodeConfig); + + const estimateGasResult = await hardhatNode.estimateGas( + { + to: undefined, + from: toBuffer(DEFAULT_ACCOUNTS_ADDRESSES[0]), + data: toBuffer(TLOAD_DEPLOYMENT_BYTECODE), + value: 0n, + gasLimit: 1_000_000n, + }, + 0n + ); + + assert.isDefined(estimateGasResult.error); + assert.include(estimateGasResult.error!.message, "invalid opcode"); + }); + + it("Should revert if trying to run TSTORE in a gasEstimate", async function () { + const [, hardhatNode] = await HardhatNode.create(nodeConfig); + + const estimateGasResult = await hardhatNode.estimateGas( + { + to: undefined, + from: toBuffer(DEFAULT_ACCOUNTS_ADDRESSES[0]), + data: toBuffer(TSTORE_DEPLOYMENT_BYTECODE), + value: 0n, + gasLimit: 1_000_000n, + }, + 0n + ); + + assert.isDefined(estimateGasResult.error); + assert.include(estimateGasResult.error!.message, "invalid opcode"); + }); + }); + + describe("When enabled", function () { + it("Should not revert if trying to run TLOAD in a tx", async function () { + const [, hardhatNode] = await HardhatNode.create({ + ...nodeConfig, + enableTransientStorage: true, + }); + + const tx = createTestTransaction({ + nonce: 0, + from: DEFAULT_ACCOUNTS_ADDRESSES[0], + to: undefined, + data: TLOAD_DEPLOYMENT_BYTECODE, + gasLimit: 1_000_000n, + gasPrice: 10n ** 9n, + }); + + const transactionResult = await hardhatNode.sendTransaction(tx); + + if ( + typeof transactionResult === "string" || + Array.isArray(transactionResult) + ) { + assert.fail("Expected a MineBlockResult"); + } + + const error = transactionResult.traces[0].error; + assert.isUndefined(error); + }); + + it("Should not revert if trying to run TSTORE in a tx", async function () { + const [, hardhatNode] = await HardhatNode.create({ + ...nodeConfig, + enableTransientStorage: true, + }); + + const tx = createTestTransaction({ + nonce: 0, + from: DEFAULT_ACCOUNTS_ADDRESSES[0], + to: undefined, + data: TSTORE_DEPLOYMENT_BYTECODE, + gasLimit: 1_000_000n, + gasPrice: 10n ** 9n, + }); + + const transactionResult = await hardhatNode.sendTransaction(tx); + + if ( + typeof transactionResult === "string" || + Array.isArray(transactionResult) + ) { + assert.fail("Expected a MineBlockResult"); + } + + const error = transactionResult.traces[0].error; + assert.isUndefined(error); + }); + + it("Should not revert if trying to run TLOAD in a call", async function () { + const [, hardhatNode] = await HardhatNode.create({ + ...nodeConfig, + enableTransientStorage: true, + }); + + const callResult = await hardhatNode.runCall( + { + to: undefined, + from: toBuffer(DEFAULT_ACCOUNTS_ADDRESSES[0]), + data: toBuffer(TLOAD_DEPLOYMENT_BYTECODE), + value: 0n, + gasLimit: 1_000_000n, + }, + 0n + ); + + assert.isUndefined(callResult.error); + }); + + it("Should revert if trying to run TSTORE in a call", async function () { + const [, hardhatNode] = await HardhatNode.create({ + ...nodeConfig, + enableTransientStorage: true, + }); + + const callResult = await hardhatNode.runCall( + { + to: undefined, + from: toBuffer(DEFAULT_ACCOUNTS_ADDRESSES[0]), + data: toBuffer(TSTORE_DEPLOYMENT_BYTECODE), + value: 0n, + gasLimit: 1_000_000n, + }, + 0n + ); + + assert.isUndefined(callResult.error); + }); + + it("Should not revert if trying to run TLOAD in a gasEstimate", async function () { + const [, hardhatNode] = await HardhatNode.create({ + ...nodeConfig, + enableTransientStorage: true, + }); + + const estimateGasResult = await hardhatNode.estimateGas( + { + to: undefined, + from: toBuffer(DEFAULT_ACCOUNTS_ADDRESSES[0]), + data: toBuffer(TLOAD_DEPLOYMENT_BYTECODE), + value: 0n, + gasLimit: 1_000_000n, + }, + 0n + ); + + assert.isUndefined(estimateGasResult.error); + }); + + it("Should not revert if trying to run TSTORE in a gasEstimate", async function () { + const [, hardhatNode] = await HardhatNode.create({ + ...nodeConfig, + enableTransientStorage: true, + }); + + const estimateGasResult = await hardhatNode.estimateGas( + { + to: undefined, + from: toBuffer(DEFAULT_ACCOUNTS_ADDRESSES[0]), + data: toBuffer(TSTORE_DEPLOYMENT_BYTECODE), + value: 0n, + gasLimit: 1_000_000n, + }, + 0n + ); + + assert.isUndefined(estimateGasResult.error); + }); + }); + }); }); diff --git a/packages/hardhat-core/test/internal/hardhat-network/provider/utils/runFullBlock.ts b/packages/hardhat-core/test/internal/hardhat-network/provider/utils/runFullBlock.ts index 48673ea34f..afa3b60bc4 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/provider/utils/runFullBlock.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/provider/utils/runFullBlock.ts @@ -57,6 +57,7 @@ export async function runFullBlock( coinbase: "0x0000000000000000000000000000000000000000", chains: defaultHardhatNetworkParams.chains, allowBlocksWithSameTimestamp: false, + enableTransientStorage: false, }; const [common, forkedNode] = await HardhatNode.create(forkedNodeConfig); diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/README.md b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/README.md new file mode 100644 index 0000000000..fcb92d12ec --- /dev/null +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/README.md @@ -0,0 +1,67 @@ +# Stack traces tests + +> ⚠️ _This explanation was written on 2023-07-04, and can be out of date or incomplete. If you think there's something wrong, or that some important part of the explanation is missing, please open an issue about it._ ⚠️ + +This directory contains tests related to our tracing engine. They are mainly about the generated stack traces, but they also test things like inferred errors and console logs. + +These tests are written with an ad-hoc mini framework, where each test corresponds to a directory under `test-files`. Each of these directories has a `test.json` file describing the test, and Solidity files that are used by that test. The `test.ts` file then consumes these files to generate and execute the corresponding tests. + +## Example + +One simple example of a test is `test-files/0_8/call-message/external-calls/non-contract-account-called`. This test checks that, when a transaction makes a call to an address that is not a contract, the proper error is inferred by our heuristics and that the frame in the stack trace has the right file name, line number, contract name and function name. + +```json +{ + "transactions": [ + { + "file": "c.sol", + "contract": "C" + }, + { + "to": 0, + "function": "test", + "stackTrace": [ + { + "type": "NONCONTRACT_ACCOUNT_CALLED_ERROR", + "sourceReference": { + "contract": "C", + "file": "c.sol", + "function": "test", + "line": 11 + } + } + ] + } + ] +} +``` + +Each `test.json` file can have several fields, but the only mandatory one is a `transactions` array with the list of transactions that should be executed. The `TestDefinition` interface in [`test.ts`](https://github.com/NomicFoundation/hardhat/blob/main/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts) describes the possible contents of a `test.json` file. + +Transactions can be deployments or calls. In this case the first transaction deploys the contract `C` in `c.sol`, and the second transaction calls the function `test` in that contract. The contract that is called is indicated by `"to": 0`, which corresponds to the first contract deployed by this test. + +Each transaction can have some "assertion" fields, which describe what should happen when that transaction is executed. The most common one is `stackTrace`, which indicates that the transaction should revert and that Hardhat should generate the given stack trace. In this case, the test is saying that the transaction should revert with a single frame, which has an inferred `NONCONTRACT_ACCOUNT_CALLED_ERROR` error, and points to line 11 of the `c.sol` file. + +Another possible assertion field is `consoleLogs`, which specifies that the transaction should emit certain logs with `console.sol`. See for example [this `test.json`](https://github.com/NomicFoundation/hardhat/blob/stack-traces-tests-explainer/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/console-logs/uint/uint/test.json). + +## Directory structure + +All the tests are located under the `test-files` directory. Each directory immediately under it corresponds to a minor version of Solidity. In practice this means that tests under `test-files/0_8` will have a `pragma solidity ^0.8.0`, but it is possible to specify tests that are only run for a more precise range of versions. + +There are two other directories under `test-files`. One is `version-independent`, which has tests that can be run with any version of solc (right now there's only one test there). The other one is `artifacts`, which is a cache directory with all the compilation outputs from previous runs. + +## Running a single test + +`test.json` files can (temporarily) have a `"only": true` field, which means that only that test will be run. This is equivalent to using `it.only` in Mocha. + +## How tests are executed + +The `compilers-list.ts` module has a list of solc versions that can be used by these tests. By default, only the ones that have `latestSolcVersion: true` are run, but we have a [CI workflow](https://github.com/NomicFoundation/hardhat/actions/workflows/hardhat-network-tracing-all-solc-versions.yml) that runs once per day and executes these tests using all the available compilers. + +These compilers are grouped by minor version (that is, a group with all the 0.5.x compilers, a group all the 0.6.x compilers and so on) and each group is used to run the tests in the corresponding directory (`test-files/0_5`, `test-files/0_6`, and so on). + +The solidity files in each test directory are compiled (unless a cached compilation output exists) and then the `test.json` description is then executed. + +## The `HARDHAT_TESTS_SOLC_PATH` environment variable + +If this variable is set, the only compiler used will be the one that is available in that path. For example, if you want to test a nightly version, you would set the envvars `HARDHAT_TESTS_SOLC_PATH=/path/to/solc-nightly-0.8.21 HARDHAT_TESTS_SOLC_VERSION=0.8.21` and then run the tests. This would only run the test files under `test-files/0_8` and `test-files/version-independent`. diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/compilation.ts b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/compilation.ts index 69669748cc..929a769626 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/compilation.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/compilation.ts @@ -190,6 +190,10 @@ export async function downloadCompiler(solidityVersion: string) { if (!isCompilerDownloaded) { console.log("Downloading solc", solidityVersion); - await downloader.downloadCompiler(solidityVersion); + await downloader.downloadCompiler( + solidityVersion, + async () => {}, + async () => {} + ); } } diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/compilers-list.ts b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/compilers-list.ts index 51c1f701d7..ac4f193b25 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/compilers-list.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/compilers-list.ts @@ -1,3 +1,5 @@ +import semver from "semver"; + export interface SolidityCompilerOptimizer { viaIR: boolean; runs: number; @@ -154,12 +156,10 @@ export const solidityCompilers: SolidityCompiler[] = [ { solidityVersion: "0.8.16", compilerPath: "soljson-v0.8.16+commit.07a7930e.js", - latestSolcVersion: true, }, { solidityVersion: "0.8.17", compilerPath: "soljson-v0.8.17+commit.8df45f5f.js", - latestSolcVersion: true, }, { solidityVersion: "0.8.17", @@ -168,12 +168,10 @@ export const solidityCompilers: SolidityCompiler[] = [ runs: 200, viaIR: true, }, - latestSolcVersion: true, }, { solidityVersion: "0.8.18", compilerPath: "soljson-v0.8.18+commit.87f61d96.js", - latestSolcVersion: true, }, { solidityVersion: "0.8.18", @@ -182,6 +180,82 @@ export const solidityCompilers: SolidityCompiler[] = [ runs: 200, viaIR: true, }, + }, + { + solidityVersion: "0.8.19", + compilerPath: "soljson-v0.8.19+commit.7dd6d404.js", + }, + { + solidityVersion: "0.8.19", + compilerPath: "soljson-v0.8.19+commit.7dd6d404.js", + optimizer: { + runs: 200, + viaIR: true, + }, + }, + { + solidityVersion: "0.8.20", + compilerPath: "soljson-v0.8.20+commit.a1b79de6.js", + }, + { + solidityVersion: "0.8.20", + compilerPath: "soljson-v0.8.20+commit.a1b79de6.js", + optimizer: { + runs: 200, + viaIR: true, + }, + }, + { + solidityVersion: "0.8.21", + compilerPath: "soljson-v0.8.21+commit.d9974bed.js", + latestSolcVersion: true, + }, + { + solidityVersion: "0.8.21", + compilerPath: "soljson-v0.8.21+commit.d9974bed.js", + optimizer: { + runs: 200, + viaIR: true, + }, + latestSolcVersion: true, + }, + { + solidityVersion: "0.8.22", + compilerPath: "soljson-v0.8.22+commit.4fc1097e.js", + latestSolcVersion: true, + }, + { + solidityVersion: "0.8.22", + compilerPath: "soljson-v0.8.22+commit.4fc1097e.js", + optimizer: { + runs: 200, + viaIR: true, + }, + latestSolcVersion: true, + }, + { + solidityVersion: "0.8.23", + compilerPath: "soljson-v0.8.23+commit.f704f362.js", + latestSolcVersion: true, + }, + { + solidityVersion: "0.8.23", + compilerPath: "soljson-v0.8.23+commit.f704f362.js", + optimizer: { + runs: 200, + viaIR: true, + }, latestSolcVersion: true, }, ]; + +export const getLatestSupportedVersion = () => + solidityCompilers.map((sc) => sc.solidityVersion).sort(semver.compare)[ + solidityCompilers.length - 1 + ]; + +export const getNextUnsupportedVersion = () => + semver.inc(getLatestSupportedVersion(), "patch")!; + +export const getNextNextUnsupportedVersion = () => + semver.inc(getNextUnsupportedVersion(), "patch")!; diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/file-level-event/c.sol b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/file-level-event/c.sol new file mode 100644 index 0000000000..9e18919099 --- /dev/null +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/file-level-event/c.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: UNLICENSED + +// LogFileEvent is available ONLY from versions >= 0.8.22. +// Smoke test to check that 0.8.22 is setup correctly. + +pragma solidity ^0.8.22; + +// File-level event definition +event LogFileEvent(); + +contract C { + function f() public { + emit LogFileEvent(); + require(false, "error reason"); + } +} diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/file-level-event/test.json b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/file-level-event/test.json new file mode 100644 index 0000000000..3528d00a67 --- /dev/null +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/0_8/file-level-event/test.json @@ -0,0 +1,27 @@ +{ + "solc": "^0.8.22", + "transactions": [ + { + "file": "c.sol", + "contract": "C" + }, + { + "to": 0, + "function": "f", + "stackTrace": [ + { + "type": "REVERT_ERROR", + "sourceReference": { + "function": "f", + "contract": "C", + "file": "c.sol", + "line": 14, + "range": [164, 194] + }, + "message": "error reason", + "isInvalidOpcodeError": false + } + ] + } + ] +} diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/version-independent/pure-console-log/c.sol b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/version-independent/pure-console-log/c.sol new file mode 100644 index 0000000000..19d1b62c97 --- /dev/null +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/version-independent/pure-console-log/c.sol @@ -0,0 +1,15 @@ +pragma solidity >=0.5.1; + +import "./../../../../../../../console.sol"; + +contract C { + + constructor() public { + log(); + } + + function log() internal pure { + console.log("hello"); + } + +} diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/version-independent/pure-console-log/test.json b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/version-independent/pure-console-log/test.json new file mode 100644 index 0000000000..322caab111 --- /dev/null +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test-files/version-independent/pure-console-log/test.json @@ -0,0 +1,10 @@ +{ + "transactions": [ + { + "file": "c.sol", + "contract": "C", + "imports": ["/../../../../../../../console.sol"], + "consoleLogs": [["hello"]] + } + ] +} diff --git a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts index 3fd625deb3..82ca9ea66a 100644 --- a/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts +++ b/packages/hardhat-core/test/internal/hardhat-network/stack-traces/test.ts @@ -43,6 +43,7 @@ import { downloadCompiler, } from "./compilation"; import { + getLatestSupportedVersion, SolidityCompiler, SolidityCompilerOptimizer, solidityCompilers, @@ -824,10 +825,7 @@ describe("Stack traces", function () { describe("Solidity support", function () { it("check that the latest tested version is within the supported version range", async function () { - const latestSupportedVersion = solidityCompilers - .map((sc) => sc.solidityVersion) - .sort(semver.compare)[solidityCompilers.length - 1]; - + const latestSupportedVersion = getLatestSupportedVersion(); assert.isTrue( semver.satisfies( latestSupportedVersion, diff --git a/packages/hardhat-core/test/internal/solidity/compiler/downloader.ts b/packages/hardhat-core/test/internal/solidity/compiler/downloader.ts index 2c5fe68029..c1931c59f9 100644 --- a/packages/hardhat-core/test/internal/solidity/compiler/downloader.ts +++ b/packages/hardhat-core/test/internal/solidity/compiler/downloader.ts @@ -40,7 +40,11 @@ describe("Compiler downloader", function () { }); it("should return true when the compiler is already downloaded", async function () { - await wasmDownloader.downloadCompiler("0.4.12"); + await wasmDownloader.downloadCompiler( + "0.4.12", + async () => {}, + async () => {} + ); assert.isTrue(await wasmDownloader.isCompilerDownloaded("0.4.12")); }); }); @@ -55,7 +59,11 @@ describe("Compiler downloader", function () { }); it("should return true when the compiler is already downloaded", async function () { - await downloader.downloadCompiler("0.4.12"); + await downloader.downloadCompiler( + "0.4.12", + async () => {}, + async () => {} + ); assert.isTrue(await downloader.isCompilerDownloaded("0.4.12")); }); }); @@ -63,12 +71,22 @@ describe("Compiler downloader", function () { describe("downloadCompiler", function () { it("Should throw if the version is invalid or doesn't exist", async function () { await expectHardhatErrorAsync( - () => downloader.downloadCompiler("asd"), + () => + downloader.downloadCompiler( + "asd", + async () => {}, + async () => {} + ), ERRORS.SOLC.INVALID_VERSION ); await expectHardhatErrorAsync( - () => downloader.downloadCompiler("100.0.0"), + () => + downloader.downloadCompiler( + "100.0.0", + async () => {}, + async () => {} + ), ERRORS.SOLC.INVALID_VERSION ); }); @@ -84,7 +102,12 @@ describe("Compiler downloader", function () { ); await expectHardhatErrorAsync( - () => mockDownloader.downloadCompiler("0.4.12"), + () => + mockDownloader.downloadCompiler( + "0.4.12", + async () => {}, + async () => {} + ), ERRORS.SOLC.VERSION_LIST_DOWNLOAD_FAILED ); }); @@ -105,7 +128,12 @@ describe("Compiler downloader", function () { ); await expectHardhatErrorAsync( - () => mockDownloader.downloadCompiler("0.4.12"), + () => + mockDownloader.downloadCompiler( + "0.4.12", + async () => {}, + async () => {} + ), ERRORS.SOLC.DOWNLOAD_FAILED ); }); @@ -122,8 +150,16 @@ describe("Compiler downloader", function () { } ); - await mockDownloader.downloadCompiler("0.4.12"); - await mockDownloader.downloadCompiler("0.4.13"); + await mockDownloader.downloadCompiler( + "0.4.12", + async () => {}, + async () => {} + ); + await mockDownloader.downloadCompiler( + "0.4.13", + async () => {}, + async () => {} + ); assert.equal(downloads, 3); }); @@ -152,7 +188,12 @@ describe("Compiler downloader", function () { ); await expectHardhatErrorAsync( - () => mockDownloader.downloadCompiler("0.4.12"), + () => + mockDownloader.downloadCompiler( + "0.4.12", + async () => {}, + async () => {} + ), ERRORS.SOLC.INVALID_DOWNLOAD ); @@ -160,9 +201,99 @@ describe("Compiler downloader", function () { // it should work with the normal download now stopMocking = true; - await mockDownloader.downloadCompiler("0.4.12"); + await mockDownloader.downloadCompiler( + "0.4.12", + async () => {}, + async () => {} + ); assert.isTrue(await mockDownloader.isCompilerDownloaded("0.4.12")); }); + + it("should execute both the callback before downloading the compiler and the callback after downloading the compiler", async function () { + const VERSION = "0.4.12"; + + let value = 0; + + await downloader.downloadCompiler( + VERSION, + // downloadStartedCb + async () => { + // Check that the callback is executed before downloading the compiler + value++; + assert.isFalse(await downloader.isCompilerDownloaded(VERSION)); + }, + // downloadEndedCb + async () => { + // Check that the callback is executed after downloading the compiler + value++; + assert.isDefined(downloader.getCompiler(VERSION)); + } + ); + + // Check that both callbacks have been called + assert(value === 2); + }); + + describe("multiple downloads", function () { + it("should not download multiple times the same compiler", async function () { + // The intention is for the value to be 1 if the compiler is downloaded only once. + // Without a mutex, the value would be 10 because the compiler would be downloaded multiple times. + // However, the check is implemented to ensure that the value remains 1. + + const VERSION = "0.4.12"; + + let value = 0; + + const promises = []; + for (let i = 0; i < 10; i++) { + promises.push( + downloader.downloadCompiler( + VERSION, + // callback called before compiler download + async () => { + value++; + }, + // callback called after compiler download + async () => {} + ) + ); + } + + await Promise.all(promises); + + assert.isDefined(downloader.getCompiler(VERSION)); + assert(value === 1); + }); + + it("should download multiple different compilers", async function () { + const VERSIONS = ["0.5.1", "0.5.2", "0.5.3", "0.5.4", "0.5.5"]; + + let value = 0; + + const promises = []; + for (const version of VERSIONS) { + promises.push( + downloader.downloadCompiler( + version, + // callback called before compiler download + async () => { + value++; + }, + // callback called after compiler download + async () => {} + ) + ); + } + + await Promise.all(promises); + + for (const version of VERSIONS) { + assert.isDefined(downloader.getCompiler(version)); + } + + assert(value === VERSIONS.length); + }); + }); }); describe("getCompiler", function () { @@ -174,7 +305,11 @@ describe("Compiler downloader", function () { }); it("should throw when trying to get a compiler that's in the compiler list but hasn't been downloaded yet", async function () { - await downloader.downloadCompiler("0.4.12"); + await downloader.downloadCompiler( + "0.4.12", + async () => {}, + async () => {} + ); await expectHardhatErrorAsync( () => downloader.getCompiler("0.4.13"), @@ -223,15 +358,27 @@ describe("Compiler downloader", function () { } ); - await mockDownloader.downloadCompiler("0.4.12"); + await mockDownloader.downloadCompiler( + "0.4.12", + async () => {}, + async () => {} + ); assert.isUndefined(await mockDownloader.getCompiler("0.4.12")); }); it("should work for downloaded compilers", async function () { - await downloader.downloadCompiler("0.4.12"); + await downloader.downloadCompiler( + "0.4.12", + async () => {}, + async () => {} + ); assert.isDefined(downloader.getCompiler("0.4.12")); - await downloader.downloadCompiler("0.4.13"); + await downloader.downloadCompiler( + "0.4.13", + async () => {}, + async () => {} + ); assert.isDefined(downloader.getCompiler("0.4.13")); }); }); diff --git a/packages/hardhat-core/test/internal/solidity/compiler/index.ts b/packages/hardhat-core/test/internal/solidity/compiler/index.ts index 1ec9c392d5..93aaa48a58 100644 --- a/packages/hardhat-core/test/internal/solidity/compiler/index.ts +++ b/packages/hardhat-core/test/internal/solidity/compiler/index.ts @@ -33,7 +33,11 @@ describe("Compiler", () => { CompilerDownloader.getCompilerPlatform(), this.tmpDir ); - await downloader.downloadCompiler(solcVersion); + await downloader.downloadCompiler( + solcVersion, + async () => {}, + async () => {} + ); const compilerPathResult = await downloader.getCompiler(solcVersion); solcPath = compilerPathResult!.compilerPath; }); @@ -126,7 +130,11 @@ contract A {} beforeEach(async function () { downloader = new CompilerDownloader(CompilerPlatform.WASM, this.tmpDir); - await downloader.downloadCompiler(solcVersion); + await downloader.downloadCompiler( + solcVersion, + async () => {}, + async () => {} + ); const compilerPathResult = await downloader.getCompiler(solcVersion); solcPath = compilerPathResult!.compilerPath; }); diff --git a/packages/hardhat-core/test/internal/solidity/dependencyGraph.ts b/packages/hardhat-core/test/internal/solidity/dependencyGraph.ts index 6882ba8ec6..9c313dd3c1 100644 --- a/packages/hardhat-core/test/internal/solidity/dependencyGraph.ts +++ b/packages/hardhat-core/test/internal/solidity/dependencyGraph.ts @@ -133,6 +133,7 @@ describe("Dependency Graph", function () { resolver = new Resolver( projectRoot, new Parser(), + {}, (absolutePath: string) => fsExtra.readFile(absolutePath, { encoding: "utf8" }), async (sourceName: string) => sourceName @@ -279,6 +280,7 @@ describe("Dependency Graph", function () { localResolver = new Resolver( await getFixtureProjectPath(PROJECT), new Parser(), + {}, (absolutePath: string) => fsExtra.readFile(absolutePath, { encoding: "utf8" }), async (sourceName: string) => sourceName diff --git a/packages/hardhat-core/test/internal/solidity/helpers.ts b/packages/hardhat-core/test/internal/solidity/helpers.ts index 83051f1cf7..dfae75b516 100644 --- a/packages/hardhat-core/test/internal/solidity/helpers.ts +++ b/packages/hardhat-core/test/internal/solidity/helpers.ts @@ -75,6 +75,7 @@ export async function createMockData( const resolver = new Resolver( projectRoot, new Parser(), + {}, (absolutePath: string) => fsExtra.readFile(absolutePath, { encoding: "utf8" }), async (sourceName: string) => sourceName diff --git a/packages/hardhat-core/test/internal/solidity/resolver.ts b/packages/hardhat-core/test/internal/solidity/resolver.ts index 9ee432b245..756499762b 100644 --- a/packages/hardhat-core/test/internal/solidity/resolver.ts +++ b/packages/hardhat-core/test/internal/solidity/resolver.ts @@ -136,6 +136,7 @@ describe("Resolver", function () { resolver = new Resolver( projectPath, new Parser(), + {}, (absolutePath) => fsExtra.readFile(absolutePath, { encoding: "utf8" }), async (sourceName: string) => sourceName ); @@ -164,9 +165,11 @@ describe("Resolver", function () { }); it("Should be a library if it starts with node_modules", async function () { - await expectHardhatErrorAsync( - () => resolver.resolveSourceName("node_modules/lib/l.sol"), - ERRORS.RESOLVER.LIBRARY_NOT_INSTALLED + await assertResolvedFileFromPath( + resolver.resolveSourceName("node_modules/lib/l.sol"), + "node_modules/lib/l.sol", + path.join(projectPath, "node_modules/lib/l.sol"), + { name: "lib", version: "1.0.0" } ); }); @@ -594,3 +597,67 @@ describe("Resolver regression tests", function () { }); }); }); + +describe("TASK_COMPILE: the file to compile is trying to import a directory", function () { + describe("Import folder from module", () => { + useFixtureProject("compilation-import-folder-from-module"); + useEnvironment(); + + it("should throw an error because a directory is trying to be imported", async function () { + await expectHardhatErrorAsync( + async () => { + await this.env.run(TASK_COMPILE); + }, + ERRORS.RESOLVER.INVALID_IMPORT_OF_DIRECTORY, + "HH414: Invalid import some-lib from contracts/A.sol. Attempting to import a directory. Directories cannot be imported." + ); + }); + }); + + describe("Import folder from path", () => { + useFixtureProject("compilation-import-folder-from-path"); + useEnvironment(); + + it("should throw an error because a directory is trying to be imported", async function () { + await expectHardhatErrorAsync( + async () => { + await this.env.run(TASK_COMPILE); + }, + ERRORS.RESOLVER.INVALID_IMPORT_OF_DIRECTORY, + "HH414: Invalid import ../dir from contracts/A.sol. Attempting to import a directory. Directories cannot be imported." + ); + }); + }); +}); + +describe("TASK_COMPILE: the file to compile is trying to import a non existing file", function () { + describe("Trying to import file from module", () => { + useFixtureProject("compilation-import-non-existing-file-from-module"); + useEnvironment(); + + it("should throw an error because a directory is trying to be imported", async function () { + await expectHardhatErrorAsync( + async () => { + await this.env.run(TASK_COMPILE); + }, + ERRORS.RESOLVER.IMPORTED_FILE_NOT_FOUND, + "HH404: File some-lib/nonExistingFile.sol, imported from contracts/A.sol, not found." + ); + }); + }); + + describe("Trying to import file from path", () => { + useFixtureProject("compilation-import-non-existing-file-from-path"); + useEnvironment(); + + it("should throw an error because a directory is trying to be imported", async function () { + await expectHardhatErrorAsync( + async () => { + await this.env.run(TASK_COMPILE); + }, + ERRORS.RESOLVER.IMPORTED_FILE_NOT_FOUND, + "HH404: File ../nonExistingFile.sol, imported from contracts/A.sol, not found." + ); + }); + }); +}); diff --git a/packages/hardhat-core/test/types/config-env.ts b/packages/hardhat-core/test/types/config-env.ts new file mode 100644 index 0000000000..279fcadabc --- /dev/null +++ b/packages/hardhat-core/test/types/config-env.ts @@ -0,0 +1,20 @@ +import { + scope, + subtask, + task, +} from "../../src/internal/core/config/config-env"; + +// type helper +export type Equals = (() => T extends X ? 1 : 2) extends < + T +>() => T extends Y ? 1 : 2 + ? true + : false; + +type Scope = ReturnType; + +// Assert that the types of `task` and `scope("scope-name").task` are equal. +const _taskEqualsScopeTask: Equals = true; +// Same for `subtask`. +const _subtaskEqualsScopeSubtask: Equals = + true; diff --git a/packages/hardhat-core/test/utils/remappings.ts b/packages/hardhat-core/test/utils/remappings.ts new file mode 100644 index 0000000000..08f4ec5a22 --- /dev/null +++ b/packages/hardhat-core/test/utils/remappings.ts @@ -0,0 +1,29 @@ +import { expect } from "chai"; +import { applyRemappings } from "../../src/utils/remappings"; + +describe("Remappings utils", function () { + describe("applyRemappings", function () { + const remappings = { + foo: "lib/foo", + foobar: "lib/foo2", + }; + + it("applies a matching remapping", async () => { + expect(applyRemappings(remappings, "foo/bar.sol")).to.eq( + "lib/foo/bar.sol" + ); + }); + + it("only applies a matching remapping to prefixes", async () => { + expect(applyRemappings(remappings, "baz/foo/bar.sol")).to.eq( + "baz/foo/bar.sol" + ); + }); + + it("applies the longest matching prefix", async () => { + expect(applyRemappings(remappings, "foobar/bar.sol")).to.eq( + "lib/foo2/bar.sol" + ); + }); + }); +}); diff --git a/packages/hardhat-ethers/.eslintrc.js b/packages/hardhat-ethers/.eslintrc.js index 44ed8ed6d5..ab36ae95b3 100644 --- a/packages/hardhat-ethers/.eslintrc.js +++ b/packages/hardhat-ethers/.eslintrc.js @@ -1,7 +1,27 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { project: `${__dirname}/src/tsconfig.json`, sourceType: "module", }, + rules: { + "@typescript-eslint/no-non-null-assertion": "error", + }, + overrides: [ + { + files: ["src/internal/index.ts"], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [...slowImportsCommonIgnoredModules], + }, + ], + }, + }, + ], }; diff --git a/packages/hardhat-ethers/.gitignore b/packages/hardhat-ethers/.gitignore index 80110bdc12..8707b8ac84 100644 --- a/packages/hardhat-ethers/.gitignore +++ b/packages/hardhat-ethers/.gitignore @@ -21,10 +21,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -63,21 +59,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-ethers/.mocharc.json b/packages/hardhat-ethers/.mocharc.json index 775e35460d..4cc970a890 100644 --- a/packages/hardhat-ethers/.mocharc.json +++ b/packages/hardhat-ethers/.mocharc.json @@ -1,6 +1,6 @@ { "require": "ts-node/register/files", - "file": "../common/run-with-ganache", + "file": "../common/run-with-hardhat", "ignore": ["test/fixture-projects/**/*"], "timeout": 10000 } diff --git a/packages/hardhat-ethers/.prettierignore b/packages/hardhat-ethers/.prettierignore index c66ddcfc8a..00a39bd10f 100644 --- a/packages/hardhat-ethers/.prettierignore +++ b/packages/hardhat-ethers/.prettierignore @@ -9,4 +9,6 @@ /build-test /test/fixture-projects/**/artifacts /test/fixture-projects/**/cache +/test/fixture-projects/generated-fixtures CHANGELOG.md +!.eslintrc.js diff --git a/packages/hardhat-ethers/CHANGELOG.md b/packages/hardhat-ethers/CHANGELOG.md index ac99cf9573..567ab35407 100644 --- a/packages/hardhat-ethers/CHANGELOG.md +++ b/packages/hardhat-ethers/CHANGELOG.md @@ -1,5 +1,36 @@ # @nomiclabs/hardhat-ethers +## 3.0.5 + +### Patch Changes + +- ebe5a5fe3: Added support for passing bigints as block tags + +## 3.0.4 + +### Patch Changes + +- 487cd4a81: Reduced the load time of the plugin +- 84283d119: Fixed two issues related to `contract.on` (https://github.com/NomicFoundation/hardhat/issues/4098). The first one was about events with indexed arguments not being handled correctly. The second one was related to transactions that emitted the same event twice or more. + +## 3.0.3 + +### Patch Changes + +- a1e37a40b: Added support for listening for events with `contract.on` + +## 3.0.2 + +### Patch Changes + +- eb1ae069b: Fixed a problem when `waitForDeployment` was used in live networks. + +## 3.0.1 + +### Patch Changes + +- a9c159f96: The `helper.deployContract` now accepts transaction overrides + ## 2.2.3 ### Patch Changes diff --git a/packages/hardhat-ethers/LICENSE b/packages/hardhat-ethers/LICENSE index 3b8858c555..3b7e8c7eab 100644 --- a/packages/hardhat-ethers/LICENSE +++ b/packages/hardhat-ethers/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-ethers/README.md b/packages/hardhat-ethers/README.md index 47ee313acc..47f8f973fa 100644 --- a/packages/hardhat-ethers/README.md +++ b/packages/hardhat-ethers/README.md @@ -1,4 +1,4 @@ -[![npm](https://img.shields.io/npm/v/@nomiclabs/hardhat-ethers.svg)](https://www.npmjs.com/package/@nomiclabs/hardhat-ethers) [![hardhat](https://hardhat.org/buidler-plugin-badge.svg?1)](https://hardhat.org) +[![npm](https://img.shields.io/npm/v/@nomicfoundation/hardhat-ethers.svg)](https://www.npmjs.com/package/@nomicfoundation/hardhat-ethers) [![hardhat](https://hardhat.org/buidler-plugin-badge.svg?1)](https://hardhat.org) # hardhat-ethers @@ -11,19 +11,19 @@ This plugin brings to Hardhat the Ethereum library `ethers.js`, which allows you ## Installation ```bash -npm install --save-dev @nomiclabs/hardhat-ethers 'ethers@^5.0.0' +npm install --save-dev @nomicfoundation/hardhat-ethers ethers ``` And add the following statement to your `hardhat.config.js`: ```js -require("@nomiclabs/hardhat-ethers"); +require("@nomicfoundation/hardhat-ethers"); ``` Or, if you are using TypeScript, add this to your `hardhat.config.ts`: ```js -import "@nomiclabs/hardhat-ethers"; +import "@nomicfoundation/hardhat-ethers"; ``` ## Tasks @@ -34,11 +34,11 @@ This plugin creates no additional tasks. This plugins adds an `ethers` object to the Hardhat Runtime Environment. -This object has the [same API](https://docs.ethers.io/v5/single-page/) as `ethers.js`, with some extra Hardhat-specific functionality. +This object has the [same API](https://docs.ethers.org/v6/single-page/) as `ethers.js`, with some extra Hardhat-specific functionality. ### Provider object -A `provider` field is added to `ethers`, which is an [`ethers.providers.Provider`](https://docs.ethers.io/v5/single-page/#/v5/api/providers/provider/) automatically connected to the selected network. +A `provider` field is added to `ethers`, which is an [`ethers.Provider`](https://docs.ethers.org/v6/single-page/#api_providers__Provider) automatically connected to the selected network. ### Helpers @@ -79,9 +79,7 @@ function getContractFactoryFromArtifact(artifact: Artifact, factoryOptions: Fact function getContractAtFromArtifact(artifact: Artifact, address: string, signer?: ethers.Signer): Promise; ``` -The [`Contract`s](https://docs.ethers.io/v5/single-page/#/v5/api/contract/contract/) and [`ContractFactory`s](https://docs.ethers.io/v5/single-page/#/v5/api/contract/contract-factory/) returned by these helpers are connected to the first [signer](https://docs.ethers.io/v5/single-page/#/v5/api/signer/) returned by `getSigners` by default. - -If there is no signer available, `getContractAt` returns [read-only](https://docs.ethers.io/v5/single-page/#/v5/api/contract/contract/-%23-Contract--readonly) contracts. +The [`Contract`s](https://docs.ethers.org/v6/single-page/#api_contract__Contract) and [`ContractFactory`s](https://docs.ethers.org/v6/single-page/#api_contract__ContractFactory) returned by these helpers are connected to the first [signer](https://docs.ethers.org/v6/single-page/#api_providers__Signer) returned by `getSigners` by default. ## Usage @@ -90,16 +88,15 @@ There are no additional steps you need to take for this plugin to work. Install it and access ethers through the Hardhat Runtime Environment anywhere you need it (tasks, scripts, tests, etc). For example, in your `hardhat.config.js`: ```js -require("@nomiclabs/hardhat-ethers"); +require("@nomicfoundation/hardhat-ethers"); // task action function receives the Hardhat Runtime Environment as second argument task( "blockNumber", "Prints the current block number", async (_, { ethers }) => { - await ethers.provider.getBlockNumber().then((blockNumber) => { - console.log("Current block number: " + blockNumber); - }); + const blockNumber = await ethers.provider.getBlockNumber(); + console.log("Current block number: " + blockNumber); } ); @@ -133,7 +130,3 @@ To create a contract factory, all libraries must be linked. An error will be thr Ethers.js polls the network to check if some event was emitted (except when a `WebSocketProvider` is used; see below). This polling is done every 4 seconds. If you have a script or test that is not emitting an event, it's likely that the execution is finishing before the event is detected by the polling mechanism. If you are connecting to a Hardhat node using a `WebSocketProvider`, events should be emitted immediately. But keep in mind that you'll have to create this provider manually, since Hardhat only supports configuring networks via http. That is, you can't add a `localhost` network with a URL like `ws://127.0.0.1:8545`. - -### Gas transaction parameters in `hardhat.config` are not used - -When using this plugin, the `gas`, `gasPrice` and `gasMultiplier` parameters from your `hardhat.config` are not automatically applied to transactions. In order to provide such values to your transactions, specify them as [overrides](https://docs.ethers.io/v5/single-page/#/v5/api/contract/contract/-%23-contract-functionsSend) on the transaction itself. diff --git a/packages/hardhat-ethers/package.json b/packages/hardhat-ethers/package.json index 2e315938a1..1271880e60 100644 --- a/packages/hardhat-ethers/package.json +++ b/packages/hardhat-ethers/package.json @@ -1,10 +1,10 @@ { - "name": "@nomiclabs/hardhat-ethers", - "version": "2.2.3", + "name": "@nomicfoundation/hardhat-ethers", + "version": "3.0.5", "description": "Hardhat plugin for ethers", - "homepage": "https://github.com/nomiclabs/hardhat/tree/main/packages/hardhat-ethers", - "repository": "github:nomiclabs/hardhat", - "author": "Nomic Labs LLC", + "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-ethers", + "repository": "github:nomicfoundation/hardhat", + "author": "Nomic Foundation", "license": "MIT", "main": "internal/index.js", "types": "internal/index.d.ts", @@ -16,13 +16,14 @@ "ethers.js" ], "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", - "test": "mocha --recursive \"test/**/*.ts\" --exit", + "pretest": "cd ../.. && pnpm build", + "test": "mocha --recursive \"test/**/*.ts\"", "build": "tsc --build .", - "prepublishOnly": "yarn build", + "prepublishOnly": "pnpm build", "clean": "rimraf dist internal types *.{d.ts,js}{,.map} build-test tsconfig.tsbuildinfo" }, "files": [ @@ -37,30 +38,41 @@ "LICENSE", "README.md" ], + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, "devDependencies": { + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", "@types/chai": "^4.2.0", "@types/chai-as-promised": "^7.1.3", + "@types/debug": "^4.1.4", + "@types/lodash.isequal": "^4.5.6", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@types/node": "^16.0.0", + "@types/sinon": "^9.0.8", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", - "eslint": "^7.29.0", + "chalk": "^2.4.2", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", - "ethers": "^5.0.0", - "hardhat": "^2.0.0", + "ethers": "^6.1.0", + "hardhat": "workspace:^2.0.0", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", + "sinon": "^9.0.0", "ts-node": "^10.8.0", - "typescript": "~4.7.4" + "typescript": "~5.0.0" }, "peerDependencies": { - "ethers": "^5.0.0", + "ethers": "^6.1.0", "hardhat": "^2.0.0" } } diff --git a/packages/hardhat-ethers/src/dist/src/signer-with-address.ts b/packages/hardhat-ethers/src/dist/src/signer-with-address.ts index 51cc2d2bfc..890a7a60b1 100644 --- a/packages/hardhat-ethers/src/dist/src/signer-with-address.ts +++ b/packages/hardhat-ethers/src/dist/src/signer-with-address.ts @@ -1 +1 @@ -export { SignerWithAddress } from "../../signers"; +export { HardhatEthersSigner as SignerWithAddress } from "../../signers"; diff --git a/packages/hardhat-ethers/src/internal/errors.ts b/packages/hardhat-ethers/src/internal/errors.ts new file mode 100644 index 0000000000..6509d9806a --- /dev/null +++ b/packages/hardhat-ethers/src/internal/errors.ts @@ -0,0 +1,35 @@ +import { NomicLabsHardhatPluginError } from "hardhat/plugins"; + +export class HardhatEthersError extends NomicLabsHardhatPluginError { + constructor(message: string, parent?: Error) { + super("@nomicfoundation/hardhat-ethers", message, parent); + } +} + +export class NotImplementedError extends HardhatEthersError { + constructor(method: string) { + super(`Method '${method}' is not implemented`); + } +} + +export class UnsupportedEventError extends HardhatEthersError { + constructor(event: any) { + super(`Event '${event}' is not supported`); + } +} + +export class AccountIndexOutOfRange extends HardhatEthersError { + constructor(accountIndex: number, accountsLength: number) { + super( + `Tried to get account with index ${accountIndex} but there are ${accountsLength} accounts` + ); + } +} + +export class BroadcastedTxDifferentHash extends HardhatEthersError { + constructor(txHash: string, broadcastedTxHash: string) { + super( + `Expected broadcasted transaction to have hash '${txHash}', but got '${broadcastedTxHash}'` + ); + } +} diff --git a/packages/hardhat-ethers/src/internal/ethers-utils.ts b/packages/hardhat-ethers/src/internal/ethers-utils.ts new file mode 100644 index 0000000000..68cd19c3f9 --- /dev/null +++ b/packages/hardhat-ethers/src/internal/ethers-utils.ts @@ -0,0 +1,424 @@ +// these helpers functions were copied verbatim from ethers + +import type { + TransactionRequest, + PreparedTransactionRequest, + BlockParams, + TransactionResponseParams, + TransactionReceiptParams, + LogParams, + JsonRpcTransactionRequest, +} from "ethers"; + +import { + accessListify, + assert, + assertArgument, + getAddress, + getBigInt, + getCreateAddress, + getNumber, + hexlify, + isHexString, + Signature, + toQuantity, +} from "ethers"; +import { HardhatEthersError } from "./errors"; + +export type FormatFunc = (value: any) => any; + +export function copyRequest( + req: TransactionRequest +): PreparedTransactionRequest { + const result: any = {}; + + // These could be addresses, ENS names or Addressables + if (req.to !== null && req.to !== undefined) { + result.to = req.to; + } + if (req.from !== null && req.from !== undefined) { + result.from = req.from; + } + + if (req.data !== null && req.data !== undefined) { + result.data = hexlify(req.data); + } + + const bigIntKeys = + "chainId,gasLimit,gasPrice,maxFeePerGas,maxPriorityFeePerGas,value".split( + /,/ + ); + for (const key of bigIntKeys) { + if ( + !(key in req) || + (req as any)[key] === null || + (req as any)[key] === undefined + ) { + continue; + } + result[key] = getBigInt((req as any)[key], `request.${key}`); + } + + const numberKeys = "type,nonce".split(/,/); + for (const key of numberKeys) { + if ( + !(key in req) || + (req as any)[key] === null || + (req as any)[key] === undefined + ) { + continue; + } + result[key] = getNumber((req as any)[key], `request.${key}`); + } + + if (req.accessList !== null && req.accessList !== undefined) { + result.accessList = accessListify(req.accessList); + } + + if ("blockTag" in req) { + result.blockTag = req.blockTag; + } + + if ("enableCcipRead" in req) { + result.enableCcipReadEnabled = Boolean(req.enableCcipRead); + } + + if ("customData" in req) { + result.customData = req.customData; + } + + return result; +} + +export async function resolveProperties(value: { + [P in keyof T]: T[P] | Promise; +}): Promise { + const keys = Object.keys(value); + const results = await Promise.all( + keys.map((k) => Promise.resolve(value[k as keyof T])) + ); + return results.reduce((accum: any, v, index) => { + accum[keys[index]] = v; + return accum; + }, {} as { [P in keyof T]: T[P] }); +} + +export function formatBlock(value: any): BlockParams { + const result = _formatBlock(value); + result.transactions = value.transactions.map( + (tx: string | TransactionResponseParams) => { + if (typeof tx === "string") { + return tx; + } + return formatTransactionResponse(tx); + } + ); + return result; +} + +const _formatBlock = object({ + hash: allowNull(formatHash), + parentHash: formatHash, + number: getNumber, + + timestamp: getNumber, + nonce: allowNull(formatData), + difficulty: getBigInt, + + gasLimit: getBigInt, + gasUsed: getBigInt, + + miner: allowNull(getAddress), + extraData: formatData, + + baseFeePerGas: allowNull(getBigInt), +}); + +function object( + format: Record, + altNames?: Record +): FormatFunc { + return (value: any) => { + const result: any = {}; + // eslint-disable-next-line guard-for-in + for (const key in format) { + let srcKey = key; + if (altNames !== undefined && key in altNames && !(srcKey in value)) { + for (const altKey of altNames[key]) { + if (altKey in value) { + srcKey = altKey; + break; + } + } + } + + try { + const nv = format[key](value[srcKey]); + if (nv !== undefined) { + result[key] = nv; + } + } catch (error) { + const message = error instanceof Error ? error.message : "not-an-error"; + assert( + false, + `invalid value for value.${key} (${message})`, + "BAD_DATA", + { value } + ); + } + } + return result; + }; +} + +function allowNull(format: FormatFunc, nullValue?: any): FormatFunc { + return function (value: any) { + // eslint-disable-next-line eqeqeq + if (value === null || value === undefined) { + return nullValue; + } + return format(value); + }; +} + +function formatHash(value: any): string { + assertArgument(isHexString(value, 32), "invalid hash", "value", value); + return value; +} + +function formatData(value: string): string { + assertArgument(isHexString(value, true), "invalid data", "value", value); + return value; +} + +export function formatTransactionResponse( + value: any +): TransactionResponseParams { + // Some clients (TestRPC) do strange things like return 0x0 for the + // 0 address; correct this to be a real address + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + if (value.to && getBigInt(value.to) === 0n) { + value.to = "0x0000000000000000000000000000000000000000"; + } + + const result = object( + { + hash: formatHash, + + type: (v: any) => { + // eslint-disable-next-line eqeqeq + if (v === "0x" || v == null) { + return 0; + } + return getNumber(v); + }, + accessList: allowNull(accessListify, null), + + blockHash: allowNull(formatHash, null), + blockNumber: allowNull(getNumber, null), + transactionIndex: allowNull(getNumber, null), + + from: getAddress, + + // either (gasPrice) or (maxPriorityFeePerGas + maxFeePerGas) must be set + gasPrice: allowNull(getBigInt), + maxPriorityFeePerGas: allowNull(getBigInt), + maxFeePerGas: allowNull(getBigInt), + + gasLimit: getBigInt, + to: allowNull(getAddress, null), + value: getBigInt, + nonce: getNumber, + data: formatData, + + creates: allowNull(getAddress, null), + + chainId: allowNull(getBigInt, null), + }, + { + data: ["input"], + gasLimit: ["gas"], + } + )(value); + + // If to and creates are empty, populate the creates from the value + // eslint-disable-next-line eqeqeq + if (result.to == null && result.creates == null) { + result.creates = getCreateAddress(result); + } + + // @TODO: Check fee data + + // Add an access list to supported transaction types + // eslint-disable-next-line eqeqeq + if ((value.type === 1 || value.type === 2) && value.accessList == null) { + result.accessList = []; + } + + // Compute the signature + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + if (value.signature) { + result.signature = Signature.from(value.signature); + } else { + result.signature = Signature.from(value); + } + + // Some backends omit ChainId on legacy transactions, but we can compute it + // eslint-disable-next-line eqeqeq + if (result.chainId == null) { + const chainId = result.signature.legacyChainId; + // eslint-disable-next-line eqeqeq + if (chainId != null) { + result.chainId = chainId; + } + } + + // 0x0000... should actually be null + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + if (result.blockHash && getBigInt(result.blockHash) === 0n) { + result.blockHash = null; + } + + return result; +} + +function arrayOf(format: FormatFunc): FormatFunc { + return (array: any) => { + if (!Array.isArray(array)) { + throw new HardhatEthersError("not an array"); + } + return array.map((i) => format(i)); + }; +} + +const _formatReceiptLog = object( + { + transactionIndex: getNumber, + blockNumber: getNumber, + transactionHash: formatHash, + address: getAddress, + topics: arrayOf(formatHash), + data: formatData, + index: getNumber, + blockHash: formatHash, + }, + { + index: ["logIndex"], + } +); + +const _formatTransactionReceipt = object( + { + to: allowNull(getAddress, null), + from: allowNull(getAddress, null), + contractAddress: allowNull(getAddress, null), + // should be allowNull(hash), but broken-EIP-658 support is handled in receipt + index: getNumber, + root: allowNull(hexlify), + gasUsed: getBigInt, + logsBloom: allowNull(formatData), + blockHash: formatHash, + hash: formatHash, + logs: arrayOf(formatReceiptLog), + blockNumber: getNumber, + cumulativeGasUsed: getBigInt, + effectiveGasPrice: allowNull(getBigInt), + status: allowNull(getNumber), + type: allowNull(getNumber, 0), + }, + { + effectiveGasPrice: ["gasPrice"], + hash: ["transactionHash"], + index: ["transactionIndex"], + } +); + +export function formatTransactionReceipt(value: any): TransactionReceiptParams { + return _formatTransactionReceipt(value); +} + +export function formatReceiptLog(value: any): LogParams { + return _formatReceiptLog(value); +} + +function formatBoolean(value: any): boolean { + switch (value) { + case true: + case "true": + return true; + case false: + case "false": + return false; + } + assertArgument( + false, + `invalid boolean; ${JSON.stringify(value)}`, + "value", + value + ); +} + +const _formatLog = object( + { + address: getAddress, + blockHash: formatHash, + blockNumber: getNumber, + data: formatData, + index: getNumber, + removed: formatBoolean, + topics: arrayOf(formatHash), + transactionHash: formatHash, + transactionIndex: getNumber, + }, + { + index: ["logIndex"], + } +); + +export function formatLog(value: any): LogParams { + return _formatLog(value); +} + +export function getRpcTransaction( + tx: TransactionRequest +): JsonRpcTransactionRequest { + const result: JsonRpcTransactionRequest = {}; + + // JSON-RPC now requires numeric values to be "quantity" values + [ + "chainId", + "gasLimit", + "gasPrice", + "type", + "maxFeePerGas", + "maxPriorityFeePerGas", + "nonce", + "value", + ].forEach((key) => { + if ((tx as any)[key] === null || (tx as any)[key] === undefined) { + return; + } + let dstKey = key; + if (key === "gasLimit") { + dstKey = "gas"; + } + (result as any)[dstKey] = toQuantity( + getBigInt((tx as any)[key], `tx.${key}`) + ); + }); + + // Make sure addresses and data are lowercase + ["from", "to", "data"].forEach((key) => { + if ((tx as any)[key] === null || (tx as any)[key] === undefined) { + return; + } + (result as any)[key] = hexlify((tx as any)[key]); + }); + + // Normalize the access list object + if (tx.accessList !== null && tx.accessList !== undefined) { + result.accessList = accessListify(tx.accessList); + } + + return result; +} diff --git a/packages/hardhat-ethers/src/internal/hardhat-ethers-provider.ts b/packages/hardhat-ethers/src/internal/hardhat-ethers-provider.ts new file mode 100644 index 0000000000..19d5a31fe3 --- /dev/null +++ b/packages/hardhat-ethers/src/internal/hardhat-ethers-provider.ts @@ -0,0 +1,1232 @@ +import type { + AddressLike, + BlockTag, + TransactionRequest, + Filter, + FilterByBlockHash, + Listener, + ProviderEvent, + PerformActionTransaction, + TransactionResponseParams, + BlockParams, + TransactionReceiptParams, + LogParams, + PerformActionFilter, + EventFilter, +} from "ethers"; +import type LodashIsEqualT from "lodash.isequal"; + +import debug from "debug"; +import { + Block, + FeeData, + Log, + Network as EthersNetwork, + Transaction, + TransactionReceipt, + TransactionResponse, + ethers, + getBigInt, + isHexString, + resolveAddress, + toQuantity, +} from "ethers"; +import { EthereumProvider } from "hardhat/types"; + +import { HardhatEthersSigner } from "../signers"; +import { + copyRequest, + formatBlock, + formatLog, + formatTransactionReceipt, + formatTransactionResponse, + getRpcTransaction, +} from "./ethers-utils"; +import { + AccountIndexOutOfRange, + BroadcastedTxDifferentHash, + HardhatEthersError, + UnsupportedEventError, + NotImplementedError, +} from "./errors"; + +const log = debug("hardhat:hardhat-ethers:provider"); + +interface ListenerItem { + listener: Listener; + once: boolean; +} + +interface EventListenerItem { + event: EventFilter; + // map from the given listener to the block listener registered for that listener + listenersMap: Map; +} + +// this type has a more explicit and type-safe list +// of the events that we support +type HardhatEthersProviderEvent = + | { + kind: "block"; + } + | { + kind: "transactionHash"; + txHash: string; + } + | { + kind: "event"; + eventFilter: EventFilter; + }; + +export class HardhatEthersProvider implements ethers.Provider { + private _isHardhatNetworkCached: boolean | undefined; + + // event-emitter related fields + private _latestBlockNumberPolled: number | undefined; + private _blockListeners: ListenerItem[] = []; + private _transactionHashListeners: Map = new Map(); + private _eventListeners: EventListenerItem[] = []; + + private _transactionHashPollingInterval: NodeJS.Timeout | undefined; + private _blockPollingInterval: NodeJS.Timeout | undefined; + + constructor( + private readonly _hardhatProvider: EthereumProvider, + private readonly _networkName: string + ) {} + + public get provider(): this { + return this; + } + + public destroy() {} + + public async send(method: string, params?: any[]): Promise { + return this._hardhatProvider.send(method, params); + } + + public async getSigner( + address?: number | string + ): Promise { + if (address === null || address === undefined) { + address = 0; + } + + const accountsPromise = this.send("eth_accounts", []); + + // Account index + if (typeof address === "number") { + const accounts: string[] = await accountsPromise; + if (address >= accounts.length) { + throw new AccountIndexOutOfRange(address, accounts.length); + } + return HardhatEthersSigner.create(this, accounts[address]); + } + + if (typeof address === "string") { + return HardhatEthersSigner.create(this, address); + } + + throw new HardhatEthersError(`Couldn't get account ${address as any}`); + } + + public async getBlockNumber(): Promise { + const blockNumber = await this._hardhatProvider.send("eth_blockNumber"); + + return Number(blockNumber); + } + + public async getNetwork(): Promise { + const chainId = await this._hardhatProvider.send("eth_chainId"); + return new EthersNetwork(this._networkName, Number(chainId)); + } + + public async getFeeData(): Promise { + let gasPrice: bigint | undefined; + let maxFeePerGas: bigint | undefined; + let maxPriorityFeePerGas: bigint | undefined; + + try { + gasPrice = BigInt(await this._hardhatProvider.send("eth_gasPrice")); + } catch {} + + const latestBlock = await this.getBlock("latest"); + const baseFeePerGas = latestBlock?.baseFeePerGas; + if (baseFeePerGas !== undefined && baseFeePerGas !== null) { + maxPriorityFeePerGas = 1_000_000_000n; + maxFeePerGas = 2n * baseFeePerGas + maxPriorityFeePerGas; + } + + return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas); + } + + public async getBalance( + address: AddressLike, + blockTag?: BlockTag | undefined + ): Promise { + const resolvedAddress = await this._getAddress(address); + const resolvedBlockTag = await this._getBlockTag(blockTag); + const rpcBlockTag = this._getRpcBlockTag(resolvedBlockTag); + + const balance = await this._hardhatProvider.send("eth_getBalance", [ + resolvedAddress, + rpcBlockTag, + ]); + + return BigInt(balance); + } + + public async getTransactionCount( + address: AddressLike, + blockTag?: BlockTag | undefined + ): Promise { + const resolvedAddress = await this._getAddress(address); + const resolvedBlockTag = await this._getBlockTag(blockTag); + const rpcBlockTag = this._getRpcBlockTag(resolvedBlockTag); + + const transactionCount = await this._hardhatProvider.send( + "eth_getTransactionCount", + [resolvedAddress, rpcBlockTag] + ); + + return Number(transactionCount); + } + + public async getCode( + address: AddressLike, + blockTag?: BlockTag | undefined + ): Promise { + const resolvedAddress = await this._getAddress(address); + const resolvedBlockTag = await this._getBlockTag(blockTag); + const rpcBlockTag = this._getRpcBlockTag(resolvedBlockTag); + + return this._hardhatProvider.send("eth_getCode", [ + resolvedAddress, + rpcBlockTag, + ]); + } + + public async getStorage( + address: AddressLike, + position: ethers.BigNumberish, + blockTag?: BlockTag | undefined + ): Promise { + const resolvedAddress = await this._getAddress(address); + const resolvedPosition = getBigInt(position, "position"); + const resolvedBlockTag = await this._getBlockTag(blockTag); + const rpcBlockTag = this._getRpcBlockTag(resolvedBlockTag); + + return this._hardhatProvider.send("eth_getStorageAt", [ + resolvedAddress, + `0x${resolvedPosition.toString(16)}`, + rpcBlockTag, + ]); + } + + public async estimateGas(tx: TransactionRequest): Promise { + const blockTag = + tx.blockTag === undefined ? "pending" : this._getBlockTag(tx.blockTag); + const [resolvedTx, resolvedBlockTag] = await Promise.all([ + this._getTransactionRequest(tx), + blockTag, + ]); + + const rpcTransaction = getRpcTransaction(resolvedTx); + const rpcBlockTag = this._getRpcBlockTag(resolvedBlockTag); + + const gasEstimation = await this._hardhatProvider.send("eth_estimateGas", [ + rpcTransaction, + rpcBlockTag, + ]); + + return BigInt(gasEstimation); + } + + public async call(tx: TransactionRequest): Promise { + const [resolvedTx, resolvedBlockTag] = await Promise.all([ + this._getTransactionRequest(tx), + this._getBlockTag(tx.blockTag), + ]); + const rpcTransaction = getRpcTransaction(resolvedTx); + const rpcBlockTag = this._getRpcBlockTag(resolvedBlockTag); + + return this._hardhatProvider.send("eth_call", [ + rpcTransaction, + rpcBlockTag, + ]); + } + + public async broadcastTransaction( + signedTx: string + ): Promise { + const hashPromise = this._hardhatProvider.send("eth_sendRawTransaction", [ + signedTx, + ]); + + const [hash, blockNumber] = await Promise.all([ + hashPromise, + this.getBlockNumber(), + ]); + + const tx = Transaction.from(signedTx); + if (tx.hash === null) { + throw new HardhatEthersError( + "Assertion error: hash of signed tx shouldn't be null" + ); + } + + if (tx.hash !== hash) { + throw new BroadcastedTxDifferentHash(tx.hash, hash); + } + + return this._wrapTransactionResponse(tx as any).replaceableTransaction( + blockNumber + ); + } + + public async getBlock( + blockHashOrBlockTag: BlockTag, + prefetchTxs?: boolean | undefined + ): Promise { + const block = await this._getBlock( + blockHashOrBlockTag, + prefetchTxs ?? false + ); + + // eslint-disable-next-line eqeqeq + if (block == null) { + return null; + } + + return this._wrapBlock(block); + } + + public async getTransaction( + hash: string + ): Promise { + const transaction = await this._hardhatProvider.send( + "eth_getTransactionByHash", + [hash] + ); + + // eslint-disable-next-line eqeqeq + if (transaction == null) { + return null; + } + + return this._wrapTransactionResponse( + formatTransactionResponse(transaction) + ); + } + + public async getTransactionReceipt( + hash: string + ): Promise { + const receipt = await this._hardhatProvider.send( + "eth_getTransactionReceipt", + [hash] + ); + + // eslint-disable-next-line eqeqeq + if (receipt == null) { + return null; + } + + return this._wrapTransactionReceipt(receipt); + } + + public async getTransactionResult(_hash: string): Promise { + throw new NotImplementedError("HardhatEthersProvider.getTransactionResult"); + } + + public async getLogs( + filter: Filter | FilterByBlockHash + ): Promise { + const resolvedFilter = await this._getFilter(filter); + + const logs = await this._hardhatProvider.send("eth_getLogs", [ + resolvedFilter, + ]); + + return logs.map((l: any) => this._wrapLog(formatLog(l))); + } + + public async resolveName(_ensName: string): Promise { + throw new NotImplementedError("HardhatEthersProvider.resolveName"); + } + + public async lookupAddress(_address: string): Promise { + throw new NotImplementedError("HardhatEthersProvider.lookupAddress"); + } + + public async waitForTransaction( + _hash: string, + _confirms?: number | undefined, + _timeout?: number | undefined + ): Promise { + throw new NotImplementedError("HardhatEthersProvider.waitForTransaction"); + } + + public async waitForBlock( + _blockTag?: BlockTag | undefined + ): Promise { + throw new NotImplementedError("HardhatEthersProvider.waitForBlock"); + } + + // -------------------------------------- // + // event-emitter related public functions // + // -------------------------------------- // + + public async on( + ethersEvent: ProviderEvent, + listener: Listener + ): Promise { + const event = ethersToHardhatEvent(ethersEvent); + + if (event.kind === "block") { + await this._onBlock(listener, { once: false }); + } else if (event.kind === "transactionHash") { + await this._onTransactionHash(event.txHash, listener, { once: false }); + } else if (event.kind === "event") { + const { eventFilter } = event; + const blockListener = this._getBlockListenerForEvent( + eventFilter, + listener + ); + + this._addEventListener(eventFilter, listener, blockListener); + + await this.on("block", blockListener); + } else { + const _exhaustiveCheck: never = event; + } + + return this; + } + + public async once( + ethersEvent: ProviderEvent, + listener: Listener + ): Promise { + const event = ethersToHardhatEvent(ethersEvent); + + if (event.kind === "block") { + await this._onBlock(listener, { once: true }); + } else if (event.kind === "transactionHash") { + await this._onTransactionHash(event.txHash, listener, { once: true }); + } else if (event.kind === "event") { + const { eventFilter } = event; + const blockListener = this._getBlockListenerForEvent( + eventFilter, + listener + ); + + this._addEventListener(eventFilter, listener, blockListener); + + await this.once("block", blockListener); + } else { + const _exhaustiveCheck: never = event; + } + + return this; + } + + public async emit( + ethersEvent: ProviderEvent, + ...args: any[] + ): Promise { + const event = ethersToHardhatEvent(ethersEvent); + + if (event.kind === "block") { + return this._emitBlock(...args); + } else if (event.kind === "transactionHash") { + return this._emitTransactionHash(event.txHash, ...args); + } else if (event.kind === "event") { + throw new NotImplementedError("emit(event)"); + } else { + const _exhaustiveCheck: never = event; + return _exhaustiveCheck; + } + } + + public async listenerCount( + event?: ProviderEvent | undefined + ): Promise { + const listeners = await this.listeners(event); + + return listeners.length; + } + + public async listeners( + ethersEvent?: ProviderEvent | undefined + ): Promise { + if (ethersEvent === undefined) { + throw new NotImplementedError("listeners()"); + } + + const event = ethersToHardhatEvent(ethersEvent); + + if (event.kind === "block") { + return this._blockListeners.map(({ listener }) => listener); + } else if (event.kind === "transactionHash") { + return ( + this._transactionHashListeners + .get(event.txHash) + ?.map(({ listener }) => listener) ?? [] + ); + } else if (event.kind === "event") { + const isEqual = require("lodash.isequal") as typeof LodashIsEqualT; + + const eventListener = this._eventListeners.find((item) => + isEqual(item.event, event) + ); + if (eventListener === undefined) { + return []; + } + return [...eventListener.listenersMap.keys()]; + } else { + const _exhaustiveCheck: never = event; + return _exhaustiveCheck; + } + } + + public async off( + ethersEvent: ProviderEvent, + listener?: Listener | undefined + ): Promise { + const event = ethersToHardhatEvent(ethersEvent); + + if (event.kind === "block") { + this._clearBlockListeners(listener); + } else if (event.kind === "transactionHash") { + this._clearTransactionHashListeners(event.txHash, listener); + } else if (event.kind === "event") { + const { eventFilter } = event; + if (listener === undefined) { + await this._clearEventListeners(eventFilter); + } else { + await this._removeEventListener(eventFilter, listener); + } + } else { + const _exhaustiveCheck: never = event; + } + + return this; + } + + public async removeAllListeners( + ethersEvent?: ProviderEvent | undefined + ): Promise { + const event = + ethersEvent !== undefined ? ethersToHardhatEvent(ethersEvent) : undefined; + + if (event === undefined || event.kind === "block") { + this._clearBlockListeners(); + } + if (event === undefined || event.kind === "transactionHash") { + this._clearTransactionHashListeners(event?.txHash); + } + if (event === undefined || event.kind === "event") { + await this._clearEventListeners(event?.eventFilter); + } + + if ( + event !== undefined && + event.kind !== "block" && + event.kind !== "transactionHash" && + event.kind !== "event" + ) { + // this check is only to remeber to add a proper if block + // in this method's implementation if we add support for a + // new kind of event + const _exhaustiveCheck: never = event; + } + + return this; + } + + public async addListener( + event: ProviderEvent, + listener: Listener + ): Promise { + return this.on(event, listener); + } + + public async removeListener( + event: ProviderEvent, + listener: Listener + ): Promise { + return this.off(event, listener); + } + + public toJSON() { + return ""; + } + + private _getAddress(address: AddressLike): string | Promise { + return resolveAddress(address, this); + } + + private _getBlockTag(blockTag?: BlockTag): string | Promise { + // eslint-disable-next-line eqeqeq + if (blockTag == null) { + return "latest"; + } + + switch (blockTag) { + case "earliest": + return "0x0"; + case "latest": + case "pending": + case "safe": + case "finalized": + return blockTag; + } + + if (isHexString(blockTag)) { + if (isHexString(blockTag, 32)) { + return blockTag; + } + return toQuantity(blockTag); + } + + if (typeof blockTag === "number") { + if (blockTag >= 0) { + return toQuantity(blockTag); + } + return this.getBlockNumber().then((b) => toQuantity(b + blockTag)); + } + + if (typeof blockTag === "bigint") { + if (blockTag >= 0n) { + return toQuantity(blockTag); + } + return this.getBlockNumber().then((b) => + toQuantity(b + Number(blockTag)) + ); + } + + throw new HardhatEthersError(`Invalid blockTag: ${blockTag}`); + } + + private _getTransactionRequest( + _request: TransactionRequest + ): PerformActionTransaction | Promise { + const request = copyRequest(_request) as PerformActionTransaction; + + const promises: Array> = []; + ["to", "from"].forEach((key) => { + if ( + (request as any)[key] === null || + (request as any)[key] === undefined + ) { + return; + } + + const addr = resolveAddress((request as any)[key]); + if (isPromise(addr)) { + promises.push( + (async function () { + (request as any)[key] = await addr; + })() + ); + } else { + (request as any)[key] = addr; + } + }); + + if (request.blockTag !== null && request.blockTag !== undefined) { + const blockTag = this._getBlockTag(request.blockTag); + if (isPromise(blockTag)) { + promises.push( + (async function () { + request.blockTag = await blockTag; + })() + ); + } else { + request.blockTag = blockTag; + } + } + + if (promises.length > 0) { + return (async function () { + await Promise.all(promises); + return request; + })(); + } + + return request; + } + + private _wrapTransactionResponse( + tx: TransactionResponseParams + ): TransactionResponse { + return new TransactionResponse(tx, this); + } + + private async _getBlock( + block: BlockTag | string, + includeTransactions: boolean + ): Promise { + if (isHexString(block, 32)) { + return this._hardhatProvider.send("eth_getBlockByHash", [ + block, + includeTransactions, + ]); + } + + let blockTag = this._getBlockTag(block); + if (typeof blockTag !== "string") { + blockTag = await blockTag; + } + + return this._hardhatProvider.send("eth_getBlockByNumber", [ + blockTag, + includeTransactions, + ]); + } + + private _wrapBlock(value: BlockParams): Block { + return new Block(formatBlock(value), this); + } + + private _wrapTransactionReceipt( + value: TransactionReceiptParams + ): TransactionReceipt { + return new TransactionReceipt(formatTransactionReceipt(value), this); + } + + private _getFilter( + filter: Filter | FilterByBlockHash + ): PerformActionFilter | Promise { + // Create a canonical representation of the topics + const topics = (filter.topics ?? []).map((topic) => { + // eslint-disable-next-line eqeqeq + if (topic == null) { + return null; + } + if (Array.isArray(topic)) { + return concisify(topic.map((t) => t.toLowerCase())); + } + return topic.toLowerCase(); + }); + + const blockHash = "blockHash" in filter ? filter.blockHash : undefined; + + const resolve = ( + _address: string[], + fromBlock?: string, + toBlock?: string + ) => { + let resolvedAddress: undefined | string | string[]; + switch (_address.length) { + case 0: + break; + case 1: + resolvedAddress = _address[0]; + break; + default: + _address.sort(); + resolvedAddress = _address; + } + + if (blockHash !== undefined) { + // eslint-disable-next-line eqeqeq + if (fromBlock != null || toBlock != null) { + throw new HardhatEthersError("invalid filter"); + } + } + + const resolvedFilter: any = {}; + if (resolvedAddress !== undefined) { + resolvedFilter.address = resolvedAddress; + } + if (topics.length > 0) { + resolvedFilter.topics = topics; + } + if (fromBlock !== undefined) { + resolvedFilter.fromBlock = fromBlock; + } + if (toBlock !== undefined) { + resolvedFilter.toBlock = toBlock; + } + if (blockHash !== undefined) { + resolvedFilter.blockHash = blockHash; + } + + return resolvedFilter; + }; + + // Addresses could be async (ENS names or Addressables) + const address: Array> = []; + if (filter.address !== undefined) { + if (Array.isArray(filter.address)) { + for (const addr of filter.address) { + address.push(this._getAddress(addr)); + } + } else { + address.push(this._getAddress(filter.address)); + } + } + + let resolvedFromBlock: undefined | string | Promise; + if ("fromBlock" in filter) { + resolvedFromBlock = this._getBlockTag(filter.fromBlock); + } + + let resolvedToBlock: undefined | string | Promise; + if ("toBlock" in filter) { + resolvedToBlock = this._getBlockTag(filter.toBlock); + } + + if ( + address.filter((a) => typeof a !== "string").length > 0 || + // eslint-disable-next-line eqeqeq + (resolvedFromBlock != null && typeof resolvedFromBlock !== "string") || + // eslint-disable-next-line eqeqeq + (resolvedToBlock != null && typeof resolvedToBlock !== "string") + ) { + return Promise.all([ + Promise.all(address), + resolvedFromBlock, + resolvedToBlock, + ]).then((result) => { + return resolve(result[0], result[1], result[2]); + }); + } + + return resolve(address as string[], resolvedFromBlock, resolvedToBlock); + } + + private _wrapLog(value: LogParams): Log { + return new Log(formatLog(value), this); + } + + private _getRpcBlockTag(blockTag: string): string | { blockHash: string } { + if (isHexString(blockTag, 32)) { + return { blockHash: blockTag }; + } + + return blockTag; + } + + private async _isHardhatNetwork(): Promise { + if (this._isHardhatNetworkCached === undefined) { + this._isHardhatNetworkCached = false; + try { + await this._hardhatProvider.send("hardhat_metadata"); + this._isHardhatNetworkCached = true; + } catch {} + } + + return this._isHardhatNetworkCached; + } + + // ------------------------------------- // + // event-emitter related private helpers // + // ------------------------------------- // + + private async _onTransactionHash( + transactionHash: string, + listener: Listener, + { once }: { once: boolean } + ): Promise { + const listeners = this._transactionHashListeners.get(transactionHash) ?? []; + listeners.push({ listener, once }); + this._transactionHashListeners.set(transactionHash, listeners); + await this._startTransactionHashPolling(); + } + + private _clearTransactionHashListeners( + transactionHash?: string, + listener?: Listener + ): void { + if (transactionHash === undefined) { + this._transactionHashListeners = new Map(); + } else if (listener === undefined) { + this._transactionHashListeners.delete(transactionHash); + } else { + const listeners = this._transactionHashListeners.get(transactionHash); + if (listeners !== undefined) { + const listenerIndex = listeners.findIndex( + (item) => item.listener === listener + ); + + if (listenerIndex >= 0) { + listeners.splice(listenerIndex, 1); + } + + if (listeners.length === 0) { + this._transactionHashListeners.delete(transactionHash); + } + } + } + + if (this._transactionHashListeners.size === 0) { + this._stopTransactionHashPolling(); + } + } + + private async _startTransactionHashPolling() { + const _isHardhatNetwork = await this._isHardhatNetwork(); + + const interval = _isHardhatNetwork ? 50 : 500; + + if (_isHardhatNetwork) { + await this._pollTransactionHashes(); + } + + if (this._transactionHashListeners.size === 0) { + // it's possible that the first poll cleans all the listeners, + // in that case we don't start the interval + return; + } + + if (this._transactionHashPollingInterval === undefined) { + this._transactionHashPollingInterval = setInterval(async () => { + await this._pollTransactionHashes(); + }, interval); + } + } + + private _stopTransactionHashPolling() { + if (this._transactionHashPollingInterval !== undefined) { + clearInterval(this._transactionHashPollingInterval); + this._transactionHashPollingInterval = undefined; + } + } + + private async _startBlockPolling() { + const _isHardhatNetwork = await this._isHardhatNetwork(); + + const interval = _isHardhatNetwork ? 50 : 500; + + this._latestBlockNumberPolled = await this.getBlockNumber(); + + if (_isHardhatNetwork) { + await this._pollBlocks(); + } + + if (this._blockListeners.length === 0) { + // it's possible that the first poll cleans all the listeners, + // in that case we don't start the interval + return; + } + + if (this._blockPollingInterval === undefined) { + this._blockPollingInterval = setInterval(async () => { + await this._pollBlocks(); + }, interval); + } + } + + private _stopBlockPolling() { + if (this._blockPollingInterval !== undefined) { + clearInterval(this._blockPollingInterval); + this._blockPollingInterval = undefined; + } + } + + /** + * Traverse all the registered transaction hashes and check if they were mined. + * + * This function should NOT throw. + */ + private async _pollTransactionHashes() { + try { + const listenersToRemove: Array<[string, Listener]> = []; + + for (const [ + transactionHash, + listeners, + ] of this._transactionHashListeners.entries()) { + const receipt = await this.getTransactionReceipt(transactionHash); + + if (receipt !== null) { + for (const { listener, once } of listeners) { + listener(receipt); + if (once) { + listenersToRemove.push([transactionHash, listener]); + } + } + } + } + + for (const [transactionHash, listener] of listenersToRemove) { + this._clearTransactionHashListeners(transactionHash, listener); + } + } catch (e: any) { + log(`Error during transaction hash polling: ${e.message}`); + } + } + + private async _pollBlocks() { + try { + const currentBlockNumber = await this.getBlockNumber(); + const previousBlockNumber = this._latestBlockNumberPolled ?? 0; + + if (currentBlockNumber === previousBlockNumber) { + // Don't do anything, there are no new blocks + return; + } else if (currentBlockNumber < previousBlockNumber) { + // This can happen if there was a reset or a snapshot was reverted. + // We don't know which number the network was reset to, so we update + // the latest block number seen and do nothing else. + this._latestBlockNumberPolled = currentBlockNumber; + return; + } + + this._latestBlockNumberPolled = currentBlockNumber; + + for ( + let blockNumber = previousBlockNumber + 1; + blockNumber <= this._latestBlockNumberPolled; + blockNumber++ + ) { + const listenersToRemove: Listener[] = []; + + for (const { listener, once } of this._blockListeners) { + listener(blockNumber); + if (once) { + listenersToRemove.push(listener); + } + } + + for (const listener of listenersToRemove) { + this._clearBlockListeners(listener); + } + } + } catch (e: any) { + log(`Error during block polling: ${e.message}`); + } + } + + private _emitTransactionHash( + transactionHash: string, + ...args: any[] + ): boolean { + const listeners = this._transactionHashListeners.get(transactionHash); + const listenersToRemove: Listener[] = []; + + if (listeners === undefined) { + return false; + } + + for (const { listener, once } of listeners) { + listener(...args); + if (once) { + listenersToRemove.push(listener); + } + } + + for (const listener of listenersToRemove) { + this._clearTransactionHashListeners(transactionHash, listener); + } + + return true; + } + + private _emitBlock(...args: any[]): boolean { + const listeners = this._blockListeners; + const listenersToRemove: Listener[] = []; + + for (const { listener, once } of listeners) { + listener(...args); + if (once) { + listenersToRemove.push(listener); + } + } + + for (const listener of listenersToRemove) { + this._clearBlockListeners(listener); + } + + return true; + } + + private async _onBlock( + listener: Listener, + { once }: { once: boolean } + ): Promise { + const listeners = this._blockListeners; + listeners.push({ listener, once }); + this._blockListeners = listeners; + await this._startBlockPolling(); + } + + private _clearBlockListeners(listener?: Listener): void { + if (listener === undefined) { + this._blockListeners = []; + this._stopBlockPolling(); + } else { + const listenerIndex = this._blockListeners.findIndex( + (item) => item.listener === listener + ); + + if (listenerIndex >= 0) { + this._blockListeners.splice(listenerIndex, 1); + } + + if (this._blockListeners.length === 0) { + this._stopBlockPolling(); + } + } + } + + private _getBlockListenerForEvent(event: EventFilter, listener: Listener) { + return async (blockNumber: number) => { + const eventLogs = await this.getLogs({ + fromBlock: blockNumber, + toBlock: blockNumber, + }); + + const matchingLogs = eventLogs.filter((e) => { + if (event.address !== undefined && e.address !== event.address) { + return false; + } + if (event.topics !== undefined) { + const topicsToMatch = event.topics; + // the array of topics to match can be smaller than the actual + // array of topics; in that case only those first topics are + // checked + const topics = e.topics.slice(0, topicsToMatch.length); + + const topicsMatch = topics.every((topic, i) => { + const topicToMatch = topicsToMatch[i]; + if (topicToMatch === null) { + return true; + } + + if (typeof topicToMatch === "string") { + return topic === topicsToMatch[i]; + } + + return topicToMatch.includes(topic); + }); + + return topicsMatch; + } + + return true; + }); + + for (const matchingLog of matchingLogs) { + listener(matchingLog); + } + }; + } + + private _addEventListener( + event: EventFilter, + listener: Listener, + blockListener: Listener + ) { + const isEqual = require("lodash.isequal") as typeof LodashIsEqualT; + + const eventListener = this._eventListeners.find((item) => + isEqual(item.event, event) + ); + + if (eventListener === undefined) { + const listenersMap = new Map(); + listenersMap.set(listener, blockListener); + this._eventListeners.push({ event, listenersMap }); + } else { + eventListener.listenersMap.set(listener, blockListener); + } + } + + private async _clearEventListeners(event?: EventFilter) { + const isEqual = require("lodash.isequal") as typeof LodashIsEqualT; + + const blockListenersToRemove: Listener[] = []; + + if (event === undefined) { + for (const eventListener of this._eventListeners) { + for (const blockListener of eventListener.listenersMap.values()) { + blockListenersToRemove.push(blockListener); + } + } + + this._eventListeners = []; + } else { + const index = this._eventListeners.findIndex((item) => + isEqual(item.event, event) + ); + if (index === -1) { + const { listenersMap } = this._eventListeners[index]; + this._eventListeners.splice(index, 1); + for (const blockListener of listenersMap.values()) { + blockListenersToRemove.push(blockListener); + } + } + } + + for (const blockListener of blockListenersToRemove) { + await this.off("block", blockListener); + } + } + + private async _removeEventListener(event: EventFilter, listener: Listener) { + const isEqual = require("lodash.isequal") as typeof LodashIsEqualT; + + const index = this._eventListeners.findIndex((item) => + isEqual(item.event, event) + ); + if (index === -1) { + // nothing to do + return; + } + + const { listenersMap } = this._eventListeners[index]; + + const blockListener = listenersMap.get(listener); + listenersMap.delete(listener); + if (blockListener === undefined) { + // nothing to do + return; + } + + await this.off("block", blockListener); + } +} + +function isPromise(value: any): value is Promise { + return Boolean(value) && typeof value.then === "function"; +} + +function concisify(items: string[]): string[] { + items = Array.from(new Set(items).values()); + items.sort(); + return items; +} + +function isTransactionHash(x: string): boolean { + return x.startsWith("0x") && x.length === 66; +} + +function isEventFilter(x: ProviderEvent): x is EventFilter { + if (typeof x !== "string" && !Array.isArray(x) && !("orphan" in x)) { + return true; + } + + return false; +} + +function ethersToHardhatEvent( + event: ProviderEvent +): HardhatEthersProviderEvent { + if (typeof event === "string") { + if (event === "block") { + return { kind: "block" }; + } else if (isTransactionHash(event)) { + return { kind: "transactionHash", txHash: event }; + } else { + throw new UnsupportedEventError(event); + } + } else if (isEventFilter(event)) { + return { kind: "event", eventFilter: event }; + } else { + throw new UnsupportedEventError(event); + } +} diff --git a/packages/hardhat-ethers/src/internal/helpers.ts b/packages/hardhat-ethers/src/internal/helpers.ts index 3d9e95c0f8..bd3bc89ff2 100644 --- a/packages/hardhat-ethers/src/internal/helpers.ts +++ b/packages/hardhat-ethers/src/internal/helpers.ts @@ -1,13 +1,13 @@ -import type { ethers } from "ethers"; -import type { SignerWithAddress } from "../signers"; -import type { FactoryOptions, Libraries } from "../types"; +import type { ethers as EthersT } from "ethers"; +import type { HardhatEthersSigner } from "../signers"; +import type { + DeployContractOptions, + FactoryOptions, + Libraries, +} from "../types"; -import { NomicLabsHardhatPluginError } from "hardhat/plugins"; -import { - Artifact, - HardhatRuntimeEnvironment, - NetworkConfig, -} from "hardhat/types"; +import { Artifact, HardhatRuntimeEnvironment } from "hardhat/types"; +import { HardhatEthersError } from "./errors"; interface Link { sourceName: string; @@ -15,8 +15,6 @@ interface Link { address: string; } -const pluginName = "hardhat-ethers"; - function isArtifact(artifact: any): artifact is Artifact { const { contractName, @@ -41,8 +39,8 @@ function isArtifact(artifact: any): artifact is Artifact { export async function getSigners( hre: HardhatRuntimeEnvironment -): Promise { - const accounts = await hre.ethers.provider.listAccounts(); +): Promise { + const accounts: string[] = await hre.ethers.provider.send("eth_accounts", []); const signersWithAddress = await Promise.all( accounts.map((account) => getSigner(hre, account)) @@ -54,14 +52,15 @@ export async function getSigners( export async function getSigner( hre: HardhatRuntimeEnvironment, address: string -): Promise { - const { SignerWithAddress: SignerWithAddressImpl } = await import( +): Promise { + const { HardhatEthersSigner: SignerWithAddressImpl } = await import( "../signers" ); - const signer = hre.ethers.provider.getSigner(address); - - const signerWithAddress = await SignerWithAddressImpl.create(signer); + const signerWithAddress = await SignerWithAddressImpl.create( + hre.ethers.provider, + address + ); return signerWithAddress; } @@ -69,68 +68,82 @@ export async function getSigner( export async function getImpersonatedSigner( hre: HardhatRuntimeEnvironment, address: string -): Promise { +): Promise { await hre.ethers.provider.send("hardhat_impersonateAccount", [address]); return getSigner(hre, address); } -export function getContractFactory( +export function getContractFactory< + A extends any[] = any[], + I = EthersT.Contract +>( hre: HardhatRuntimeEnvironment, name: string, - signerOrOptions?: ethers.Signer | FactoryOptions -): Promise; + signerOrOptions?: EthersT.Signer | FactoryOptions +): Promise>; -export function getContractFactory( +export function getContractFactory< + A extends any[] = any[], + I = EthersT.Contract +>( hre: HardhatRuntimeEnvironment, abi: any[], - bytecode: ethers.utils.BytesLike, - signer?: ethers.Signer -): Promise; - -export async function getContractFactory( + bytecode: EthersT.BytesLike, + signer?: EthersT.Signer +): Promise>; + +export async function getContractFactory< + A extends any[] = any[], + I = EthersT.Contract +>( hre: HardhatRuntimeEnvironment, nameOrAbi: string | any[], bytecodeOrFactoryOptions?: - | (ethers.Signer | FactoryOptions) - | ethers.utils.BytesLike, - signer?: ethers.Signer -) { + | (EthersT.Signer | FactoryOptions) + | EthersT.BytesLike, + signer?: EthersT.Signer +): Promise> { if (typeof nameOrAbi === "string") { const artifact = await hre.artifacts.readArtifact(nameOrAbi); - return getContractFactoryFromArtifact( + return getContractFactoryFromArtifact( hre, artifact, - bytecodeOrFactoryOptions as ethers.Signer | FactoryOptions | undefined + bytecodeOrFactoryOptions as EthersT.Signer | FactoryOptions | undefined ); } return getContractFactoryByAbiAndBytecode( hre, nameOrAbi, - bytecodeOrFactoryOptions as ethers.utils.BytesLike, + bytecodeOrFactoryOptions as EthersT.BytesLike, signer ); } function isFactoryOptions( - signerOrOptions?: ethers.Signer | FactoryOptions + signerOrOptions?: EthersT.Signer | FactoryOptions ): signerOrOptions is FactoryOptions { - const { Signer } = require("ethers") as typeof ethers; - return signerOrOptions !== undefined && !Signer.isSigner(signerOrOptions); + if (signerOrOptions === undefined || "provider" in signerOrOptions) { + return false; + } + + return true; } -export async function getContractFactoryFromArtifact( +export async function getContractFactoryFromArtifact< + A extends any[] = any[], + I = EthersT.Contract +>( hre: HardhatRuntimeEnvironment, artifact: Artifact, - signerOrOptions?: ethers.Signer | FactoryOptions -) { + signerOrOptions?: EthersT.Signer | FactoryOptions +): Promise> { let libraries: Libraries = {}; - let signer: ethers.Signer | undefined; + let signer: EthersT.Signer | undefined; if (!isArtifact(artifact)) { - throw new NomicLabsHardhatPluginError( - pluginName, + throw new HardhatEthersError( `You are trying to create a contract factory from an artifact, but you have not passed a valid artifact parameter.` ); } @@ -143,8 +156,7 @@ export async function getContractFactoryFromArtifact( } if (artifact.bytecode === "0x") { - throw new NomicLabsHardhatPluginError( - pluginName, + throw new HardhatEthersError( `You are trying to create a contract factory for the contract ${artifact.contractName}, which is abstract and can't be deployed. If you want to call a contract using ${artifact.contractName} as its interface use the "getContractAt" function instead.` ); @@ -164,7 +176,7 @@ async function collectLibrariesAndLink( artifact: Artifact, libraries: Libraries ) { - const { utils } = require("ethers") as typeof ethers; + const ethers = require("ethers") as typeof EthersT; const neededLibraries: Array<{ sourceName: string; @@ -182,10 +194,20 @@ async function collectLibrariesAndLink( for (const [linkedLibraryName, linkedLibraryAddress] of Object.entries( libraries )) { - if (!utils.isAddress(linkedLibraryAddress)) { - throw new NomicLabsHardhatPluginError( - pluginName, - `You tried to link the contract ${artifact.contractName} with the library ${linkedLibraryName}, but provided this invalid address: ${linkedLibraryAddress}` + let resolvedAddress: string; + if (ethers.isAddressable(linkedLibraryAddress)) { + resolvedAddress = await linkedLibraryAddress.getAddress(); + } else { + resolvedAddress = linkedLibraryAddress; + } + + if (!ethers.isAddress(resolvedAddress)) { + throw new HardhatEthersError( + `You tried to link the contract ${ + artifact.contractName + } with the library ${linkedLibraryName}, but provided this invalid address: ${ + resolvedAddress as any + }` ); } @@ -208,8 +230,7 @@ ${libraryFQNames}`; } else { detailedMessage = "This contract doesn't need linking any libraries."; } - throw new NomicLabsHardhatPluginError( - pluginName, + throw new HardhatEthersError( `You tried to link the contract ${artifact.contractName} with ${linkedLibraryName}, which is not one of its libraries. ${detailedMessage}` ); @@ -220,8 +241,7 @@ ${detailedMessage}` .map(({ sourceName, libName }) => `${sourceName}:${libName}`) .map((x) => `* ${x}`) .join("\n"); - throw new NomicLabsHardhatPluginError( - pluginName, + throw new HardhatEthersError( `The library name ${linkedLibraryName} is ambiguous for the contract ${artifact.contractName}. It may resolve to one of the following libraries: ${matchingNeededLibrariesFQNs} @@ -238,8 +258,7 @@ To fix this, choose one of these fully qualified library names and replace where // for it to be given twice in the libraries user input: // once as a library name and another as a fully qualified library name. if (linksToApply.has(neededLibraryFQN)) { - throw new NomicLabsHardhatPluginError( - pluginName, + throw new HardhatEthersError( `The library names ${neededLibrary.libName} and ${neededLibraryFQN} refer to the same library and were given as two separate library links. Remove one of them and review your library links before proceeding.` ); @@ -248,7 +267,7 @@ Remove one of them and review your library links before proceeding.` linksToApply.set(neededLibraryFQN, { sourceName: neededLibrary.sourceName, libraryName: neededLibrary.libName, - address: linkedLibraryAddress, + address: resolvedAddress, }); } @@ -259,12 +278,11 @@ Remove one of them and review your library links before proceeding.` .map((x) => `* ${x}`) .join("\n"); - throw new NomicLabsHardhatPluginError( - pluginName, + throw new HardhatEthersError( `The contract ${artifact.contractName} is missing links for the following libraries: ${missingLibraries} -Learn more about linking contracts at https://hardhat.org/hardhat-runner/plugins/nomiclabs-hardhat-ethers#library-linking +Learn more about linking contracts at https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-ethers#library-linking ` ); } @@ -272,32 +290,30 @@ Learn more about linking contracts at https://hardhat.org/hardhat-runner/plugins return linkBytecode(artifact, [...linksToApply.values()]); } -async function getContractFactoryByAbiAndBytecode( +async function getContractFactoryByAbiAndBytecode< + A extends any[] = any[], + I = EthersT.Contract +>( hre: HardhatRuntimeEnvironment, abi: any[], - bytecode: ethers.utils.BytesLike, - signer?: ethers.Signer -) { - const { ContractFactory } = require("ethers") as typeof ethers; + bytecode: EthersT.BytesLike, + signer?: EthersT.Signer +): Promise> { + const { ContractFactory } = require("ethers") as typeof EthersT; if (signer === undefined) { const signers = await hre.ethers.getSigners(); signer = signers[0]; } - const abiWithAddedGas = addGasToAbiMethodsIfNecessary( - hre.network.config, - abi - ); - - return new ContractFactory(abiWithAddedGas, bytecode, signer); + return new ContractFactory(abi, bytecode, signer); } export async function getContractAt( hre: HardhatRuntimeEnvironment, nameOrAbi: string | any[], - address: string, - signer?: ethers.Signer + address: string | EthersT.Addressable, + signer?: EthersT.Signer ) { if (typeof nameOrAbi === "string") { const artifact = await hre.artifacts.readArtifact(nameOrAbi); @@ -305,7 +321,7 @@ export async function getContractAt( return getContractAtFromArtifact(hre, artifact, address, signer); } - const { Contract } = require("ethers") as typeof ethers; + const ethers = require("ethers") as typeof EthersT; if (signer === undefined) { const signers = await hre.ethers.getSigners(); @@ -314,111 +330,93 @@ export async function getContractAt( // If there's no signer, we want to put the provider for the selected network here. // This allows read only operations on the contract interface. - const signerOrProvider: ethers.Signer | ethers.providers.Provider = + const signerOrProvider: EthersT.Signer | EthersT.Provider = signer !== undefined ? signer : hre.ethers.provider; - const abiWithAddedGas = addGasToAbiMethodsIfNecessary( - hre.network.config, - nameOrAbi - ); + let resolvedAddress; + if (ethers.isAddressable(address)) { + resolvedAddress = await address.getAddress(); + } else { + resolvedAddress = address; + } - return new Contract(address, abiWithAddedGas, signerOrProvider); + return new ethers.Contract(resolvedAddress, nameOrAbi, signerOrProvider); } export async function deployContract( hre: HardhatRuntimeEnvironment, name: string, args?: any[], - signerOrOptions?: ethers.Signer | FactoryOptions -): Promise; + signerOrOptions?: EthersT.Signer | DeployContractOptions +): Promise; export async function deployContract( hre: HardhatRuntimeEnvironment, name: string, - signerOrOptions?: ethers.Signer | FactoryOptions -): Promise; + signerOrOptions?: EthersT.Signer | DeployContractOptions +): Promise; export async function deployContract( hre: HardhatRuntimeEnvironment, name: string, - argsOrSignerOrOptions?: any[] | ethers.Signer | FactoryOptions, - signerOrOptions?: ethers.Signer | FactoryOptions -): Promise { + argsOrSignerOrOptions?: any[] | EthersT.Signer | DeployContractOptions, + signerOrOptions?: EthersT.Signer | DeployContractOptions +): Promise { let args = []; if (Array.isArray(argsOrSignerOrOptions)) { args = argsOrSignerOrOptions; } else { signerOrOptions = argsOrSignerOrOptions; } + + let overrides: EthersT.Overrides = {}; + if (signerOrOptions !== undefined && !("getAddress" in signerOrOptions)) { + const overridesAndFactoryOptions = { ...signerOrOptions }; + + // we delete the factory options properties in case ethers + // rejects unknown properties + delete overridesAndFactoryOptions.signer; + delete overridesAndFactoryOptions.libraries; + + overrides = overridesAndFactoryOptions; + } + const factory = await getContractFactory(hre, name, signerOrOptions); - return factory.deploy(...args); + return factory.deploy(...args, overrides); } export async function getContractAtFromArtifact( hre: HardhatRuntimeEnvironment, artifact: Artifact, - address: string, - signer?: ethers.Signer + address: string | EthersT.Addressable, + signer?: EthersT.Signer ) { + const ethers = require("ethers") as typeof EthersT; if (!isArtifact(artifact)) { - throw new NomicLabsHardhatPluginError( - pluginName, + throw new HardhatEthersError( `You are trying to create a contract by artifact, but you have not passed a valid artifact parameter.` ); } - const factory = await getContractFactoryByAbiAndBytecode( - hre, - artifact.abi, - "0x", - signer - ); - - let contract = factory.attach(address); - // If there's no signer, we connect the contract instance to the provider for the selected network. - if (contract.provider === null) { - contract = contract.connect(hre.ethers.provider); + if (signer === undefined) { + const signers = await hre.ethers.getSigners(); + signer = signers[0]; } - return contract; -} - -// This helper adds a `gas` field to the ABI function elements if the network -// is set up to use a fixed amount of gas. -// This is done so that ethers doesn't automatically estimate gas limits on -// every call. -function addGasToAbiMethodsIfNecessary( - networkConfig: NetworkConfig, - abi: any[] -): any[] { - const { BigNumber } = require("ethers") as typeof ethers; - - if (networkConfig.gas === "auto" || networkConfig.gas === undefined) { - return abi; + let resolvedAddress; + if (ethers.isAddressable(address)) { + resolvedAddress = await address.getAddress(); + } else { + resolvedAddress = address; } - // ethers adds 21000 to whatever the abi `gas` field has. This may lead to - // OOG errors, as people may set the default gas to the same value as the - // block gas limit, especially on Hardhat Network. - // To avoid this, we substract 21000. - // HOTFIX: We substract 1M for now. See: https://github.com/ethers-io/ethers.js/issues/1058#issuecomment-703175279 - const gasLimit = BigNumber.from(networkConfig.gas).sub(1000000).toHexString(); - - const modifiedAbi: any[] = []; + let contract = new ethers.Contract(resolvedAddress, artifact.abi, signer); - for (const abiElement of abi) { - if (abiElement.type !== "function") { - modifiedAbi.push(abiElement); - continue; - } - - modifiedAbi.push({ - ...abiElement, - gas: gasLimit, - }); + if (contract.runner === null) { + contract = contract.connect(hre.ethers.provider) as EthersT.Contract; } - return modifiedAbi; + return contract; } function linkBytecode(artifact: Artifact, libraries: Link[]): string { diff --git a/packages/hardhat-ethers/src/internal/index.ts b/packages/hardhat-ethers/src/internal/index.ts index a8f46f51e0..d979ab5f89 100644 --- a/packages/hardhat-ethers/src/internal/index.ts +++ b/packages/hardhat-ethers/src/internal/index.ts @@ -1,5 +1,5 @@ import type EthersT from "ethers"; -import type * as ProviderProxyT from "./provider-proxy"; +import type { HardhatEthersProvider as HardhatEthersProviderT } from "./hardhat-ethers-provider"; import { extendEnvironment } from "hardhat/config"; import { lazyObject } from "hardhat/plugins"; @@ -16,29 +16,22 @@ import { } from "./helpers"; import "./type-extensions"; -const registerCustomInspection = (BigNumber: any) => { - const inspectCustomSymbol = Symbol.for("nodejs.util.inspect.custom"); - - BigNumber.prototype[inspectCustomSymbol] = function () { - return `BigNumber { value: "${this.toString()}" }`; - }; -}; - extendEnvironment((hre) => { hre.ethers = lazyObject(() => { - const { createProviderProxy } = - require("./provider-proxy") as typeof ProviderProxyT; - const { ethers } = require("ethers") as typeof EthersT; + const { HardhatEthersProvider } = require("./hardhat-ethers-provider") as { + HardhatEthersProvider: typeof HardhatEthersProviderT; + }; - registerCustomInspection(ethers.BigNumber); - - const providerProxy = createProviderProxy(hre.network.provider); + const provider = new HardhatEthersProvider( + hre.network.provider, + hre.network.name + ); return { ...ethers, - provider: providerProxy, + provider, getSigner: (address: string) => getSigner(hre, address), getSigners: () => getSigners(hre), @@ -47,12 +40,11 @@ extendEnvironment((hre) => { // We cast to any here as we hit a limitation of Function#bind and // overloads. See: https://github.com/microsoft/TypeScript/issues/28582 getContractFactory: getContractFactory.bind(null, hre) as any, - getContractFactoryFromArtifact: getContractFactoryFromArtifact.bind( - null, - hre - ), - getContractAt: getContractAt.bind(null, hre), - getContractAtFromArtifact: getContractAtFromArtifact.bind(null, hre), + getContractFactoryFromArtifact: (...args) => + getContractFactoryFromArtifact(hre, ...args), + getContractAt: (...args) => getContractAt(hre, ...args), + getContractAtFromArtifact: (...args) => + getContractAtFromArtifact(hre, ...args), deployContract: deployContract.bind(null, hre) as any, }; }); diff --git a/packages/hardhat-ethers/src/signers.ts b/packages/hardhat-ethers/src/signers.ts index 48294f1cb9..e4ef81550b 100644 --- a/packages/hardhat-ethers/src/signers.ts +++ b/packages/hardhat-ethers/src/signers.ts @@ -1,49 +1,328 @@ -import { ethers } from "ethers"; +import type { BlockTag, TransactionRequest } from "ethers"; +import { + assertArgument, + ethers, + getAddress, + hexlify, + resolveAddress, + toUtf8Bytes, + TransactionLike, + TypedDataEncoder, +} from "ethers"; +import { HardhatEthersProvider } from "./internal/hardhat-ethers-provider"; +import { + copyRequest, + getRpcTransaction, + resolveProperties, +} from "./internal/ethers-utils"; +import { HardhatEthersError, NotImplementedError } from "./internal/errors"; -export class SignerWithAddress extends ethers.Signer { - public static async create(signer: ethers.providers.JsonRpcSigner) { - return new SignerWithAddress(await signer.getAddress(), signer); +export class HardhatEthersSigner implements ethers.Signer { + public readonly address: string; + public readonly provider: ethers.JsonRpcProvider | HardhatEthersProvider; + + public static async create(provider: HardhatEthersProvider, address: string) { + const hre = await import("hardhat"); + + // depending on the config, we set a fixed gas limit for all transactions + let gasLimit: number | undefined; + + if (hre.network.name === "hardhat") { + // If we are connected to the in-process hardhat network and the config + // has a fixed number as the gas config, we use that. + // Hardhat core already sets this value to the block gas limit when the + // user doesn't specify a number. + if (hre.network.config.gas !== "auto") { + gasLimit = hre.network.config.gas; + } + } else if (hre.network.name === "localhost") { + const configuredGasLimit = hre.config.networks.localhost.gas; + + if (configuredGasLimit !== "auto") { + // if the resolved gas config is a number, we use that + gasLimit = configuredGasLimit; + } else { + // if the resolved gas config is "auto", we need to check that + // the user config is undefined, because that's the default value; + // otherwise explicitly setting the gas to "auto" would have no effect + if (hre.userConfig.networks?.localhost?.gas === undefined) { + // finally, we check if we are connected to a hardhat network + let isHardhatNetwork = false; + try { + await hre.network.provider.send("hardhat_metadata"); + isHardhatNetwork = true; + } catch {} + + if (isHardhatNetwork) { + // WARNING: this assumes that the hardhat node is being run in the + // same project which might be wrong + gasLimit = hre.config.networks.hardhat.blockGasLimit; + } + } + } + } + + return new HardhatEthersSigner(address, provider, gasLimit); } private constructor( - public readonly address: string, - private readonly _signer: ethers.providers.JsonRpcSigner + address: string, + _provider: ethers.JsonRpcProvider | HardhatEthersProvider, + private readonly _gasLimit?: number ) { - super(); - (this as any).provider = _signer.provider; + this.address = getAddress(address); + this.provider = _provider; } - public async getAddress(): Promise { - return this.address; + public connect( + provider: ethers.JsonRpcProvider | HardhatEthersProvider + ): ethers.Signer { + return new HardhatEthersSigner(this.address, provider); } - public signMessage(message: string | ethers.utils.Bytes): Promise { - return this._signer.signMessage(message); + public getNonce(blockTag?: BlockTag | undefined): Promise { + return this.provider.getTransactionCount(this.address, blockTag); } - public signTransaction( - transaction: ethers.utils.Deferrable - ): Promise { - return this._signer.signTransaction(transaction); + public populateCall( + tx: TransactionRequest + ): Promise> { + return populate(this, tx); + } + + public populateTransaction( + tx: TransactionRequest + ): Promise> { + return this.populateCall(tx); + } + + public async estimateGas(tx: TransactionRequest): Promise { + return this.provider.estimateGas(await this.populateCall(tx)); + } + + public async call(tx: TransactionRequest): Promise { + return this.provider.call(await this.populateCall(tx)); } - public sendTransaction( - transaction: ethers.utils.Deferrable - ): Promise { - return this._signer.sendTransaction(transaction); + public resolveName(name: string): Promise { + return this.provider.resolveName(name); } - public connect(provider: ethers.providers.Provider): SignerWithAddress { - return new SignerWithAddress(this.address, this._signer.connect(provider)); + public async signTransaction(_tx: TransactionRequest): Promise { + // TODO if we split the signer for the in-process and json-rpc networks, + // we can enable this method when using the in-process network or when the + // json-rpc network has a private key + throw new NotImplementedError("HardhatEthersSigner.signTransaction"); } - public _signTypedData( - ...params: Parameters + public async sendTransaction( + tx: TransactionRequest + ): Promise { + // This cannot be mined any earlier than any recent block + const blockNumber = await this.provider.getBlockNumber(); + + // Send the transaction + const hash = await this._sendUncheckedTransaction(tx); + + // Unfortunately, JSON-RPC only provides and opaque transaction hash + // for a response, and we need the actual transaction, so we poll + // for it; it should show up very quickly + + return new Promise((resolve) => { + const timeouts = [1000, 100]; + const checkTx = async () => { + // Try getting the transaction + const txPolled = await this.provider.getTransaction(hash); + if (txPolled !== null) { + resolve(txPolled.replaceableTransaction(blockNumber)); + return; + } + + // Wait another 4 seconds + setTimeout(() => { + // eslint-disable-next-line @typescript-eslint/no-floating-promises + checkTx(); + }, timeouts.pop() ?? 4000); + }; + // eslint-disable-next-line @typescript-eslint/no-floating-promises + checkTx(); + }); + } + + public signMessage(message: string | Uint8Array): Promise { + const resolvedMessage = + typeof message === "string" ? toUtf8Bytes(message) : message; + return this.provider.send("personal_sign", [ + hexlify(resolvedMessage), + this.address.toLowerCase(), + ]); + } + + public async signTypedData( + domain: ethers.TypedDataDomain, + types: Record, + value: Record ): Promise { - return this._signer._signTypedData(...params); + const copiedValue = deepCopy(value); + + // Populate any ENS names (in-place) + const populated = await TypedDataEncoder.resolveNames( + domain, + types, + copiedValue, + async (v: string) => { + return v; + } + ); + + return this.provider.send("eth_signTypedData_v4", [ + this.address.toLowerCase(), + JSON.stringify( + TypedDataEncoder.getPayload(populated.domain, types, populated.value), + (_k, v) => { + if (typeof v === "bigint") { + return v.toString(); + } + + return v; + } + ), + ]); + } + + public async getAddress(): Promise { + return this.address; } public toJSON() { return ``; } + + private async _sendUncheckedTransaction( + tx: TransactionRequest + ): Promise { + const resolvedTx = deepCopy(tx); + + const promises: Array> = []; + + // Make sure the from matches the sender + if (resolvedTx.from !== null && resolvedTx.from !== undefined) { + const _from = resolvedTx.from; + promises.push( + (async () => { + const from = await resolveAddress(_from, this.provider); + assertArgument( + from !== null && + from !== undefined && + from.toLowerCase() === this.address.toLowerCase(), + "from address mismatch", + "transaction", + tx + ); + resolvedTx.from = from; + })() + ); + } else { + resolvedTx.from = this.address; + } + + if (resolvedTx.gasLimit === null || resolvedTx.gasLimit === undefined) { + if (this._gasLimit !== undefined) { + resolvedTx.gasLimit = this._gasLimit; + } else { + promises.push( + (async () => { + resolvedTx.gasLimit = await this.provider.estimateGas({ + ...resolvedTx, + from: this.address, + }); + })() + ); + } + } + + // The address may be an ENS name or Addressable + if (resolvedTx.to !== null && resolvedTx.to !== undefined) { + const _to = resolvedTx.to; + promises.push( + (async () => { + resolvedTx.to = await resolveAddress(_to, this.provider); + })() + ); + } + + // Wait until all of our properties are filled in + if (promises.length > 0) { + await Promise.all(promises); + } + + const hexTx = getRpcTransaction(resolvedTx); + + return this.provider.send("eth_sendTransaction", [hexTx]); + } +} + +// exported as an alias to make migration easier +export { HardhatEthersSigner as SignerWithAddress }; + +async function populate( + signer: ethers.Signer, + tx: TransactionRequest +): Promise> { + const pop: any = copyRequest(tx); + + if (pop.to !== null && pop.to !== undefined) { + pop.to = resolveAddress(pop.to, signer); + } + + if (pop.from !== null && pop.from !== undefined) { + const from = pop.from; + pop.from = Promise.all([ + signer.getAddress(), + resolveAddress(from, signer), + ]).then(([address, resolvedFrom]) => { + assertArgument( + address.toLowerCase() === resolvedFrom.toLowerCase(), + "transaction from mismatch", + "tx.from", + resolvedFrom + ); + return address; + }); + } else { + pop.from = signer.getAddress(); + } + + return resolveProperties(pop); +} + +const Primitive = "bigint,boolean,function,number,string,symbol".split(/,/g); +function deepCopy(value: T): T { + if ( + value === null || + value === undefined || + Primitive.indexOf(typeof value) >= 0 + ) { + return value; + } + + // Keep any Addressable + if (typeof (value as any).getAddress === "function") { + return value; + } + + if (Array.isArray(value)) { + return (value as any).map(deepCopy); + } + + if (typeof value === "object") { + return Object.keys(value).reduce((accum, key) => { + accum[key] = (value as any)[key]; + return accum; + }, {} as any); + } + + throw new HardhatEthersError( + `Assertion error: ${value as any} (${typeof value})` + ); } diff --git a/packages/hardhat-ethers/src/types/index.ts b/packages/hardhat-ethers/src/types/index.ts index b39b673ce3..0b2915baa6 100644 --- a/packages/hardhat-ethers/src/types/index.ts +++ b/packages/hardhat-ethers/src/types/index.ts @@ -1,10 +1,10 @@ import type * as ethers from "ethers"; -import type { SignerWithAddress } from "../signers"; - -import { Artifact } from "hardhat/types"; +import type { Artifact } from "hardhat/types"; +import type { HardhatEthersProvider } from "../internal/hardhat-ethers-provider"; +import type { HardhatEthersSigner } from "../signers"; export interface Libraries { - [libraryName: string]: string; + [libraryName: string]: string | ethers.Addressable; } export interface FactoryOptions { @@ -12,38 +12,51 @@ export interface FactoryOptions { libraries?: Libraries; } -export declare function getContractFactory( +export type DeployContractOptions = FactoryOptions & ethers.Overrides; + +export declare function getContractFactory< + A extends any[] = any[], + I = ethers.Contract +>( name: string, signerOrOptions?: ethers.Signer | FactoryOptions -): Promise; -export declare function getContractFactory( +): Promise>; +export declare function getContractFactory< + A extends any[] = any[], + I = ethers.Contract +>( abi: any[], - bytecode: ethers.utils.BytesLike, + bytecode: ethers.BytesLike, signer?: ethers.Signer -): Promise; +): Promise>; export declare function deployContract( name: string, - signerOrOptions?: ethers.Signer | FactoryOptions + signerOrOptions?: ethers.Signer | DeployContractOptions ): Promise; export declare function deployContract( name: string, args: any[], - signerOrOptions?: ethers.Signer | FactoryOptions + signerOrOptions?: ethers.Signer | DeployContractOptions ): Promise; +export declare function getContractFactoryFromArtifact< + A extends any[] = any[], + I = ethers.Contract +>( + artifact: Artifact, + signerOrOptions?: ethers.Signer | FactoryOptions +): Promise>; + export interface HardhatEthersHelpers { - provider: ethers.providers.JsonRpcProvider; + provider: HardhatEthersProvider; getContractFactory: typeof getContractFactory; - getContractFactoryFromArtifact: ( - artifact: Artifact, - signerOrOptions?: ethers.Signer | FactoryOptions - ) => Promise; + getContractFactoryFromArtifact: typeof getContractFactoryFromArtifact; getContractAt: ( nameOrAbi: string | any[], - address: string, + address: string | ethers.Addressable, signer?: ethers.Signer ) => Promise; getContractAtFromArtifact: ( @@ -51,8 +64,8 @@ export interface HardhatEthersHelpers { address: string, signer?: ethers.Signer ) => Promise; - getSigner: (address: string) => Promise; - getSigners: () => Promise; - getImpersonatedSigner: (address: string) => Promise; + getSigner: (address: string) => Promise; + getSigners: () => Promise; + getImpersonatedSigner: (address: string) => Promise; deployContract: typeof deployContract; } diff --git a/packages/hardhat-ethers/test/contracts.ts b/packages/hardhat-ethers/test/contracts.ts new file mode 100644 index 0000000000..61ca598fdb --- /dev/null +++ b/packages/hardhat-ethers/test/contracts.ts @@ -0,0 +1,282 @@ +import { assert, use } from "chai"; +import chaiAsPromised from "chai-as-promised"; + +import { ExampleContract, EXAMPLE_CONTRACT } from "./example-contracts"; +import { useEnvironment } from "./environment"; +import { sleep } from "./helpers"; + +use(chaiAsPromised); + +describe("contracts", function () { + useEnvironment("minimal-project"); + + it("should wait for deployment when automining is enabled", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + + const contract = await factory.deploy(); + + await contract.waitForDeployment(); + }); + + it("should wait for deployment when automining is disabled", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + + await this.env.network.provider.send("evm_setAutomine", [false]); + + const contract = await factory.deploy(); + + let deployed = false; + const waitForDeploymentPromise = contract.waitForDeployment().then(() => { + deployed = true; + }); + + assert.isFalse(deployed); + await sleep(10); + assert.isFalse(deployed); + + await this.env.network.provider.send("hardhat_mine"); + await waitForDeploymentPromise; + assert.isTrue(deployed); + }); + + it("should wait for multiple deployments at the same time", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + + await this.env.network.provider.send("evm_setAutomine", [false]); + + // we set the gas limit so that the 3 txs fit in a block + const contract1 = await factory.deploy({ gasLimit: 1_000_000 }); + const contract2 = await factory.deploy({ gasLimit: 1_000_000 }); + const contract3 = await factory.deploy({ gasLimit: 1_000_000 }); + + const allDeployedPromise = Promise.all([ + contract1.waitForDeployment(), + contract2.waitForDeployment(), + contract3.waitForDeployment(), + ]); + + let deployed = false; + const waitForDeploymentPromise = allDeployedPromise.then(() => { + deployed = true; + }); + + assert.isFalse(deployed); + await sleep(10); + assert.isFalse(deployed); + + await this.env.network.provider.send("hardhat_mine"); + await waitForDeploymentPromise; + assert.isTrue(deployed); + + await this.env.network.provider.send("evm_setAutomine", [true]); + }); + + it("should wait for an event using .on", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + + const contract = await factory.deploy(); + + let listener: any; + const eventPromise = new Promise((resolve) => { + listener = resolve; + return contract.on("Inc", resolve); + }); + + await contract.inc(); + + await eventPromise; + + await contract.off("Inc", listener); + }); + + it("should wait for an event using .once", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + + const contract = await factory.deploy(); + + const eventPromise = new Promise((resolve) => { + return contract.once("Inc", resolve); + }); + + await contract.inc(); + + await eventPromise; + }); + + it("should work with ContractEvent objects", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + + const contract = await factory.deploy(); + + const contractEvent = contract.getEvent("Inc"); + + let listener: any; + const eventPromise = new Promise((resolve) => { + listener = resolve; + return contract.on(contractEvent, resolve); + }); + + await contract.inc(); + + await eventPromise; + + await contract.off(contractEvent, listener); + }); + + it("should be able to wait for indexed events", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + + const contract = await factory.deploy(); + + let listener: any; + const eventPromise = new Promise((resolve) => { + listener = resolve; + return contract.on("IncBy", resolve); + }); + + await contract.incBy(); + + await eventPromise; + + await contract.off("IncBy", listener); + }); + + it("shouldn't trigger a listener for an unrelated event", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + + const contract = await factory.deploy(); + + let listener: any; + let listenerTriggered = false; + const eventPromise = new Promise((resolve) => { + listener = () => { + listenerTriggered = true; + resolve(); + }; + return contract.on("IncBy", listener); + }); + + // call a function that doesn't trigger IncBy + await contract.inc(); + + // contract events are implemented by polling the network, so we have to wait + // some time to be sure that the event wasn't emitted + await Promise.race([eventPromise, sleep(250)]); + + assert.isFalse(listenerTriggered); + + await contract.off("IncBy", listener); + }); + + it("should work when a tx emits multiple transactions", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + + const contract = await factory.deploy(); + + let listenerInc: any; + const incEventPromise = new Promise((resolve) => { + listenerInc = resolve; + return contract.on("Inc", listenerInc); + }); + + let listenerAnotherEvent: any; + const anotherEventPromise = new Promise((resolve) => { + listenerAnotherEvent = resolve; + return contract.on("AnotherEvent", listenerAnotherEvent); + }); + + // call a function that doesn't trigger IncBy + await contract.emitsTwoEvents(); + + await Promise.all([incEventPromise, anotherEventPromise]); + + await contract.off("Inc", listenerInc); + await contract.off("AnotherEvent", listenerAnotherEvent); + }); + + it("should work when the same transaction emits the same event twice", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + + const contract = await factory.deploy(); + + let listenerInc: any; + let timesCalled = 0; + const incEventPromise = new Promise((resolve) => { + listenerInc = () => { + timesCalled++; + if (timesCalled === 2) { + resolve(); + } + }; + return contract.on("Inc", listenerInc); + }); + + await contract.incTwice(); + + await incEventPromise; + + assert.equal(timesCalled, 2); + + await contract.off("Inc", listenerInc); + }); +}); diff --git a/packages/hardhat-ethers/test/environment.ts b/packages/hardhat-ethers/test/environment.ts new file mode 100644 index 0000000000..7e5c760d56 --- /dev/null +++ b/packages/hardhat-ethers/test/environment.ts @@ -0,0 +1,165 @@ +import chalk from "chalk"; +import fs from "fs"; +import { HardhatRuntimeEnvironment, HardhatUserConfig } from "hardhat/types"; +import { resetHardhatContext } from "hardhat/plugins-testing"; +import path from "path"; + +// Import this plugin type extensions for the HardhatRuntimeEnvironment +import "../src/internal/type-extensions"; + +declare module "mocha" { + interface Context { + env: HardhatRuntimeEnvironment; + } +} + +/** + * Start a new Hardhat environment for each test + */ +export function useEnvironment( + fixtureProjectName: string, + networkName = "hardhat" +) { + const fixtureProjectPath = path.resolve( + __dirname, + "fixture-projects", + fixtureProjectName + ); + + beforeEach("Loading hardhat environment", function () { + process.chdir(fixtureProjectPath); + process.env.HARDHAT_NETWORK = networkName; + + this.env = require("hardhat"); + }); + + afterEach("Resetting hardhat", function () { + resetHardhatContext(); + }); + + afterEach(function () { + if (this.currentTest?.state === "failed") { + console.log(chalk.red("Failed in fixture project", fixtureProjectPath)); + } + }); +} + +/** + * Like useEnvironment, but re-use the environment for the whole suite + */ +export function usePersistentEnvironment( + fixtureProjectName: string, + networkName = "hardhat" +) { + const fixtureProjectPath = path.resolve( + __dirname, + "fixture-projects", + fixtureProjectName + ); + + before("Loading hardhat environment", function () { + process.chdir(fixtureProjectPath); + process.env.HARDHAT_NETWORK = networkName; + + this.env = require("hardhat"); + }); + + after("Resetting hardhat", function () { + resetHardhatContext(); + }); + + afterEach(function () { + if (this.currentTest?.state === "failed") { + console.log(chalk.red("Failed in fixture project", fixtureProjectPath)); + } + }); +} + +/** + * Generate a fixture project on runtime with the given parameters, + * and start a persistent environment in that project. + */ +export function useGeneratedEnvironment( + hardhatGasLimit: "default" | "auto" | number, + localhostGasLimit: "default" | "auto" | number, + networkName: "hardhat" | "localhost" +) { + const fixtureProjectPath = path.resolve( + __dirname, + "fixture-projects", + "generated-fixtures", + `hardhat-gas-${hardhatGasLimit}-localhost-gas-${localhostGasLimit}` + ); + + before("Loading hardhat environment", function () { + // remove the directory if it exists and create an empty one + try { + fs.unlinkSync(fixtureProjectPath); + } catch {} + fs.mkdirSync(fixtureProjectPath, { recursive: true }); + + // generate and write the hardhat config + const hardhatConfigPath = path.resolve( + fixtureProjectPath, + "hardhat.config.js" + ); + + const hardhatConfig: HardhatUserConfig = { + solidity: "0.8.19", + networks: { + hardhat: {}, + localhost: {}, + }, + }; + if (hardhatGasLimit !== "default") { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + hardhatConfig.networks!.hardhat!.gas = hardhatGasLimit; + } + if (localhostGasLimit !== "default") { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + hardhatConfig.networks!.localhost!.gas = localhostGasLimit; + } + + fs.writeFileSync( + hardhatConfigPath, + ` +require("../../../../src/internal/index"); + +module.exports = ${JSON.stringify(hardhatConfig, null, 2)} +` + ); + + // generate and write the contracts + fs.mkdirSync(path.resolve(fixtureProjectPath, "contracts"), { + recursive: true, + }); + + fs.writeFileSync( + path.resolve(fixtureProjectPath, "contracts", "Example.sol"), + ` +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract Example { + function f() public {} +} +` + ); + + // start the environment + process.chdir(fixtureProjectPath); + process.env.HARDHAT_NETWORK = networkName; + + this.env = require("hardhat"); + }); + + after("Resetting hardhat", function () { + resetHardhatContext(); + }); + + afterEach(function () { + if (this.currentTest?.state === "failed") { + console.log(chalk.red("Failed in fixture project", fixtureProjectPath)); + } + }); +} diff --git a/packages/hardhat-ethers/test/error-messages.ts b/packages/hardhat-ethers/test/error-messages.ts new file mode 100644 index 0000000000..876d4e2777 --- /dev/null +++ b/packages/hardhat-ethers/test/error-messages.ts @@ -0,0 +1,57 @@ +import { assert, use } from "chai"; +import chaiAsPromised from "chai-as-promised"; + +import { useEnvironment } from "./environment"; + +use(chaiAsPromised); + +describe("error messages", function () { + describe("in-process hardhat network", function () { + useEnvironment("error-messages", "hardhat"); + + runTests(); + }); + + describe("hardhat node", function () { + useEnvironment("error-messages", "localhost"); + + runTests(); + }); +}); + +function runTests() { + beforeEach(async function () { + await this.env.run("compile", { + quiet: true, + }); + }); + + it("should return the right error message for a transaction that reverts with a reason string", async function () { + const contract = await this.env.ethers.deployContract("Contract"); + + await assert.isRejected( + contract.revertsWithReasonString(), + "reverted with reason string 'some reason'" + ); + }); + + it("should return the right error message for a transaction that reverts without a reason string", async function () { + const contract = await this.env.ethers.deployContract("Contract"); + + await assert.isRejected( + contract.revertsWithoutReasonString(), + "reverted without a reason string" + ); + }); + + it("should return the right error message for a transaction that reverts with an OOO", async function () { + const contract = await this.env.ethers.deployContract("Contract"); + + await assert.isRejected( + contract.succeeds({ + gasLimit: 21_064, + }), + "ran out of gas" + ); + }); +} diff --git a/packages/hardhat-ethers/test/example-contracts.ts b/packages/hardhat-ethers/test/example-contracts.ts new file mode 100644 index 0000000000..5a05a36d2e --- /dev/null +++ b/packages/hardhat-ethers/test/example-contracts.ts @@ -0,0 +1,75 @@ +import type { + BaseContract, + BaseContractMethod, + BigNumberish, + ContractTransactionResponse, +} from "ethers"; + +/* +contract Example { + uint public value; + uint public doubleValue; + event Inc(); + event IncBy(address indexed sender); + event AnotherEvent(); + + constructor() payable {} + + function inc() public { + value++; + doubleValue = 2 * value; + emit Inc(); + } + + function incTwice() public { + inc(); + inc(); + } + + function incBy() public { + value++; + doubleValue = 2 * value; + emit IncBy(msg.sender); + } + + function emitsTwoEvents() public { + emit Inc(); + emit AnotherEvent(); + } +} +*/ +export const EXAMPLE_CONTRACT = { + deploymentBytecode: + "0x6080604052610331806100136000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063371303c0146100675780633fa4f24514610071578063720bc6bd1461008f578063b190115914610099578063b482c753146100a3578063e3778184146100ad575b600080fd5b61006f6100cb565b005b610079610125565b6040516100869190610227565b60405180910390f35b61009761012b565b005b6100a161019c565b005b6100ab6101f6565b005b6100b5610208565b6040516100c29190610227565b60405180910390f35b6000808154809291906100dd90610271565b919050555060005460026100f191906102b9565b6001819055507fccf19ee637b3555bb918b8270dfab3f2b4ec60236d1ab717296aa85d6921224f60405160405180910390a1565b60005481565b60008081548092919061013d90610271565b9190505550600054600261015191906102b9565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fc63093b080b72e1d1b077e809b40feb58237e148b3199da268424ed3c4782fb260405160405180910390a2565b7fccf19ee637b3555bb918b8270dfab3f2b4ec60236d1ab717296aa85d6921224f60405160405180910390a17f601d819e31a3cd164f83f7a7cf9cb5042ab1acff87b773c68f63d059c0af2dc060405160405180910390a1565b6101fe6100cb565b6102066100cb565b565b60015481565b6000819050919050565b6102218161020e565b82525050565b600060208201905061023c6000830184610218565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061027c8261020e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036102ae576102ad610242565b5b600182019050919050565b60006102c48261020e565b91506102cf8361020e565b92508282026102dd8161020e565b915082820484148315176102f4576102f3610242565b5b509291505056fea2646970667358221220a345852efad6090e92c33ef3f7f2f303c698e0476c8205f9fdfacb7b567f235664736f6c63430008110033", + abi: [ + "event Inc()", + "event IncBy(address indexed)", + "event AnotherEvent()", + "function value() public view returns (uint256)", + "function doubleValue() public view returns (uint256)", + "function inc() public", + "function incTwice() public", + "function incBy() public", + "function emitsTwoEvents() public", + ], +}; + +export type ExampleContract = BaseContract & { + inc: BaseContractMethod<[], void, ContractTransactionResponse>; + incTwice: BaseContractMethod<[], void, ContractTransactionResponse>; + incBy: BaseContractMethod<[], void, ContractTransactionResponse>; + emitsTwoEvents: BaseContractMethod<[], void, ContractTransactionResponse>; +}; + +export type TestContractLib = BaseContract & { + printNumber: BaseContractMethod< + [BigNumberish], + bigint, + ContractTransactionResponse + >; +}; + +export type GreeterContract = BaseContract & { + greet: BaseContractMethod<[], string, string>; + setGreeting: BaseContractMethod<[string], void, ContractTransactionResponse>; +}; diff --git a/packages/hardhat-ethers/test/fixture-projects/.gitignore b/packages/hardhat-ethers/test/fixture-projects/.gitignore new file mode 100644 index 0000000000..4366b69da9 --- /dev/null +++ b/packages/hardhat-ethers/test/fixture-projects/.gitignore @@ -0,0 +1 @@ +generated-fixtures diff --git a/packages/hardhat-ethers/test/fixture-projects/error-messages/.gitignore b/packages/hardhat-ethers/test/fixture-projects/error-messages/.gitignore new file mode 100644 index 0000000000..4a4ecc528f --- /dev/null +++ b/packages/hardhat-ethers/test/fixture-projects/error-messages/.gitignore @@ -0,0 +1,2 @@ +cache/ +artifacts/ diff --git a/packages/hardhat-ethers/test/fixture-projects/error-messages/contracts/Contract.sol b/packages/hardhat-ethers/test/fixture-projects/error-messages/contracts/Contract.sol new file mode 100644 index 0000000000..9f85f1fb90 --- /dev/null +++ b/packages/hardhat-ethers/test/fixture-projects/error-messages/contracts/Contract.sol @@ -0,0 +1,13 @@ +pragma solidity ^0.8.0; + +contract Contract { + function succeeds() public {} + + function revertsWithoutReasonString() public { + require(false); + } + + function revertsWithReasonString() public { + require(false, "some reason"); + } +} diff --git a/packages/hardhat-ethers/test/fixture-projects/error-messages/hardhat.config.js b/packages/hardhat-ethers/test/fixture-projects/error-messages/hardhat.config.js new file mode 100644 index 0000000000..f9bdb39861 --- /dev/null +++ b/packages/hardhat-ethers/test/fixture-projects/error-messages/hardhat.config.js @@ -0,0 +1,5 @@ +require("../../../src/internal/index"); + +module.exports = { + solidity: "0.8.18", +}; diff --git a/packages/hardhat-ethers/test/fixture-projects/hardhat-project-with-gas-auto/.gitignore b/packages/hardhat-ethers/test/fixture-projects/hardhat-project-with-gas-auto/.gitignore new file mode 100644 index 0000000000..4a4ecc528f --- /dev/null +++ b/packages/hardhat-ethers/test/fixture-projects/hardhat-project-with-gas-auto/.gitignore @@ -0,0 +1,2 @@ +cache/ +artifacts/ diff --git a/packages/hardhat-ethers/test/fixture-projects/hardhat-project-with-gas-auto/hardhat.config.js b/packages/hardhat-ethers/test/fixture-projects/hardhat-project-with-gas-auto/hardhat.config.js new file mode 100644 index 0000000000..18a8d57186 --- /dev/null +++ b/packages/hardhat-ethers/test/fixture-projects/hardhat-project-with-gas-auto/hardhat.config.js @@ -0,0 +1,10 @@ +require("../../../src/internal/index"); + +module.exports = { + solidity: "0.5.15", + networks: { + hardhat: { + gas: "auto", + }, + }, +}; diff --git a/packages/hardhat-ethers/test/fixture-projects/minimal-project/hardhat.config.js b/packages/hardhat-ethers/test/fixture-projects/minimal-project/hardhat.config.js new file mode 100644 index 0000000000..c1f3384738 --- /dev/null +++ b/packages/hardhat-ethers/test/fixture-projects/minimal-project/hardhat.config.js @@ -0,0 +1,5 @@ +require("../../../src/internal/index"); + +module.exports = { + solidity: "0.8.0", +}; diff --git a/packages/hardhat-ethers/test/gas-config.ts b/packages/hardhat-ethers/test/gas-config.ts new file mode 100644 index 0000000000..13af3010cf --- /dev/null +++ b/packages/hardhat-ethers/test/gas-config.ts @@ -0,0 +1,143 @@ +import { assert, use } from "chai"; +import chaiAsPromised from "chai-as-promised"; + +import { useGeneratedEnvironment } from "./environment"; + +use(chaiAsPromised); + +// This test suite generates different gas configuration +// combinations and runs some common tests for all of them. + +type GasLimitValue = "default" | "auto" | number; +type ConnectedNetwork = "hardhat" | "localhost"; + +interface Combination { + hardhatGasLimit: GasLimitValue; + localhostGasLimit: GasLimitValue; + connectedNetwork: ConnectedNetwork; +} + +function generateCombinations(): Combination[] { + const result: Combination[] = []; + + const hardhatGasLimitValues: GasLimitValue[] = ["default", "auto", 1_000_000]; + const localhostGasLimitValues: GasLimitValue[] = [ + "default", + "auto", + 1_000_000, + ]; + const connectedNetworkValues: ConnectedNetwork[] = ["hardhat", "localhost"]; + + for (const hardhatGasLimit of hardhatGasLimitValues) { + for (const localhostGasLimit of localhostGasLimitValues) { + for (const connectedNetwork of connectedNetworkValues) { + result.push({ + hardhatGasLimit, + localhostGasLimit, + connectedNetwork, + }); + } + } + } + + return result; +} + +describe("gas config behavior", function () { + for (const { + hardhatGasLimit, + localhostGasLimit, + connectedNetwork, + } of generateCombinations()) { + describe(`hardhat gas limit: ${hardhatGasLimit} | localhostGasLimit: ${localhostGasLimit} | connectedNetwork: ${connectedNetwork}`, function () { + useGeneratedEnvironment( + hardhatGasLimit, + localhostGasLimit, + connectedNetwork + ); + + // for some combinations there will be a default gas limit that is used + // when no explicit gas limit is set by the user; in those cases, we + // assert that the tx indeed uses that gas limit; if not, then + // the result of an estimateGas call should be used + let defaultGasLimit: bigint | undefined; + if ( + (connectedNetwork === "hardhat" && hardhatGasLimit === 1_000_000) || + (connectedNetwork === "localhost" && localhostGasLimit === 1_000_000) + ) { + defaultGasLimit = 1_000_000n; + } else if ( + (connectedNetwork === "hardhat" && hardhatGasLimit === "default") || + (connectedNetwork === "localhost" && localhostGasLimit === "default") + ) { + // expect the block gas limit to be used as the default gas limit + defaultGasLimit = 30_000_000n; + } + + it("plain transaction, default gas limit", async function () { + const expectedGasLimit = defaultGasLimit ?? 21_001n; + + const [signer] = await this.env.ethers.getSigners(); + const tx = await signer.sendTransaction({ + to: signer, + }); + + assert.strictEqual(tx.gasLimit, expectedGasLimit); + }); + + it("plain transaction, explicit gas limit", async function () { + const [signer] = await this.env.ethers.getSigners(); + + const tx = await signer.sendTransaction({ + to: signer, + gasLimit: 500_000, + }); + + assert.strictEqual(tx.gasLimit, 500_000n); + }); + + it("contract deployment, default gas limit", async function () { + const expectedGasLimit = defaultGasLimit ?? 76_985n; + + await this.env.run("compile", { quiet: true }); + const example: any = await this.env.ethers.deployContract("Example"); + const deploymentTx = await example.deploymentTransaction(); + + assert.strictEqual(deploymentTx.gasLimit, expectedGasLimit); + }); + + it("contract deployment, explicit gas limit", async function () { + await this.env.run("compile", { quiet: true }); + const Example: any = await this.env.ethers.getContractFactory( + "Example" + ); + const example = await Example.deploy({ + gasLimit: 500_000, + }); + const deploymentTx = await example.deploymentTransaction(); + + assert.strictEqual(deploymentTx.gasLimit, 500_000n); + }); + + it("contract call, default gas limit", async function () { + const expectedGasLimit = defaultGasLimit ?? 21_186n; + + await this.env.run("compile", { quiet: true }); + const example: any = await this.env.ethers.deployContract("Example"); + const tx = await example.f(); + + assert.strictEqual(tx.gasLimit, expectedGasLimit); + }); + + it("contract call, explicit gas limit", async function () { + await this.env.run("compile", { quiet: true }); + const example: any = await this.env.ethers.deployContract("Example"); + const tx = await example.f({ + gasLimit: 500_000, + }); + + assert.strictEqual(tx.gasLimit, 500_000n); + }); + }); + } +}); diff --git a/packages/hardhat-ethers/test/gas-price.ts b/packages/hardhat-ethers/test/gas-price.ts new file mode 100644 index 0000000000..6fb5ca44d9 --- /dev/null +++ b/packages/hardhat-ethers/test/gas-price.ts @@ -0,0 +1,184 @@ +import { assert, use } from "chai"; +import chaiAsPromised from "chai-as-promised"; + +import { useEnvironment } from "./environment"; + +use(chaiAsPromised); + +describe("gas price overrides", function () { + describe("in-process hardhat network", function () { + useEnvironment("hardhat-project", "hardhat"); + + runTests(); + }); + + describe("hardhat node", function () { + useEnvironment("hardhat-project", "localhost"); + + runTests(); + }); +}); + +function runTests() { + describe("plain transactions", function () { + it("should use the given gas price if specified", async function () { + const [signer] = await this.env.ethers.getSigners(); + + const tx = await signer.sendTransaction({ + to: signer, + gasPrice: this.env.ethers.parseUnits("10", "gwei"), + }); + + const receipt = await tx.wait(); + + assert.strictEqual(tx.gasPrice, 10n * 10n ** 9n); + assert.strictEqual(receipt?.gasPrice, 10n * 10n ** 9n); + }); + + it("should use EIP-1559 values if maxFeePerGas and maxPriorityFeePerGas are specified, maxFeePerGas = baseFeePerGas", async function () { + const [signer] = await this.env.ethers.getSigners(); + + const baseFeePerGas = this.env.ethers.parseUnits("10", "gwei"); + const maxFeePerGas = baseFeePerGas; + const maxPriorityFeePerGas = this.env.ethers.parseUnits("1", "gwei"); + + await this.env.network.provider.send( + "hardhat_setNextBlockBaseFeePerGas", + [`0x${baseFeePerGas.toString(16)}`] + ); + + const tx = await signer.sendTransaction({ + to: signer, + maxFeePerGas, + maxPriorityFeePerGas, + }); + + const receipt = await tx.wait(); + + assert.strictEqual(tx.maxFeePerGas, maxFeePerGas); + assert.strictEqual(tx.maxPriorityFeePerGas, maxPriorityFeePerGas); + assert.strictEqual(receipt?.gasPrice, maxFeePerGas); + }); + + it("should use EIP-1559 values if maxFeePerGas and maxPriorityFeePerGas are specified, maxFeePerGas > baseFeePerGas", async function () { + const [signer] = await this.env.ethers.getSigners(); + + const baseFeePerGas = this.env.ethers.parseUnits("5", "gwei"); + const maxFeePerGas = this.env.ethers.parseUnits("10", "gwei"); + const maxPriorityFeePerGas = this.env.ethers.parseUnits("1", "gwei"); + + await this.env.network.provider.send( + "hardhat_setNextBlockBaseFeePerGas", + [`0x${baseFeePerGas.toString(16)}`] + ); + + const tx = await signer.sendTransaction({ + to: signer, + maxFeePerGas, + maxPriorityFeePerGas, + }); + + const receipt = await tx.wait(); + + assert.strictEqual(tx.maxFeePerGas, maxFeePerGas); + assert.strictEqual(tx.maxPriorityFeePerGas, maxPriorityFeePerGas); + assert.strictEqual( + receipt?.gasPrice, + baseFeePerGas + maxPriorityFeePerGas + ); + }); + + it("should use a default gas price if no value is specified", async function () { + const [signer] = await this.env.ethers.getSigners(); + + // we don't run any assertions here because the strategy + // used to set the default gas prices might change; we + // just check that the transaction is mined correctly + const tx = await signer.sendTransaction({ + to: signer, + }); + + await tx.wait(); + }); + + it("should use a default value for maxPriorityFeePerGas if maxFeePerGas is the only value specified", async function () { + const [signer] = await this.env.ethers.getSigners(); + + const baseFeePerGas = this.env.ethers.parseUnits("5", "gwei"); + const maxFeePerGas = this.env.ethers.parseUnits("10", "gwei"); + + // make sure that the max fee is enough + await this.env.network.provider.send( + "hardhat_setNextBlockBaseFeePerGas", + [`0x${baseFeePerGas.toString(16)}`] + ); + + const tx = await signer.sendTransaction({ + to: signer, + maxFeePerGas, + }); + + // we just check that the EIP-1559 values are set, because the + // strategy to select a default priority fee might change + assert.exists(tx.maxFeePerGas); + assert.exists(tx.maxPriorityFeePerGas); + }); + + it("should use a default maxFeePerGas if only maxPriorityFeePerGas is specified", async function () { + const [signer] = await this.env.ethers.getSigners(); + + const maxPriorityFeePerGas = this.env.ethers.parseUnits("1", "gwei"); + + const tx = await signer.sendTransaction({ + to: signer, + maxPriorityFeePerGas, + }); + + // we just check that the max fee is set, because the + // strategy to select its value might change + assert.exists(tx.maxFeePerGas); + + assert.strictEqual(tx.maxPriorityFeePerGas, maxPriorityFeePerGas); + }); + + it("should throw if both gasPrice and maxFeePerGas are specified", async function () { + const [signer] = await this.env.ethers.getSigners(); + + await assert.isRejected( + signer.sendTransaction({ + to: signer, + gasPrice: this.env.ethers.parseUnits("10", "gwei"), + maxFeePerGas: this.env.ethers.parseUnits("10", "gwei"), + }), + "Cannot send both gasPrice and maxFeePerGas params" + ); + }); + + it("should throw if both gasPrice and maxPriorityFeePerGas are specified", async function () { + const [signer] = await this.env.ethers.getSigners(); + + await assert.isRejected( + signer.sendTransaction({ + to: signer, + gasPrice: this.env.ethers.parseUnits("10", "gwei"), + maxPriorityFeePerGas: this.env.ethers.parseUnits("10", "gwei"), + }), + "Cannot send both gasPrice and maxPriorityFeePerGas" + ); + }); + + it("should throw if gasPrice, maxFeePerGas and maxPriorityFeePerGas are specified", async function () { + const [signer] = await this.env.ethers.getSigners(); + + await assert.isRejected( + signer.sendTransaction({ + to: signer, + gasPrice: this.env.ethers.parseUnits("10", "gwei"), + maxFeePerGas: this.env.ethers.parseUnits("10", "gwei"), + maxPriorityFeePerGas: this.env.ethers.parseUnits("10", "gwei"), + }), + "Cannot send both gasPrice and maxFeePerGas" + ); + }); + }); +} diff --git a/packages/hardhat-ethers/test/hardhat-ethers-provider.ts b/packages/hardhat-ethers/test/hardhat-ethers-provider.ts new file mode 100644 index 0000000000..ae3878dcf7 --- /dev/null +++ b/packages/hardhat-ethers/test/hardhat-ethers-provider.ts @@ -0,0 +1,1077 @@ +import { assert, use } from "chai"; +import chaiAsPromised from "chai-as-promised"; + +import { ExampleContract, EXAMPLE_CONTRACT } from "./example-contracts"; +import { usePersistentEnvironment } from "./environment"; +import { assertIsNotNull, assertWithin } from "./helpers"; + +use(chaiAsPromised); + +describe("hardhat ethers provider", function () { + usePersistentEnvironment("minimal-project"); + + it("can access itself through .provider", async function () { + assert.strictEqual( + this.env.ethers.provider, + this.env.ethers.provider.provider + ); + }); + + it("should have a destroy method", async function () { + this.env.ethers.provider.destroy(); + }); + + it("should have a send method for raw JSON-RPC requests", async function () { + const accounts = await this.env.ethers.provider.send("eth_accounts"); + + assert.isArray(accounts); + }); + + describe("getSigner", function () { + it("should get a signer using an index", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + assert.strictEqual( + await signer.getAddress(), + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + ); + }); + + it("should get a signer using an address", async function () { + const signer = await this.env.ethers.provider.getSigner( + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + ); + + assert.strictEqual( + await signer.getAddress(), + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + ); + }); + + it("should get a signer even if the address is all lowercase", async function () { + const signer = await this.env.ethers.provider.getSigner( + "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + ); + + assert.strictEqual( + await signer.getAddress(), + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + ); + }); + + it("should throw if the address checksum is wrong", async function () { + await assert.isRejected( + this.env.ethers.provider.getSigner( + "0XF39FD6E51AAD88F6F4CE6AB8827279CFFFB92266" + ), + "invalid address" + ); + }); + + it("should throw if the index doesn't match an account", async function () { + await assert.isRejected( + this.env.ethers.provider.getSigner(100), + "Tried to get account with index 100 but there are 20 accounts" + ); + }); + + it("should work for impersonated accounts", async function () { + const [s] = await this.env.ethers.getSigners(); + const randomAddress = "0xf965cceab9374d9f961581b6e38942e45e1cfeae"; + + await s.sendTransaction({ + to: randomAddress, + value: this.env.ethers.parseEther("1"), + }); + + await this.env.ethers.provider.send("hardhat_impersonateAccount", [ + randomAddress, + ]); + + const impersonatedSigner = await this.env.ethers.provider.getSigner( + randomAddress + ); + + // shouldn't revert + await impersonatedSigner.sendTransaction({ + to: s.address, + value: this.env.ethers.parseEther("0.1"), + }); + }); + }); + + it("should return the latest block number", async function () { + const latestBlockNumber = await this.env.ethers.provider.getBlockNumber(); + + assert.strictEqual(latestBlockNumber, 0); + + await this.env.ethers.provider.send("hardhat_mine"); + + assert.strictEqual(latestBlockNumber, 0); + }); + + it("should return the network", async function () { + const network = await this.env.ethers.provider.getNetwork(); + + assert.strictEqual(network.name, "hardhat"); + assert.strictEqual(network.chainId, 31337n); + }); + + it("should return fee data", async function () { + const feeData = await this.env.ethers.provider.getFeeData(); + + assert.typeOf(feeData.gasPrice, "bigint"); + assert.typeOf(feeData.maxFeePerGas, "bigint"); + assert.typeOf(feeData.maxPriorityFeePerGas, "bigint"); + }); + + describe("getBalance", function () { + beforeEach(async function () { + await this.env.network.provider.send("hardhat_reset"); + }); + + it("should return the balance of an address", async function () { + const balance = await this.env.ethers.provider.getBalance( + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + ); + + assert.strictEqual(balance, this.env.ethers.parseEther("10000")); + }); + + it("should return the balance of a signer", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const balance = await this.env.ethers.provider.getBalance(signer); + + assert.strictEqual(balance, this.env.ethers.parseEther("10000")); + }); + + it("should accept block numbers", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const gasLimit = 21_000n; + const gasPrice = this.env.ethers.parseUnits("100", "gwei"); + const value = this.env.ethers.parseEther("1"); + + await signer.sendTransaction({ + to: this.env.ethers.ZeroAddress, + value, + gasLimit, + gasPrice, + }); + + const blockNumber = await this.env.ethers.provider.getBlockNumber(); + + const balanceAfter = await this.env.ethers.provider.getBalance( + signer, + "latest" + ); + assert.strictEqual( + balanceAfter, + this.env.ethers.parseEther("10000") - gasLimit * gasPrice - value + ); + + const balanceBefore = await this.env.ethers.provider.getBalance( + signer, + blockNumber - 1 + ); + assert.strictEqual(balanceBefore, this.env.ethers.parseEther("10000")); + }); + + it("should accept block hashes", async function () { + const block = await this.env.ethers.provider.getBlock("latest"); + + assertIsNotNull(block); + assertIsNotNull(block.hash); + + const balance = await this.env.ethers.provider.getBalance( + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + block.hash + ); + + assert.strictEqual(balance, this.env.ethers.parseEther("10000")); + }); + + it("should return the balance of a contract", async function () { + // deploy a contract with some ETH + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract = await factory.deploy({ + value: this.env.ethers.parseEther("0.5"), + }); + + // check the balance of the contract + const balance = await this.env.ethers.provider.getBalance(contract); + + assert.strictEqual(balance, 5n * 10n ** 17n); + }); + }); + + describe("getTransactionCount", function () { + beforeEach(async function () { + await this.env.network.provider.send("hardhat_reset"); + }); + + it("should return the transaction count of an address", async function () { + const balance = await this.env.ethers.provider.getTransactionCount( + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + ); + + assert.strictEqual(balance, 0); + }); + + it("should return the transaction count of a signer", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const balance = await this.env.ethers.provider.getTransactionCount( + signer + ); + + assert.strictEqual(balance, 0); + }); + + it("should accept block numbers", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + await signer.sendTransaction({ + to: this.env.ethers.ZeroAddress, + }); + + const blockNumber = await this.env.ethers.provider.getBlockNumber(); + + const transactionCountAfter = + await this.env.ethers.provider.getTransactionCount(signer, "latest"); + assert.strictEqual(transactionCountAfter, 1); + + const transactionCountBefore = + await this.env.ethers.provider.getTransactionCount( + signer, + blockNumber - 1 + ); + assert.strictEqual(transactionCountBefore, 0); + }); + + it("should accept block hashes", async function () { + const block = await this.env.ethers.provider.getBlock("latest"); + + assertIsNotNull(block); + assertIsNotNull(block.hash); + + const balance = await this.env.ethers.provider.getTransactionCount( + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + block.hash + ); + + assert.strictEqual(balance, 0); + }); + }); + + describe("getCode", function () { + // deploys an empty contract + const deploymentBytecode = + "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220eeaf807039e8b863535433564733b36afab56700620e89f192795eaf32f272ee64736f6c63430008110033"; + const contractBytecode = + "0x6080604052600080fdfea2646970667358221220eeaf807039e8b863535433564733b36afab56700620e89f192795eaf32f272ee64736f6c63430008110033"; + + let contract: ExampleContract; + beforeEach(async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + [], + deploymentBytecode, + signer + ); + contract = await factory.deploy(); + }); + + it("should return the code of an address", async function () { + const contractAddress = await contract.getAddress(); + + const code = await this.env.ethers.provider.getCode(contractAddress); + + assert.strictEqual(code, contractBytecode); + }); + + it("should return the code of a contract", async function () { + const code = await this.env.ethers.provider.getCode(contract); + + assert.strictEqual(code, contractBytecode); + }); + + it("should accept block numbers", async function () { + const codeAfter = await this.env.ethers.provider.getCode( + contract, + "latest" + ); + assert.strictEqual(codeAfter, contractBytecode); + + const blockNumber = await this.env.ethers.provider.getBlockNumber(); + const codeBefore = await this.env.ethers.provider.getCode( + contract, + blockNumber - 1 + ); + assert.strictEqual(codeBefore, "0x"); + }); + + it("should accept block hashes", async function () { + const block = await this.env.ethers.provider.getBlock("latest"); + + assertIsNotNull(block); + assertIsNotNull(block.hash); + + const code = await this.env.ethers.provider.getCode(contract, block.hash); + assert.strictEqual(code, contractBytecode); + }); + }); + + describe("getStorage", function () { + let contract: ExampleContract; + beforeEach(async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + contract = await factory.deploy(); + }); + + it("should get the storage of an address", async function () { + const contractAddress = await contract.getAddress(); + + await contract.inc(); + + const value = await this.env.ethers.provider.getStorage( + contractAddress, + 0 + ); + const doubleValue = await this.env.ethers.provider.getStorage( + contractAddress, + 1 + ); + + assert.strictEqual( + value, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + assert.strictEqual( + doubleValue, + "0x0000000000000000000000000000000000000000000000000000000000000002" + ); + }); + + it("should get the storage of a contract", async function () { + await contract.inc(); + + const value = await this.env.ethers.provider.getStorage(contract, 0); + const doubleValue = await this.env.ethers.provider.getStorage( + contract, + 1 + ); + + assert.strictEqual( + value, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + assert.strictEqual( + doubleValue, + "0x0000000000000000000000000000000000000000000000000000000000000002" + ); + }); + + it("should accept block numbers", async function () { + await contract.inc(); + + const storageValueAfter = await this.env.ethers.provider.getStorage( + contract, + 0, + "latest" + ); + assert.strictEqual( + storageValueAfter, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + + const blockNumber = await this.env.ethers.provider.getBlockNumber(); + const storageValueBefore = await this.env.ethers.provider.getStorage( + contract, + 0, + blockNumber - 1 + ); + assert.strictEqual( + storageValueBefore, + "0x0000000000000000000000000000000000000000000000000000000000000000" + ); + }); + + it("should accept block hashes", async function () { + await contract.inc(); + + const block = await this.env.ethers.provider.getBlock("latest"); + + assertIsNotNull(block); + assertIsNotNull(block.hash); + + const storageValue = await this.env.ethers.provider.getStorage( + contract, + 0, + block.hash + ); + + assert.strictEqual( + storageValue, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + }); + + it("should accept short hex encode strings as the storage position", async function () { + await contract.inc(); + + const value = await this.env.ethers.provider.getStorage(contract, "0x0"); + const doubleValue = await this.env.ethers.provider.getStorage( + contract, + "0x1" + ); + assert.strictEqual( + value, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + assert.strictEqual( + doubleValue, + "0x0000000000000000000000000000000000000000000000000000000000000002" + ); + }); + + it("should accept long hex encode strings as the storage position", async function () { + await contract.inc(); + + const value = await this.env.ethers.provider.getStorage( + contract, + "0x0000000000000000000000000000000000000000000000000000000000000000" + ); + const doubleValue = await this.env.ethers.provider.getStorage( + contract, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + assert.strictEqual( + value, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + assert.strictEqual( + doubleValue, + "0x0000000000000000000000000000000000000000000000000000000000000002" + ); + }); + + it("should accept bigints as the storage position", async function () { + await contract.inc(); + + const value = await this.env.ethers.provider.getStorage(contract, 0n); + const doubleValue = await this.env.ethers.provider.getStorage( + contract, + 1n + ); + assert.strictEqual( + value, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + assert.strictEqual( + doubleValue, + "0x0000000000000000000000000000000000000000000000000000000000000002" + ); + }); + }); + + describe("estimateGas", function () { + it("should estimate gas for a value transaction", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const gasEstimation = await this.env.ethers.provider.estimateGas({ + from: signer.address, + to: signer.address, + }); + + assert.strictEqual(Number(gasEstimation), 21_001); + }); + + it("should estimate gas for a contract call", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract = await factory.deploy(); + + const gasEstimation = await this.env.ethers.provider.estimateGas({ + from: signer.address, + to: await contract.getAddress(), + data: "0x371303c0", // inc() + }); + + assertWithin(Number(gasEstimation), 65_000, 70_000); + }); + + it("should accept a block number", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract = await factory.deploy(); + + await contract.inc(); + const blockNumber = await this.env.ethers.provider.getBlockNumber(); + + const gasEstimationAfter = await this.env.ethers.provider.estimateGas({ + from: signer.address, + to: await contract.getAddress(), + data: "0x371303c0", // inc() + blockTag: "latest", + }); + + assertWithin(Number(gasEstimationAfter), 30_000, 35_000); + + const gasEstimationBefore = await this.env.ethers.provider.estimateGas({ + from: signer.address, + to: await contract.getAddress(), + data: "0x371303c0", // inc() + blockTag: blockNumber - 1, + }); + + assertWithin(Number(gasEstimationBefore), 65_000, 70_000); + }); + + it("should accept a block hash", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract = await factory.deploy(); + + const block = await this.env.ethers.provider.getBlock("latest"); + + assertIsNotNull(block); + assertIsNotNull(block.hash); + + const gasEstimation = await this.env.ethers.provider.estimateGas({ + from: signer.address, + to: await contract.getAddress(), + data: "0x371303c0", // inc() + blockTag: block.hash, + }); + + assertWithin(Number(gasEstimation), 65_000, 70_000); + }); + + it("should use the pending block by default", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract = await factory.deploy(); + + // this estimates the cost of increasing the value from 0 to 1 + const gasEstimationFirstInc = await this.env.ethers.provider.estimateGas({ + from: signer.address, + to: await contract.getAddress(), + data: "0x371303c0", // inc() + }); + + await this.env.ethers.provider.send("evm_setAutomine", [false]); + await contract.inc(); + + // if the pending block is used, this should estimate the cost of + // increasing the value from 1 to 2, and this should be cheaper than + // increasing it from 0 to 1 + const gasEstimationSecondInc = await this.env.ethers.provider.estimateGas( + { + from: signer.address, + to: await contract.getAddress(), + data: "0x371303c0", // inc() + } + ); + + assert.isTrue( + gasEstimationSecondInc < gasEstimationFirstInc, + "Expected second gas estimation to be lower" + ); + + await this.env.ethers.provider.send("evm_setAutomine", [true]); + }); + }); + + describe("call", function () { + it("should make a contract call using an address", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract = await factory.deploy(); + await contract.inc(); + + const result = await this.env.ethers.provider.call({ + from: signer.address, + to: await contract.getAddress(), + data: "0x3fa4f245", // value() + }); + + assert.strictEqual( + result, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + }); + + it("should make a contract call using a contract", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract = await factory.deploy(); + await contract.inc(); + + const result = await this.env.ethers.provider.call({ + from: signer.address, + to: contract, + data: "0x3fa4f245", // value() + }); + + assert.strictEqual( + result, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + }); + + it("should accept a block number", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract = await factory.deploy(); + await contract.inc(); + + const blockNumber = await this.env.ethers.provider.getBlockNumber(); + + const resultAfter = await this.env.ethers.provider.call({ + from: signer.address, + to: contract, + data: "0x3fa4f245", // value() + blockTag: "latest", + }); + + assert.strictEqual( + resultAfter, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + + const resultBefore = await this.env.ethers.provider.call({ + from: signer.address, + to: contract, + data: "0x3fa4f245", // value() + blockTag: blockNumber - 1, + }); + + assert.strictEqual( + resultBefore, + "0x0000000000000000000000000000000000000000000000000000000000000000" + ); + }); + + it("should accept a block number as a bigint", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract = await factory.deploy(); + await contract.inc(); + + const blockNumber = await this.env.ethers.provider.getBlockNumber(); + + const resultAfter = await this.env.ethers.provider.call({ + from: signer.address, + to: contract, + data: "0x3fa4f245", // value() + blockTag: "latest", + }); + + assert.strictEqual( + resultAfter, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + + const resultBefore = await this.env.ethers.provider.call({ + from: signer.address, + to: contract, + data: "0x3fa4f245", // value() + blockTag: BigInt(blockNumber - 1), + }); + + assert.strictEqual( + resultBefore, + "0x0000000000000000000000000000000000000000000000000000000000000000" + ); + }); + + it("should accept a block hash", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract = await factory.deploy(); + await contract.inc(); + + const block = await this.env.ethers.provider.getBlock("latest"); + + assertIsNotNull(block); + assertIsNotNull(block.hash); + + const result = await this.env.ethers.provider.call({ + from: signer.address, + to: contract, + data: "0x3fa4f245", // value() + blockTag: block.hash, + }); + + assert.strictEqual( + result, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + }); + }); + + describe("broadcastTransaction", function () { + it("should send a raw transaction", async function () { + await this.env.ethers.provider.send("hardhat_reset"); + // private key of the first unlocked account + const wallet = new this.env.ethers.Wallet( + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", + this.env.ethers.provider + ); + const rawTx = await wallet.signTransaction({ + to: this.env.ethers.ZeroAddress, + chainId: 31337, + gasPrice: 100n * 10n ** 9n, + gasLimit: 21_000, + }); + + const tx = await this.env.ethers.provider.broadcastTransaction(rawTx); + + assert.strictEqual(tx.from, wallet.address); + assert.strictEqual(tx.to, this.env.ethers.ZeroAddress); + assert.strictEqual(tx.gasLimit, 21_000n); + }); + }); + + describe("getBlock", function () { + it("should accept latest and earliest block tags", async function () { + await this.env.ethers.provider.send("hardhat_reset"); + await this.env.ethers.provider.send("hardhat_mine"); + await this.env.ethers.provider.send("hardhat_mine"); + await this.env.ethers.provider.send("hardhat_mine"); + + const latestBlock = await this.env.ethers.provider.getBlock("latest"); + assertIsNotNull(latestBlock); + assert.strictEqual(latestBlock.number, 3); + + const earliestBlock = await this.env.ethers.provider.getBlock("earliest"); + assertIsNotNull(earliestBlock); + assert.strictEqual(earliestBlock.number, 0); + }); + + it("should accept numbers", async function () { + await this.env.ethers.provider.send("hardhat_reset"); + await this.env.ethers.provider.send("hardhat_mine"); + await this.env.ethers.provider.send("hardhat_mine"); + await this.env.ethers.provider.send("hardhat_mine"); + + const latestBlock = await this.env.ethers.provider.getBlock(3); + assertIsNotNull(latestBlock); + assert.strictEqual(latestBlock.number, 3); + + const earliestBlock = await this.env.ethers.provider.getBlock(1); + assertIsNotNull(earliestBlock); + assert.strictEqual(earliestBlock.number, 1); + }); + + it("should accept block hashes", async function () { + await this.env.ethers.provider.send("hardhat_reset"); + + const blockByNumber = await this.env.ethers.provider.getBlock(0); + assertIsNotNull(blockByNumber); + assertIsNotNull(blockByNumber.hash); + + const blockByHash = await this.env.ethers.provider.getBlock( + blockByNumber.hash + ); + assertIsNotNull(blockByHash); + + assert.strictEqual(blockByNumber.number, blockByHash.number); + assert.strictEqual(blockByNumber.hash, blockByHash.hash); + }); + + it("shouldn't prefetch transactions by default", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const tx = await signer.sendTransaction({ to: signer.address }); + + const block = await this.env.ethers.provider.getBlock("latest"); + assertIsNotNull(block); + + assert.lengthOf(block.transactions, 1); + assert.strictEqual(block.transactions[0], tx.hash); + + assert.throws(() => block.prefetchedTransactions); + }); + + it("shouldn't prefetch transactions if false is passed", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const tx = await signer.sendTransaction({ to: signer.address }); + + const block = await this.env.ethers.provider.getBlock("latest", false); + assertIsNotNull(block); + + assert.lengthOf(block.transactions, 1); + assert.strictEqual(block.transactions[0], tx.hash); + + assert.throws(() => block.prefetchedTransactions); + }); + + it("should prefetch transactions if true is passed", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const tx = await signer.sendTransaction({ to: signer.address }); + + const block = await this.env.ethers.provider.getBlock("latest", true); + assertIsNotNull(block); + + assert.lengthOf(block.transactions, 1); + assert.strictEqual(block.transactions[0], tx.hash); + + assert.lengthOf(block.prefetchedTransactions, 1); + assert.strictEqual(block.prefetchedTransactions[0].hash, tx.hash); + assert.strictEqual(block.prefetchedTransactions[0].from, signer.address); + }); + }); + + describe("getTransaction", function () { + it("should get a transaction by its hash", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const sentTx = await signer.sendTransaction({ to: signer.address }); + + const fetchedTx = await this.env.ethers.provider.getTransaction( + sentTx.hash + ); + + assertIsNotNull(fetchedTx); + assert.strictEqual(fetchedTx.hash, sentTx.hash); + }); + + it("should return null if the transaction doesn't exist", async function () { + const tx = await this.env.ethers.provider.getTransaction( + "0x0000000000000000000000000000000000000000000000000000000000000000" + ); + + assert.isNull(tx); + }); + }); + + describe("getTransactionReceipt", function () { + it("should get a receipt by the transaction hash", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const tx = await signer.sendTransaction({ to: signer.address }); + + const receipt = await this.env.ethers.provider.getTransactionReceipt( + tx.hash + ); + + assertIsNotNull(receipt); + assert.strictEqual(receipt.hash, tx.hash); + assert.strictEqual(receipt.status, 1); + }); + + it("should return null if the transaction doesn't exist", async function () { + const receipt = await this.env.ethers.provider.getTransactionReceipt( + "0x0000000000000000000000000000000000000000000000000000000000000000" + ); + + assert.isNull(receipt); + }); + }); + + describe("getLogs", function () { + // keccak("Inc()") + const INC_EVENT_TOPIC = + "0xccf19ee637b3555bb918b8270dfab3f2b4ec60236d1ab717296aa85d6921224f"; + // keccak("AnotherEvent()") + const ANOTHER_EVENT_TOPIC = + "0x601d819e31a3cd164f83f7a7cf9cb5042ab1acff87b773c68f63d059c0af2dc0"; + + it("should get the logs from the latest block by default", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract = await factory.deploy(); + + await contract.inc(); + + const logs = await this.env.ethers.provider.getLogs({}); + + assert.lengthOf(logs, 1); + + const log = logs[0]; + assert.strictEqual(log.address, await contract.getAddress()); + assert.lengthOf(log.topics, 1); + assert.strictEqual(log.topics[0], INC_EVENT_TOPIC); + }); + + it("should get the logs by block number", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract = await factory.deploy(); + + await contract.inc(); + await this.env.ethers.provider.send("hardhat_mine"); + const blockNumber = await this.env.ethers.provider.getBlockNumber(); + + // latest block shouldn't have logs + const latestBlockLogs = await this.env.ethers.provider.getLogs({ + fromBlock: blockNumber, + toBlock: blockNumber, + }); + assert.lengthOf(latestBlockLogs, 0); + + const logs = await this.env.ethers.provider.getLogs({ + fromBlock: blockNumber - 1, + toBlock: blockNumber - 1, + }); + + assert.lengthOf(logs, 1); + + const log = logs[0]; + assert.strictEqual(log.address, await contract.getAddress()); + assert.lengthOf(log.topics, 1); + assert.strictEqual(log.topics[0], INC_EVENT_TOPIC); + }); + + it("should get the logs by address", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract1 = await factory.deploy(); + const contract2 = await factory.deploy(); + + await contract1.inc(); + await contract2.inc(); + const blockNumber = await this.env.ethers.provider.getBlockNumber(); + + const logs = await this.env.ethers.provider.getLogs({ + fromBlock: blockNumber - 1, + toBlock: blockNumber, + }); + + assert.lengthOf(logs, 2); + + const logsByAddress = await this.env.ethers.provider.getLogs({ + address: await contract1.getAddress(), + fromBlock: blockNumber - 1, + toBlock: blockNumber, + }); + + assert.lengthOf(logsByAddress, 1); + assert.strictEqual( + logsByAddress[0].address, + await contract1.getAddress() + ); + }); + + it("should get the logs by an array of addresses", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract1 = await factory.deploy(); + const contract2 = await factory.deploy(); + const contract3 = await factory.deploy(); + + await contract1.inc(); + await contract2.inc(); + await contract3.inc(); + const blockNumber = await this.env.ethers.provider.getBlockNumber(); + + const logs = await this.env.ethers.provider.getLogs({ + fromBlock: blockNumber - 2, + toBlock: blockNumber, + }); + + assert.lengthOf(logs, 3); + + const contract1Address = await contract1.getAddress(); + const contract2Address = await contract2.getAddress(); + const logsByAddress = await this.env.ethers.provider.getLogs({ + address: [contract1Address, contract2Address], + fromBlock: blockNumber - 2, + toBlock: blockNumber, + }); + + assert.lengthOf(logsByAddress, 2); + assert.strictEqual(logsByAddress[0].address, contract1Address); + assert.strictEqual(logsByAddress[1].address, contract2Address); + }); + + it("should get the logs by topic", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory<[], ExampleContract>( + EXAMPLE_CONTRACT.abi, + EXAMPLE_CONTRACT.deploymentBytecode, + signer + ); + const contract = await factory.deploy(); + + await contract.emitsTwoEvents(); + + const logs = await this.env.ethers.provider.getLogs({}); + assert.lengthOf(logs, 2); + + const incEventLogs = await this.env.ethers.provider.getLogs({ + topics: [INC_EVENT_TOPIC], + }); + + assert.lengthOf(incEventLogs, 1); + assert.lengthOf(incEventLogs[0].topics, 1); + assert.strictEqual(incEventLogs[0].topics[0], INC_EVENT_TOPIC); + + const anotherEventLogs = await this.env.ethers.provider.getLogs({ + topics: [ANOTHER_EVENT_TOPIC], + }); + + assert.lengthOf(anotherEventLogs, 1); + assert.lengthOf(anotherEventLogs[0].topics, 1); + assert.strictEqual(anotherEventLogs[0].topics[0], ANOTHER_EVENT_TOPIC); + }); + }); +}); diff --git a/packages/hardhat-ethers/test/hardhat-ethers-signer.ts b/packages/hardhat-ethers/test/hardhat-ethers-signer.ts new file mode 100644 index 0000000000..10ca35870b --- /dev/null +++ b/packages/hardhat-ethers/test/hardhat-ethers-signer.ts @@ -0,0 +1,296 @@ +import { assert } from "chai"; + +import { usePersistentEnvironment } from "./environment"; +import { ExampleContract, EXAMPLE_CONTRACT } from "./example-contracts"; +import { assertIsNotNull, assertWithin } from "./helpers"; + +describe("hardhat ethers signer", function () { + describe("minimal project", function () { + usePersistentEnvironment("minimal-project"); + + it("has an address field that matches the address", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + assert.isString(signer.address); + assert.strictEqual(signer.address, await signer.getAddress()); + }); + + it("can be connected to a provider", async function () { + if ( + process.env.INFURA_URL === undefined || + process.env.INFURA_URL === "" + ) { + this.skip(); + } + + const signerConnectedToHardhat = await this.env.ethers.provider.getSigner( + 0 + ); + + const nonceInHardhat = await signerConnectedToHardhat.getNonce(); + + const mainnetProvider = new this.env.ethers.JsonRpcProvider( + process.env.INFURA_URL + ); + + const signerConnectedToMainnet = + signerConnectedToHardhat.connect(mainnetProvider); + + const nonceInMainnet = await signerConnectedToMainnet.getNonce(); + + assert.strictEqual(nonceInHardhat, 0); + assert.isAbove(nonceInMainnet, 0); + }); + + it("can get the nonce of the signer", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + assert.strictEqual(await signer.getNonce(), 0); + + await signer.sendTransaction({ to: signer }); + assert.strictEqual(await signer.getNonce(), 1); + }); + + it("should populate a call/tx", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const populatedCall = await signer.populateCall({ + to: signer, + }); + + assert.strictEqual(populatedCall.from, signer.address); + + // populateTransaction does exactly the same + const populatedTx = await signer.populateCall({ + to: signer, + }); + + assert.strictEqual(populatedTx.from, signer.address); + }); + + describe("estimateGas", function () { + it("should estimate gas for a value transaction", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const gasEstimation = await signer.estimateGas({ + to: signer, + }); + + assert.strictEqual(Number(gasEstimation), 21_001); + }); + + it("should estimate gas for a contract call", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory< + [], + ExampleContract + >(EXAMPLE_CONTRACT.abi, EXAMPLE_CONTRACT.deploymentBytecode, signer); + const contract = await factory.deploy(); + + const gasEstimation = await signer.estimateGas({ + to: contract, + data: "0x371303c0", // inc() + }); + + assertWithin(Number(gasEstimation), 65_000, 70_000); + }); + }); + + describe("call", function () { + it("should make a contract call", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + const factory = new this.env.ethers.ContractFactory< + [], + ExampleContract + >(EXAMPLE_CONTRACT.abi, EXAMPLE_CONTRACT.deploymentBytecode, signer); + const contract = await factory.deploy(); + await contract.inc(); + + const result = await signer.call({ + to: contract, + data: "0x3fa4f245", // value() + }); + + assert.strictEqual( + result, + "0x0000000000000000000000000000000000000000000000000000000000000001" + ); + }); + }); + + describe("sendTransaction", function () { + it("should send a transaction", async function () { + const sender = await this.env.ethers.provider.getSigner(0); + const receiver = await this.env.ethers.provider.getSigner(1); + + const balanceBefore = await this.env.ethers.provider.getBalance( + receiver + ); + + await sender.sendTransaction({ + to: receiver, + value: this.env.ethers.parseEther("1"), + }); + + const balanceAfter = await this.env.ethers.provider.getBalance( + receiver + ); + + const balanceDifference = balanceAfter - balanceBefore; + + assert.strictEqual(balanceDifference, 10n ** 18n); + }); + }); + + describe("signMessage", function () { + it("should sign a message", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const signedMessage = await signer.signMessage("hello"); + + assert.strictEqual( + signedMessage, + "0xf16ea9a3478698f695fd1401bfe27e9e4a7e8e3da94aa72b021125e31fa899cc573c48ea3fe1d4ab61a9db10c19032026e3ed2dbccba5a178235ac27f94504311c" + ); + }); + }); + + describe("signTypedData", function () { + const types = { + Person: [ + { name: "name", type: "string" }, + { name: "wallet", type: "address" }, + ], + Mail: [ + { name: "from", type: "Person" }, + { name: "to", type: "Person" }, + { name: "contents", type: "string" }, + ], + }; + + const data = { + from: { + name: "John", + wallet: "0x0000000000000000000000000000000000000001", + }, + to: { + name: "Mark", + wallet: "0x0000000000000000000000000000000000000002", + }, + contents: "something", + }; + + it("should sign data", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const signedData = await signer.signTypedData( + { + chainId: 31337, + }, + types, + data + ); + + assert.strictEqual( + signedData, + "0xbea20009786d1f69327eea384d6b8082f2d35b41212d1acbbd490516f0ae776748e93d4603df49033f89ce6a97afba4523d753d35e962ea431cc706642ad713f1b" + ); + }); + + it("should use the chain id", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const signedData = await signer.signTypedData( + { + chainId: 10101, + }, + types, + data + ); + + // we get a different value from the different test because we changed the + // chainId + assert.strictEqual( + signedData, + "0x8a6a6aeca0cf03dbffd6d7b15207c0dcf5c7daa432e510b5de1ebecff8de6cd457e2eaa9fe96c11474a7344584f4b128c773153836142647c426b5f2c3eb6c701b" + ); + }); + }); + + describe("default gas limit", function () { + it("should use the block gas limit for the in-process hardhat network", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const tx = await signer.sendTransaction({ to: signer }); + + if (!("blockGasLimit" in this.env.network.config)) { + assert.fail("test should be run in the hardhat network"); + } + + const blockGasLimit = this.env.network.config.blockGasLimit; + assert.strictEqual(Number(tx.gasLimit), blockGasLimit); + }); + + it("should use custom gas limit, if provided", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const tx = await signer.sendTransaction({ + to: signer, + gasLimit: 30_000, + }); + + assert.strictEqual(tx.gasLimit, 30_000n); + }); + }); + + describe("nonce management", function () { + it("should send a second transaction with the right nonce if the first one wasn't mined", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + await this.env.ethers.provider.send("evm_setAutomine", [false]); + + const tx1 = await signer.sendTransaction({ + to: signer, + gasLimit: 30_000, + }); + const tx2 = await signer.sendTransaction({ + to: signer, + gasLimit: 30_000, + }); + + assert.notEqual(tx1.nonce, tx2.nonce); + assert.strictEqual(tx2.nonce, tx1.nonce + 1); + + await this.env.ethers.provider.send("hardhat_mine", []); + + const latestBlock = await this.env.ethers.provider.getBlock("latest"); + + assertIsNotNull(latestBlock); + + assert.lengthOf(latestBlock.transactions, 2); + }); + }); + }); + + describe('project with gas set to "auto"', function () { + usePersistentEnvironment("hardhat-project-with-gas-auto"); + + it("should estimate the gas of the transaction", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const tx = await signer.sendTransaction({ to: signer }); + + assert.strictEqual(tx.gasLimit, 21_001n); + }); + + it("should use custom gas limit, if provided", async function () { + const signer = await this.env.ethers.provider.getSigner(0); + + const tx = await signer.sendTransaction({ + to: signer, + gasLimit: 30_000, + }); + + assert.strictEqual(tx.gasLimit, 30_000n); + }); + }); +}); diff --git a/packages/hardhat-ethers/test/helpers.ts b/packages/hardhat-ethers/test/helpers.ts index 17642ecd83..2e1f573070 100644 --- a/packages/hardhat-ethers/test/helpers.ts +++ b/packages/hardhat-ethers/test/helpers.ts @@ -1,28 +1,46 @@ -import { resetHardhatContext } from "hardhat/plugins-testing"; -import { HardhatRuntimeEnvironment } from "hardhat/types"; -import path from "path"; +import { assert } from "chai"; +import { ContractRunner, Signer } from "ethers"; -// Import this plugin type extensions for the HardhatRuntimeEnvironment -import "../src/internal/type-extensions"; - -declare module "mocha" { - interface Context { - env: HardhatRuntimeEnvironment; +export function assertWithin( + value: number | bigint, + min: number | bigint, + max: number | bigint +) { + if (value < min || value > max) { + assert.fail(`Expected ${value} to be between ${min} and ${max}`); } } -export function useEnvironment( - fixtureProjectName: string, - networkName = "localhost" -) { - beforeEach("Loading hardhat environment", function () { - process.chdir(path.join(__dirname, "fixture-projects", fixtureProjectName)); - process.env.HARDHAT_NETWORK = networkName; +export function assertIsNotNull( + value: T +): asserts value is Exclude { + assert.isNotNull(value); +} + +export function assertIsSigner( + value: ContractRunner | null +): asserts value is Signer { + assertIsNotNull(value); + assert.isTrue("getAddress" in value); + assert.isTrue("signTransaction" in value); +} + +export const sleep = (timeout: number) => + new Promise((resolve) => setTimeout(resolve, timeout)); + +export async function tryUntil(f: () => any) { + const maxTries = 20; + let tries = 0; + while (tries < maxTries) { + try { + await f(); + return; + } catch {} - this.env = require("hardhat"); - }); + await sleep(50); + + tries++; + } - afterEach("Resetting hardhat", function () { - resetHardhatContext(); - }); + f(); } diff --git a/packages/hardhat-ethers/test/index.ts b/packages/hardhat-ethers/test/index.ts index 50bd7757d8..0f417dc746 100644 --- a/packages/hardhat-ethers/test/index.ts +++ b/packages/hardhat-ethers/test/index.ts @@ -1,19 +1,22 @@ +import type { ethers as EthersT } from "ethers"; import chai, { assert } from "chai"; import chaiAsPromised from "chai-as-promised"; -import { ethers, Signer } from "ethers"; +import { ethers } from "ethers"; import { NomicLabsHardhatPluginError } from "hardhat/plugins"; import { Artifact } from "hardhat/types"; -import util from "util"; -import { EthersProviderWrapper } from "../src/internal/ethers-provider-wrapper"; +import { HardhatEthersSigner } from "../src/signers"; -import { useEnvironment } from "./helpers"; +import { useEnvironment } from "./environment"; +import { GreeterContract, TestContractLib } from "./example-contracts"; +import { assertIsNotNull, assertIsSigner } from "./helpers"; chai.use(chaiAsPromised); describe("Ethers plugin", function () { - describe("ganache", function () { - useEnvironment("hardhat-project"); + describe("hardhat node", function () { + useEnvironment("hardhat-project", "localhost"); + describe("HRE extensions", function () { it("should extend hardhat runtime environment", function () { assert.isDefined(this.env.ethers); @@ -26,84 +29,6 @@ describe("Ethers plugin", function () { ...Object.keys(ethers), ]); }); - - describe("Custom formatters", function () { - const assertBigNumberFormat = function ( - BigNumber: any, - value: string | number, - expected: string - ) { - assert.equal(util.format("%o", BigNumber.from(value)), expected); - }; - - describe("BigNumber", function () { - it("should format zero unaltered", function () { - assertBigNumberFormat( - this.env.ethers.BigNumber, - 0, - 'BigNumber { value: "0" }' - ); - }); - - it("should provide human readable versions of positive integers", function () { - const BigNumber = this.env.ethers.BigNumber; - - assertBigNumberFormat(BigNumber, 1, 'BigNumber { value: "1" }'); - assertBigNumberFormat(BigNumber, 999, 'BigNumber { value: "999" }'); - assertBigNumberFormat( - BigNumber, - 1000, - 'BigNumber { value: "1000" }' - ); - assertBigNumberFormat( - BigNumber, - 999999, - 'BigNumber { value: "999999" }' - ); - assertBigNumberFormat( - BigNumber, - 1000000, - 'BigNumber { value: "1000000" }' - ); - assertBigNumberFormat( - BigNumber, - "999999999999999999292", - 'BigNumber { value: "999999999999999999292" }' - ); - }); - - it("should provide human readable versions of negative integers", function () { - const BigNumber = this.env.ethers.BigNumber; - - assertBigNumberFormat(BigNumber, -1, 'BigNumber { value: "-1" }'); - assertBigNumberFormat( - BigNumber, - -999, - 'BigNumber { value: "-999" }' - ); - assertBigNumberFormat( - BigNumber, - -1000, - 'BigNumber { value: "-1000" }' - ); - assertBigNumberFormat( - BigNumber, - -999999, - 'BigNumber { value: "-999999" }' - ); - assertBigNumberFormat( - BigNumber, - -1000000, - 'BigNumber { value: "-1000000" }' - ); - assertBigNumberFormat( - BigNumber, - "-999999999999999999292", - 'BigNumber { value: "-999999999999999999292" }' - ); - }); - }); - }); }); describe("Provider", function () { @@ -112,12 +37,15 @@ describe("Ethers plugin", function () { "eth_accounts", [] ); - assert.equal(accounts[0], "0x90f8bf6a479f320ead074411a4b0e7944ea8c9c1"); + assert.strictEqual( + accounts[0], + "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266" + ); }); }); describe("Signers and contracts helpers", function () { - let signers: ethers.Signer[]; + let signers: HardhatEthersSigner[]; let greeterArtifact: Artifact; let iGreeterArtifact: Artifact; @@ -132,48 +60,56 @@ describe("Ethers plugin", function () { describe("getSigners", function () { it("should return the signers", async function () { const sigs = await this.env.ethers.getSigners(); - assert.equal( + assert.strictEqual( await sigs[0].getAddress(), - "0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1" + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" ); }); it("should expose the address synchronously", async function () { const sigs = await this.env.ethers.getSigners(); - assert.equal( + assert.strictEqual( sigs[0].address, - "0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1" + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" ); }); }); describe("getImpersonatedSigner", function () { - it("should invoke hardhat_impersonateAccount", async function () { + it("should return the working impersonated signer", async function () { + const [signer] = await this.env.ethers.getSigners(); const address = `0x${"ff".repeat(20)}`; - // TODO: We are testing this plugin against Ganache, so this fails. - // We should test it using Hardhat Network instead. - await assert.isRejected( - this.env.ethers.getImpersonatedSigner(address), - "Method hardhat_impersonateAccount not supported" + const impersonatedSigner = + await this.env.ethers.getImpersonatedSigner(address); + + assert.strictEqual( + impersonatedSigner.address, + "0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF" ); + + // fund impersonated account + await signer.sendTransaction({ + to: impersonatedSigner, + value: 10n ** 18n, + }); + + // send a tx from impersonated account + await impersonatedSigner.sendTransaction({ + to: this.env.ethers.ZeroAddress, + value: 10n ** 17n, + }); }); - it("should return the working impersonated signer", async function () {}); }); describe("signer", function () { - /** - * this test has been skipped pending the removal of ganache from this - * test suite, which is being tracked at - * https://github.com/NomicFoundation/hardhat/issues/3447 - */ - it.skip("should sign a message", async function () { + it("should sign a message", async function () { const [sig] = await this.env.ethers.getSigners(); const result = await sig.signMessage("hello"); - assert.equal( + assert.strictEqual( result, - "0x1845faa75f53acb0c3e7247dcf294ce045c139722418dc9638709b54bafffa093591aeaaa195e7dc53f7e774c80e9a7f1371f0647a100d1c9e81db83d8ddd47801" + "0xf16ea9a3478698f695fd1401bfe27e9e4a7e8e3da94aa72b021125e31fa899cc573c48ea3fe1d4ab61a9db10c19032026e3ed2dbccba5a178235ac27f94504311c" ); }); @@ -181,40 +117,56 @@ describe("Ethers plugin", function () { const [sig] = await this.env.ethers.getSigners(); const Greeter = await this.env.ethers.getContractFactory("Greeter"); - const tx = Greeter.getDeployTransaction(); + const tx = await Greeter.getDeployTransaction(); - assert.throws(() => sig.signTransaction(tx)); + await assert.isRejected(sig.signTransaction(tx)); }); - it("should return the balance of the account", async function () { + // `signer.getBalance` is not present in ethers v6; we should re-enable + // this test when/if it's added back + it.skip("should return the balance of the account", async function () { const [sig] = await this.env.ethers.getSigners(); - assert.equal( + assert.strictEqual( + // @ts-expect-error (await sig.getBalance()).toString(), "100000000000000000000" ); }); + it("should return the balance of the account", async function () { + // we use the second signer because the first one is used in previous tests + const [, secondSigner] = await this.env.ethers.getSigners(); + assert.strictEqual( + await this.env.ethers.provider.getBalance(secondSigner), + 10_000n * 10n ** 18n + ); + }); + it("should return the transaction count of the account", async function () { - const [sig] = await this.env.ethers.getSigners(); - assert.equal((await sig.getTransactionCount()).toString(), "0"); + // we use the second signer because the first one is used in previous tests + const [, secondSigner] = await this.env.ethers.getSigners(); + assert.strictEqual( + await this.env.ethers.provider.getTransactionCount(secondSigner), + 0 + ); }); it("should allow to use the estimateGas method", async function () { const [sig] = await this.env.ethers.getSigners(); const Greeter = await this.env.ethers.getContractFactory("Greeter"); - const tx = Greeter.getDeployTransaction(); + const tx = await Greeter.getDeployTransaction(); const result = await sig.estimateGas(tx); - assert.isTrue(result.gt(0)); + assert.isTrue(result > 0n); }); it("should allow to use the call method", async function () { const [sig] = await this.env.ethers.getSigners(); const Greeter = await this.env.ethers.getContractFactory("Greeter"); - const tx = Greeter.getDeployTransaction(); + const tx = await Greeter.getDeployTransaction(); const result = await sig.call(tx); @@ -225,46 +177,41 @@ describe("Ethers plugin", function () { const [sig] = await this.env.ethers.getSigners(); const Greeter = await this.env.ethers.getContractFactory("Greeter"); - const tx = Greeter.getDeployTransaction(); + const tx = await Greeter.getDeployTransaction(); const response = await sig.sendTransaction(tx); const receipt = await response.wait(); - assert.equal(receipt.status, 1); + if (receipt === null) { + assert.fail("receipt shoudn't be null"); + } + assert.strictEqual(receipt.status, 1); }); it("should get the chainId", async function () { - const [sig] = await this.env.ethers.getSigners(); - - const chainId = await sig.getChainId(); + const { chainId } = await this.env.ethers.provider.getNetwork(); - assert.equal(chainId, 1337); + assert.strictEqual(chainId, 31337n); }); it("should get the gas price", async function () { - const [sig] = await this.env.ethers.getSigners(); - - const gasPrice = await sig.getGasPrice(); + const feeData: EthersT.FeeData = + await this.env.ethers.provider.getFeeData(); - assert.equal(gasPrice.toString(), "20000000000"); + assertIsNotNull(feeData.gasPrice); + assert.isTrue(feeData.gasPrice > 0); }); - it("should check and populate a transaction", async function () { + it("should populate a transaction", async function () { const [sig] = await this.env.ethers.getSigners(); const Greeter = await this.env.ethers.getContractFactory("Greeter"); - const tx = Greeter.getDeployTransaction(); + const tx = await Greeter.getDeployTransaction(); - const checkedTransaction = sig.checkTransaction(tx); + const populatedTransaction = await sig.populateTransaction(tx); - assert.equal(await checkedTransaction.from, sig.address); - - const populatedTransaction = await sig.populateTransaction( - checkedTransaction - ); - - assert.equal(populatedTransaction.from, sig.address); + assert.strictEqual(populatedTransaction.from, sig.address); }); }); @@ -276,13 +223,15 @@ describe("Ethers plugin", function () { "Greeter" ); - assert.containsAllKeys(contract.interface.functions, [ - "setGreeting(string)", - "greet()", - ]); + assert.isNotNull(contract.interface.getFunction("greet")); + assert.isNotNull(contract.interface.getFunction("setGreeting")); + + // non-existent functions should be null + assert.isNull(contract.interface.getFunction("doesntExist")); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[0].getAddress() ); }); @@ -315,19 +264,22 @@ describe("Ethers plugin", function () { ); const library = await libraryFactory.deploy(); - const contractFactory = await this.env.ethers.getContractFactory( - "TestContractLib", - { libraries: { TestLibrary: library.address } } - ); - assert.equal( - await contractFactory.signer.getAddress(), + const contractFactory = await this.env.ethers.getContractFactory< + [], + TestContractLib + >("TestContractLib", { + libraries: { TestLibrary: library.target }, + }); + assertIsSigner(contractFactory.runner); + assert.strictEqual( + await contractFactory.runner.getAddress(), await signers[0].getAddress() ); const numberPrinter = await contractFactory.deploy(); - const someNumber = 50; - assert.equal( - await numberPrinter.callStatic.printNumber(someNumber), - someNumber * 2 + const someNumber = 50n; + assert.strictEqual( + await numberPrinter.printNumber.staticCall(someNumber), + someNumber * 2n ); }); @@ -340,8 +292,9 @@ describe("Ethers plugin", function () { try { await this.env.ethers.getContractFactory("TestContractLib", { libraries: { - TestLibrary: library.address, - "contracts/TestContractLib.sol:TestLibrary": library.address, + TestLibrary: await library.getAddress(), + "contracts/TestContractLib.sol:TestLibrary": + await library.getAddress(), }, }); } catch (reason: any) { @@ -379,10 +332,11 @@ describe("Ethers plugin", function () { const contractFactory = await this.env.ethers.getContractFactory( "TestNonUniqueLib", - { libraries: { NonUniqueLibrary: library.address } } + { libraries: { NonUniqueLibrary: await library.getAddress() } } ); - assert.equal( - await contractFactory.signer.getAddress(), + assertIsSigner(contractFactory.runner); + assert.strictEqual( + await contractFactory.runner.getAddress(), await signers[0].getAddress() ); }); @@ -400,9 +354,9 @@ describe("Ethers plugin", function () { try { await this.env.ethers.getContractFactory("TestAmbiguousLib", { libraries: { - AmbiguousLibrary: library.address, + AmbiguousLibrary: await library.getAddress(), "contracts/AmbiguousLibrary2.sol:AmbiguousLibrary": - library2.address, + await library2.getAddress(), }, }); } catch (reason: any) { @@ -490,66 +444,43 @@ describe("Ethers plugin", function () { ); }); - it("should fail to create a contract factory when incorrectly linking a library with an ethers.Contract", async function () { + it("should contract instances as libraries", async function () { const libraryFactory = await this.env.ethers.getContractFactory( "TestLibrary" ); const library = await libraryFactory.deploy(); - try { - await this.env.ethers.getContractFactory("TestContractLib", { - libraries: { TestLibrary: library as any }, - }); - } catch (reason: any) { - assert.instanceOf( - reason, - NomicLabsHardhatPluginError, - "getContractFactory should fail with a hardhat plugin error" - ); - assert.isTrue( - reason.message.includes( - "invalid address", - "getContractFactory should report the invalid address as the cause" - ) - ); - // This assert is here just to make sure we don't end up printing an enormous object - // in the error message. This may happen if the argument received is particularly complex. - assert.isTrue( - reason.message.length <= 400, - "getContractFactory should fail with an error message that isn't too large" - ); - return; - } - - assert.fail( - "getContractFactory should fail to create a contract factory if there is an invalid address" - ); + await this.env.ethers.getContractFactory("TestContractLib", { + libraries: { TestLibrary: library }, + }); }); it("Should be able to send txs and make calls", async function () { - const Greeter = await this.env.ethers.getContractFactory("Greeter"); + const Greeter = await this.env.ethers.getContractFactory< + [], + GreeterContract + >("Greeter"); const greeter = await Greeter.deploy(); - assert.equal(await greeter.functions.greet(), "Hi"); - await greeter.functions.setGreeting("Hola"); - assert.equal(await greeter.functions.greet(), "Hola"); + assert.strictEqual(await greeter.greet(), "Hi"); + await greeter.setGreeting("Hola"); + assert.strictEqual(await greeter.greet(), "Hola"); }); - describe("with custom signer", function () { - it("should return a contract factory connected to the custom signer", async function () { + describe("with hardhat's signer", function () { + it("should return a contract factory connected to the hardhat's signer", async function () { // It's already compiled in artifacts/ const contract = await this.env.ethers.getContractFactory( "Greeter", signers[1] ); - assert.containsAllKeys(contract.interface.functions, [ - "setGreeting(string)", - "greet()", - ]); + assert.isNotNull(contract.interface.getFunction("greet")); + assert.isNotNull(contract.interface.getFunction("setGreeting")); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[1].getAddress() ); }); @@ -564,13 +495,12 @@ describe("Ethers plugin", function () { greeterArtifact.bytecode ); - assert.containsAllKeys(contract.interface.functions, [ - "setGreeting(string)", - "greet()", - ]); + assert.isNotNull(contract.interface.getFunction("greet")); + assert.isNotNull(contract.interface.getFunction("setGreeting")); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[0].getAddress() ); }); @@ -580,29 +510,30 @@ describe("Ethers plugin", function () { iGreeterArtifact.abi, iGreeterArtifact.bytecode ); - assert.equal(contract.bytecode, "0x"); - assert.containsAllKeys(contract.interface.functions, ["greet()"]); + assert.strictEqual(contract.bytecode, "0x"); + assert.isNotNull(contract.interface.getFunction("greet")); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[0].getAddress() ); }); it("Should be able to send txs and make calls", async function () { - const Greeter = await this.env.ethers.getContractFactory( - greeterArtifact.abi, - greeterArtifact.bytecode - ); + const Greeter = await this.env.ethers.getContractFactory< + [], + GreeterContract + >(greeterArtifact.abi, greeterArtifact.bytecode); const greeter = await Greeter.deploy(); - assert.equal(await greeter.functions.greet(), "Hi"); - await greeter.functions.setGreeting("Hola"); - assert.equal(await greeter.functions.greet(), "Hola"); + assert.strictEqual(await greeter.greet(), "Hi"); + await greeter.setGreeting("Hola"); + assert.strictEqual(await greeter.greet(), "Hola"); }); - describe("with custom signer", function () { - it("should return a contract factory connected to the custom signer", async function () { + describe("with hardhat's signer", function () { + it("should return a contract factory connected to the hardhat's signer", async function () { // It's already compiled in artifacts/ const contract = await this.env.ethers.getContractFactory( greeterArtifact.abi, @@ -610,13 +541,12 @@ describe("Ethers plugin", function () { signers[1] ); - assert.containsAllKeys(contract.interface.functions, [ - "setGreeting(string)", - "greet()", - ]); + assert.isNotNull(contract.interface.getFunction("greet")); + assert.isNotNull(contract.interface.getFunction("setGreeting")); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[1].getAddress() ); }); @@ -630,13 +560,12 @@ describe("Ethers plugin", function () { greeterArtifact ); - assert.containsAllKeys(contract.interface.functions, [ - "setGreeting(string)", - "greet()", - ]); + assert.isNotNull(contract.interface.getFunction("greet")); + assert.isNotNull(contract.interface.getFunction("setGreeting")); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[0].getAddress() ); }); @@ -652,49 +581,53 @@ describe("Ethers plugin", function () { ); const contractFactory = - await this.env.ethers.getContractFactoryFromArtifact( - testContractLibArtifact, - { libraries: { TestLibrary: library.address } } - ); + await this.env.ethers.getContractFactoryFromArtifact< + [], + TestContractLib + >(testContractLibArtifact, { + libraries: { TestLibrary: await library.getAddress() }, + }); + assertIsSigner(contractFactory.runner); - assert.equal( - await contractFactory.signer.getAddress(), + assert.strictEqual( + await contractFactory.runner.getAddress(), await signers[0].getAddress() ); + const numberPrinter = await contractFactory.deploy(); - const someNumber = 50; - assert.equal( - await numberPrinter.callStatic.printNumber(someNumber), - someNumber * 2 + const someNumber = 50n; + assert.strictEqual( + await numberPrinter.printNumber.staticCall(someNumber), + someNumber * 2n ); }); it("Should be able to send txs and make calls", async function () { - const Greeter = await this.env.ethers.getContractFactoryFromArtifact( - greeterArtifact - ); + const Greeter = await this.env.ethers.getContractFactoryFromArtifact< + [], + GreeterContract + >(greeterArtifact); const greeter = await Greeter.deploy(); - assert.equal(await greeter.functions.greet(), "Hi"); - await greeter.functions.setGreeting("Hola"); - assert.equal(await greeter.functions.greet(), "Hola"); + assert.strictEqual(await greeter.greet(), "Hi"); + await greeter.setGreeting("Hola"); + assert.strictEqual(await greeter.greet(), "Hola"); }); - describe("with custom signer", function () { - it("should return a contract factory connected to the custom signer", async function () { + describe("with hardhat's signer", function () { + it("should return a contract factory connected to the hardhat's signer", async function () { const contract = await this.env.ethers.getContractFactoryFromArtifact( greeterArtifact, signers[1] ); - assert.containsAllKeys(contract.interface.functions, [ - "setGreeting(string)", - "greet()", - ]); + assert.isNotNull(contract.interface.getFunction("greet")); + assert.isNotNull(contract.interface.getFunction("setGreeting")); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[1].getAddress() ); }); @@ -702,10 +635,13 @@ describe("Ethers plugin", function () { }); describe("getContractAt", function () { - let deployedGreeter: ethers.Contract; + let deployedGreeter: GreeterContract; beforeEach(async function () { - const Greeter = await this.env.ethers.getContractFactory("Greeter"); + const Greeter = await this.env.ethers.getContractFactory< + [], + GreeterContract + >("Greeter"); deployedGreeter = await Greeter.deploy(); }); @@ -719,16 +655,15 @@ describe("Ethers plugin", function () { it("Should return an instance of a contract", async function () { const contract = await this.env.ethers.getContractAt( "Greeter", - deployedGreeter.address + deployedGreeter.target ); - assert.containsAllKeys(contract.functions, [ - "setGreeting(string)", - "greet()", - ]); + assert.exists(contract.setGreeting); + assert.exists(contract.greet); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[0].getAddress() ); }); @@ -736,13 +671,14 @@ describe("Ethers plugin", function () { it("Should return an instance of an interface", async function () { const contract = await this.env.ethers.getContractAt( "IGreeter", - deployedGreeter.address + deployedGreeter.target ); - assert.containsAllKeys(contract.functions, ["greet()"]); + assert.isNotNull(contract.interface.getFunction("greet")); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[0].getAddress() ); }); @@ -750,24 +686,24 @@ describe("Ethers plugin", function () { it("Should be able to send txs and make calls", async function () { const greeter = await this.env.ethers.getContractAt( "Greeter", - deployedGreeter.address + deployedGreeter.target ); - assert.equal(await greeter.functions.greet(), "Hi"); - await greeter.functions.setGreeting("Hola"); - assert.equal(await greeter.functions.greet(), "Hola"); + assert.strictEqual(await greeter.greet(), "Hi"); + await greeter.setGreeting("Hola"); + assert.strictEqual(await greeter.greet(), "Hola"); }); - describe("with custom signer", function () { - it("Should return an instance of a contract associated to a custom signer", async function () { + describe("with hardhat's signer", function () { + it("Should return an instance of a contract associated to a hardhat's signer", async function () { const contract = await this.env.ethers.getContractAt( "Greeter", - deployedGreeter.address, + deployedGreeter.target, signers[1] ); - - assert.equal( - await contract.signer.getAddress(), + assertIsSigner(contract.runner); + assert.strictEqual( + await contract.runner.getAddress(), await signers[1].getAddress() ); }); @@ -778,16 +714,15 @@ describe("Ethers plugin", function () { it("Should return an instance of a contract", async function () { const contract = await this.env.ethers.getContractAt( greeterArtifact.abi, - deployedGreeter.address + deployedGreeter.target ); - assert.containsAllKeys(contract.functions, [ - "setGreeting(string)", - "greet()", - ]); + assert.isNotNull(contract.interface.getFunction("greet")); + assert.isNotNull(contract.interface.getFunction("setGreeting")); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[0].getAddress() ); }); @@ -795,13 +730,14 @@ describe("Ethers plugin", function () { it("Should return an instance of an interface", async function () { const contract = await this.env.ethers.getContractAt( iGreeterArtifact.abi, - deployedGreeter.address + deployedGreeter.target ); - assert.containsAllKeys(contract.functions, ["greet()"]); + assert.isNotNull(contract.interface.getFunction("greet")); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[0].getAddress() ); }); @@ -809,52 +745,52 @@ describe("Ethers plugin", function () { it("Should be able to send txs and make calls", async function () { const greeter = await this.env.ethers.getContractAt( greeterArtifact.abi, - deployedGreeter.address + deployedGreeter.target ); - assert.equal(await greeter.functions.greet(), "Hi"); - await greeter.functions.setGreeting("Hola"); - assert.equal(await greeter.functions.greet(), "Hola"); + assert.strictEqual(await greeter.greet(), "Hi"); + await greeter.setGreeting("Hola"); + assert.strictEqual(await greeter.greet(), "Hola"); }); - it("Should be able to detect events", async function () { - const greeter = await this.env.ethers.getContractAt( - greeterArtifact.abi, - deployedGreeter.address - ); - - // at the time of this writing, ethers' default polling interval is - // 4000 ms. here we turn it down in order to speed up this test. - // see also - // https://github.com/ethers-io/ethers.js/issues/615#issuecomment-848991047 - const provider = greeter.provider as EthersProviderWrapper; - provider.pollingInterval = 100; - - let eventEmitted = false; - greeter.on("GreetingUpdated", () => { - eventEmitted = true; - }); - - await greeter.functions.setGreeting("Hola"); - - // wait for 1.5 polling intervals for the event to fire - await new Promise((resolve) => - setTimeout(resolve, provider.pollingInterval * 2) - ); - - assert.equal(eventEmitted, true); - }); - - describe("with custom signer", function () { - it("Should return an instance of a contract associated to a custom signer", async function () { + // TODO re-enable when we make .on("event") work + // it("Should be able to detect events", async function () { + // const greeter = await this.env.ethers.getContractAt( + // greeterArtifact.abi, + // deployedGreeter.target + // ); + // + // // at the time of this writing, ethers' default polling interval is + // // 4000 ms. here we turn it down in order to speed up this test. + // // see also + // // https://github.com/ethers-io/ethers.js/issues/615#issuecomment-848991047 + // // const provider = greeter.provider as any; + // // provider.pollingInterval = 100; + // + // let eventEmitted = false; + // await greeter.on("GreetingUpdated", () => { + // eventEmitted = true; + // }); + // + // await greeter.setGreeting("Hola"); + // + // // wait for 1.5 polling intervals for the event to fire + // await new Promise((resolve) => setTimeout(resolve, 10_000)); + // + // assert.strictEqual(eventEmitted, true); + // }); + + describe("with hardhat's signer", function () { + it("Should return an instance of a contract associated to a hardhat's signer", async function () { const contract = await this.env.ethers.getContractAt( greeterArtifact.abi, - deployedGreeter.address, + deployedGreeter.target, signers[1] ); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[1].getAddress() ); }); @@ -866,31 +802,36 @@ describe("Ethers plugin", function () { ); const library = await libraryFactory.deploy(); - const contractFactory = await this.env.ethers.getContractFactory( - "TestContractLib", - { libraries: { TestLibrary: library.address } } - ); + const contractFactory = await this.env.ethers.getContractFactory< + [], + TestContractLib + >("TestContractLib", { + libraries: { TestLibrary: library.target }, + }); const numberPrinter = await contractFactory.deploy(); const numberPrinterAtAddress = await this.env.ethers.getContractAt( "TestContractLib", - numberPrinter.address + numberPrinter.target ); - const someNumber = 50; - assert.equal( - await numberPrinterAtAddress.callStatic.printNumber(someNumber), - someNumber * 2 + const someNumber = 50n; + assert.strictEqual( + await numberPrinterAtAddress.printNumber.staticCall(someNumber), + someNumber * 2n ); }); }); }); describe("getContractAtFromArtifact", function () { - let deployedGreeter: ethers.Contract; + let deployedGreeter: GreeterContract; beforeEach(async function () { - const Greeter = await this.env.ethers.getContractFactory("Greeter"); + const Greeter = await this.env.ethers.getContractFactory< + [], + GreeterContract + >("Greeter"); deployedGreeter = await Greeter.deploy(); }); @@ -898,16 +839,15 @@ describe("Ethers plugin", function () { it("Should return an instance of a contract", async function () { const contract = await this.env.ethers.getContractAtFromArtifact( greeterArtifact, - deployedGreeter.address + await deployedGreeter.getAddress() ); - assert.containsAllKeys(contract.functions, [ - "setGreeting(string)", - "greet()", - ]); + assert.isNotNull(contract.interface.getFunction("greet")); + assert.isNotNull(contract.interface.getFunction("setGreeting")); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[0].getAddress() ); }); @@ -915,24 +855,25 @@ describe("Ethers plugin", function () { it("Should be able to send txs and make calls", async function () { const greeter = await this.env.ethers.getContractAtFromArtifact( greeterArtifact, - deployedGreeter.address + await deployedGreeter.getAddress() ); - assert.equal(await greeter.functions.greet(), "Hi"); - await greeter.functions.setGreeting("Hola"); - assert.equal(await greeter.functions.greet(), "Hola"); + assert.strictEqual(await greeter.greet(), "Hi"); + await greeter.setGreeting("Hola"); + assert.strictEqual(await greeter.greet(), "Hola"); }); - describe("with custom signer", function () { - it("Should return an instance of a contract associated to a custom signer", async function () { + describe("with hardhat's signer", function () { + it("Should return an instance of a contract associated to a hardhat's signer", async function () { const contract = await this.env.ethers.getContractAtFromArtifact( greeterArtifact, - deployedGreeter.address, + await deployedGreeter.getAddress(), signers[1] ); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signers[1].getAddress() ); }); @@ -947,7 +888,7 @@ describe("Ethers plugin", function () { await assertContract(contract, signers[0]); }); - it("should deploy and return a contract with custom signer passed directly", async function () { + it("should deploy and return a contract with hardhat's signer passed directly", async function () { const contract = await this.env.ethers.deployContract( "Greeter", signers[1] @@ -956,7 +897,7 @@ describe("Ethers plugin", function () { await assertContract(contract, signers[1]); }); - it("should deploy and return a contract with custom signer passed as an option", async function () { + it("should deploy and return a contract with hardhat's signer passed as an option", async function () { const contract = await this.env.ethers.deployContract("Greeter", { signer: signers[1], }); @@ -974,7 +915,7 @@ describe("Ethers plugin", function () { assert(await contract.greet(), "Hello"); }); - it("should deploy with args and return a contract with custom signer", async function () { + it("should deploy with args and return a contract with hardhat's signer", async function () { const contract = await this.env.ethers.deployContract( "GreeterWithConstructorArg", ["Hello"], @@ -985,7 +926,7 @@ describe("Ethers plugin", function () { assert(await contract.greet(), "Hello"); }); - it("should deploy with args and return a contract with custom signer as an option", async function () { + it("should deploy with args and return a contract with hardhat's signer as an option", async function () { const contract = await this.env.ethers.deployContract( "GreeterWithConstructorArg", ["Hello"], @@ -996,17 +937,50 @@ describe("Ethers plugin", function () { assert(await contract.greet(), "Hello"); }); + it("should accept overrides for the deployment transaction", async function () { + const contract = await this.env.ethers.deployContract("Greeter", { + gasLimit: 1_000_000, + }); + + await assertContract(contract, signers[0]); + + const deploymentTx = contract.deploymentTransaction(); + if (deploymentTx === null) { + assert.fail("Deployment transaction shouldn't be null"); + } + + assert.equal(deploymentTx.gasLimit, 1_000_000n); + }); + + it("should accept overrides for the deployment transaction when there are constructor args", async function () { + const contract = await this.env.ethers.deployContract( + "GreeterWithConstructorArg", + ["Hello"], + { + gasLimit: 1_000_000, + } + ); + + await assertContract(contract, signers[0]); + + const deploymentTx = contract.deploymentTransaction(); + if (deploymentTx === null) { + assert.fail("Deployment transaction shouldn't be null"); + } + + assert.equal(deploymentTx.gasLimit, 1_000_000n); + }); + async function assertContract( - contract: ethers.Contract, - signer: Signer + contract: EthersT.Contract, + signer: HardhatEthersSigner ) { - assert.containsAllKeys(contract.interface.functions, [ - "setGreeting(string)", - "greet()", - ]); + assert.isNotNull(contract.interface.getFunction("greet")); + assert.isNotNull(contract.interface.getFunction("setGreeting")); + assertIsSigner(contract.runner); - assert.equal( - await contract.signer.getAddress(), + assert.strictEqual( + await contract.runner.getAddress(), await signer.getAddress() ); } @@ -1018,46 +992,45 @@ describe("Ethers plugin", function () { useEnvironment("hardhat-project", "hardhat"); describe("contract events", function () { - it("should be detected", async function () { - const Greeter = await this.env.ethers.getContractFactory("Greeter"); - const deployedGreeter: ethers.Contract = await Greeter.deploy(); - - // at the time of this writing, ethers' default polling interval is - // 4000 ms. here we turn it down in order to speed up this test. - // see also - // https://github.com/ethers-io/ethers.js/issues/615#issuecomment-848991047 - const provider = deployedGreeter.provider as EthersProviderWrapper; - provider.pollingInterval = 200; - - let eventEmitted = false; - deployedGreeter.on("GreetingUpdated", () => { - eventEmitted = true; - }); - - await deployedGreeter.functions.setGreeting("Hola"); - - // wait for 1.5 polling intervals for the event to fire - await new Promise((resolve) => - setTimeout(resolve, provider.pollingInterval * 2) - ); - - assert.equal(eventEmitted, true); - }); + // TODO re-enable when we make .on("event") work + // it("should be detected", async function () { + // const Greeter = await this.env.ethers.getContractFactory("Greeter"); + // const deployedGreeter: any = await Greeter.deploy(); + // + // // at the time of this writing, ethers' default polling interval is + // // 4000 ms. here we turn it down in order to speed up this test. + // // see also + // // https://github.com/ethers-io/ethers.js/issues/615#issuecomment-848991047 + // // const provider = deployedGreeter.provider as EthersProviderWrapper; + // // provider.pollingInterval = 200; + // + // let eventEmitted = false; + // deployedGreeter.on("GreetingUpdated", () => { + // eventEmitted = true; + // }); + // + // await deployedGreeter.setGreeting("Hola"); + // + // // wait for 1.5 polling intervals for the event to fire + // await new Promise((resolve) => setTimeout(resolve, 200 * 2)); + // + // assert.strictEqual(eventEmitted, true); + // }); }); describe("hardhat_reset", function () { it("should return the correct block number after a hardhat_reset", async function () { let blockNumber = await this.env.ethers.provider.getBlockNumber(); - assert.equal(blockNumber.toString(), "0"); + assert.strictEqual(blockNumber.toString(), "0"); await this.env.ethers.provider.send("evm_mine", []); await this.env.ethers.provider.send("evm_mine", []); blockNumber = await this.env.ethers.provider.getBlockNumber(); - assert.equal(blockNumber.toString(), "2"); + assert.strictEqual(blockNumber.toString(), "2"); await this.env.ethers.provider.send("hardhat_reset", []); blockNumber = await this.env.ethers.provider.getBlockNumber(); - assert.equal(blockNumber.toString(), "0"); + assert.strictEqual(blockNumber.toString(), "0"); }); it("should return the correct block after a hardhat_reset", async function () { @@ -1083,21 +1056,21 @@ describe("Ethers plugin", function () { sig.address ); - assert.equal(nonce, 0); + assert.strictEqual(nonce, 0); const response = await sig.sendTransaction({ from: sig.address, - to: this.env.ethers.constants.AddressZero, + to: this.env.ethers.ZeroAddress, value: "0x1", }); await response.wait(); nonce = await this.env.ethers.provider.getTransactionCount(sig.address); - assert.equal(nonce, 1); + assert.strictEqual(nonce, 1); await this.env.ethers.provider.send("hardhat_reset", []); nonce = await this.env.ethers.provider.getTransactionCount(sig.address); - assert.equal(nonce, 0); + assert.strictEqual(nonce, 0); }); it("should return the correct balance after a hardhat_reset", async function () { @@ -1105,32 +1078,38 @@ describe("Ethers plugin", function () { let balance = await this.env.ethers.provider.getBalance(sig.address); - assert.equal(balance.toString(), "10000000000000000000000"); + assert.strictEqual(balance.toString(), "10000000000000000000000"); const response = await sig.sendTransaction({ from: sig.address, - to: this.env.ethers.constants.AddressZero, + to: this.env.ethers.ZeroAddress, gasPrice: 8e9, }); await response.wait(); balance = await this.env.ethers.provider.getBalance(sig.address); - assert.equal(balance.toString(), "9999999832000000000000"); + assert.strictEqual(balance.toString(), "9999999832000000000000"); await this.env.ethers.provider.send("hardhat_reset", []); balance = await this.env.ethers.provider.getBalance(sig.address); - assert.equal(balance.toString(), "10000000000000000000000"); + assert.strictEqual(balance.toString(), "10000000000000000000000"); }); it("should return the correct code after a hardhat_reset", async function () { const [sig] = await this.env.ethers.getSigners(); const Greeter = await this.env.ethers.getContractFactory("Greeter"); - const tx = Greeter.getDeployTransaction(); + const tx = await Greeter.getDeployTransaction(); const response = await sig.sendTransaction(tx); const receipt = await response.wait(); + if (receipt === null) { + assert.fail("receipt shoudn't be null"); + } + if (receipt.contractAddress === null) { + assert.fail("receipt.contractAddress shoudn't be null"); + } let code = await this.env.ethers.provider.getCode( receipt.contractAddress @@ -1151,16 +1130,16 @@ describe("Ethers plugin", function () { [] ); let blockNumber = await this.env.ethers.provider.getBlockNumber(); - assert.equal(blockNumber.toString(), "0"); + assert.strictEqual(blockNumber.toString(), "0"); await this.env.ethers.provider.send("evm_mine", []); await this.env.ethers.provider.send("evm_mine", []); blockNumber = await this.env.ethers.provider.getBlockNumber(); - assert.equal(blockNumber.toString(), "2"); + assert.strictEqual(blockNumber.toString(), "2"); await this.env.ethers.provider.send("evm_revert", [snapshotId]); blockNumber = await this.env.ethers.provider.getBlockNumber(); - assert.equal(blockNumber.toString(), "0"); + assert.strictEqual(blockNumber.toString(), "0"); }); it("should return the correct block after a evm_revert", async function () { @@ -1194,21 +1173,21 @@ describe("Ethers plugin", function () { sig.address ); - assert.equal(nonce, 0); + assert.strictEqual(nonce, 0); const response = await sig.sendTransaction({ from: sig.address, - to: this.env.ethers.constants.AddressZero, + to: this.env.ethers.ZeroAddress, value: "0x1", }); await response.wait(); nonce = await this.env.ethers.provider.getTransactionCount(sig.address); - assert.equal(nonce, 1); + assert.strictEqual(nonce, 1); await this.env.ethers.provider.send("evm_revert", [snapshotId]); nonce = await this.env.ethers.provider.getTransactionCount(sig.address); - assert.equal(nonce, 0); + assert.strictEqual(nonce, 0); }); it("should return the correct balance after a evm_revert", async function () { @@ -1220,21 +1199,21 @@ describe("Ethers plugin", function () { let balance = await this.env.ethers.provider.getBalance(sig.address); - assert.equal(balance.toString(), "10000000000000000000000"); + assert.strictEqual(balance.toString(), "10000000000000000000000"); const response = await sig.sendTransaction({ from: sig.address, - to: this.env.ethers.constants.AddressZero, + to: this.env.ethers.ZeroAddress, gasPrice: 8e9, }); await response.wait(); balance = await this.env.ethers.provider.getBalance(sig.address); - assert.equal(balance.toString(), "9999999832000000000000"); + assert.strictEqual(balance.toString(), "9999999832000000000000"); await this.env.ethers.provider.send("evm_revert", [snapshotId]); balance = await this.env.ethers.provider.getBalance(sig.address); - assert.equal(balance.toString(), "10000000000000000000000"); + assert.strictEqual(balance.toString(), "10000000000000000000000"); }); it("should return the correct code after a evm_revert", async function () { @@ -1245,12 +1224,19 @@ describe("Ethers plugin", function () { const [sig] = await this.env.ethers.getSigners(); const Greeter = await this.env.ethers.getContractFactory("Greeter"); - const tx = Greeter.getDeployTransaction(); + const tx = await Greeter.getDeployTransaction(); const response = await sig.sendTransaction(tx); const receipt = await response.wait(); + if (receipt === null) { + assert.fail("receipt shoudn't be null"); + } + if (receipt.contractAddress === null) { + assert.fail("receipt.contractAddress shoudn't be null"); + } + let code = await this.env.ethers.provider.getCode( receipt.contractAddress ); @@ -1263,7 +1249,7 @@ describe("Ethers plugin", function () { }); }); - it("_signTypedData integration test", async function () { + it("signTypedData integration test", async function () { // See https://eips.ethereum.org/EIPS/eip-712#parameters // There's a json schema and an explanation for each field. const typedMessage = { @@ -1304,7 +1290,7 @@ describe("Ethers plugin", function () { }; const [signer] = await this.env.ethers.getSigners(); - const signature = await signer._signTypedData( + const signature = await signer.signTypedData( typedMessage.domain, typedMessage.types, typedMessage.message @@ -1316,28 +1302,30 @@ describe("Ethers plugin", function () { assert.lengthOf(signature, signatureSizeInBytes * byteToHex + hexPrefix); }); }); - describe("ganache via WebSocket", function () { - useEnvironment("hardhat-project"); - it("should be able to detect events", async function () { - await this.env.run("compile", { quiet: true }); - - const Greeter = await this.env.ethers.getContractFactory("Greeter"); - const deployedGreeter: ethers.Contract = await Greeter.deploy(); - - const readonlyContract = deployedGreeter.connect( - new ethers.providers.WebSocketProvider("ws://127.0.0.1:8545") - ); - let emitted = false; - readonlyContract.on("GreetingUpdated", () => { - emitted = true; - }); - - await deployedGreeter.functions.setGreeting("Hola"); - // wait for the event to fire - await new Promise((resolve) => setTimeout(resolve, 100)); - - assert.equal(emitted, true); - }); + describe("hardhat node via WebSocket", function () { + useEnvironment("hardhat-project", "localhost"); + // TODO re-enable when we make .on("event") work + // it("should be able to detect events", async function () { + // await this.env.run("compile", { quiet: true }); + // + // const Greeter = await this.env.ethers.getContractFactory("Greeter"); + // const deployedGreeter: any = await Greeter.deploy(); + // + // const readonlyContract = deployedGreeter.connect( + // new ethers.WebSocketProvider("ws://127.0.0.1:8545") + // ); + // let emitted = false; + // await readonlyContract.on("GreetingUpdated", () => { + // emitted = true; + // }); + // + // await deployedGreeter.setGreeting("Hola"); + // + // // wait for the event to fire + // await new Promise((resolve) => setTimeout(resolve, 100)); + // + // assert.strictEqual(emitted, true); + // }); }); }); diff --git a/packages/hardhat-ethers/test/no-accounts.ts b/packages/hardhat-ethers/test/no-accounts.ts index b068088a98..4a7f8657a3 100644 --- a/packages/hardhat-ethers/test/no-accounts.ts +++ b/packages/hardhat-ethers/test/no-accounts.ts @@ -2,9 +2,9 @@ import { assert } from "chai"; import { TASK_COMPILE } from "hardhat/builtin-tasks/task-names"; import { HardhatRuntimeEnvironment } from "hardhat/types"; -import { SignerWithAddress } from "../src/signers"; +import { HardhatEthersSigner } from "../src/signers"; -import { useEnvironment } from "./helpers"; +import { useEnvironment } from "./environment"; describe("hardhat-ethers plugin", function () { describe("hardhat network with no accounts", function () { @@ -33,23 +33,36 @@ describe("hardhat-ethers plugin", function () { it("Should return an instance of a contract with a read-only provider", async function () { const receipt = await deployGreeter(this.env, signerAddress); + if (receipt === null) { + assert.fail("receipt shoudn't be null"); + } + if (receipt.contractAddress === null) { + assert.fail("receipt.contractAddress shoudn't be null"); + } + const contract = await this.env.ethers.getContractAt( "Greeter", receipt.contractAddress ); - assert.isDefined(contract.provider); - assert.isNotNull(contract.provider); + assert.isDefined(contract.runner); + assert.isNotNull(contract.runner); - const greeting = await contract.functions.greet(); + const greeting = await contract.greet(); - assert.equal(greeting, "Hi"); + assert.strictEqual(greeting, "Hi"); }); }); describe("with the abi and address", function () { it("Should return an instance of a contract with a read-only provider", async function () { const receipt = await deployGreeter(this.env, signerAddress); + if (receipt === null) { + assert.fail("receipt shoudn't be null"); + } + if (receipt.contractAddress === null) { + assert.fail("receipt.contractAddress shoudn't be null"); + } const signers = await this.env.ethers.getSigners(); assert.isEmpty(signers); @@ -63,12 +76,12 @@ describe("hardhat-ethers plugin", function () { receipt.contractAddress ); - assert.isDefined(contract.provider); - assert.isNotNull(contract.provider); + assert.isDefined(contract.runner); + assert.isNotNull(contract.runner); - const greeting = await contract.functions.greet(); + const greeting = await contract.greet(); - assert.equal(greeting, "Hi"); + assert.strictEqual(greeting, "Hi"); }); }); }); @@ -81,8 +94,8 @@ describe("hardhat-ethers plugin", function () { assert.isTrue(signers.every((aSigner) => aSigner.address !== address)); const signer = await this.env.ethers.getSigner(address); - assert.instanceOf(signer, SignerWithAddress); - assert.equal(signer.address, address); + assert.instanceOf(signer, HardhatEthersSigner); + assert.strictEqual(signer.address, address); }); }); }); @@ -93,7 +106,7 @@ async function deployGreeter( signerAddress: string ) { const Greeter = await hre.ethers.getContractFactory("Greeter"); - const tx = Greeter.getDeployTransaction(); + const tx = await Greeter.getDeployTransaction(); tx.from = signerAddress; await hre.network.provider.request({ @@ -111,7 +124,10 @@ async function deployGreeter( }); assert.isDefined(hre.ethers.provider); const receipt = await hre.ethers.provider.getTransactionReceipt(txHash); - assert.equal(receipt.status, 1, "The deployment transaction failed."); + if (receipt === null) { + assert.fail("receipt shoudn't be null"); + } + assert.strictEqual(receipt.status, 1, "The deployment transaction failed."); return receipt; } diff --git a/packages/hardhat-ethers/test/provider-events.ts b/packages/hardhat-ethers/test/provider-events.ts new file mode 100644 index 0000000000..5c715719b9 --- /dev/null +++ b/packages/hardhat-ethers/test/provider-events.ts @@ -0,0 +1,368 @@ +import { assert, use } from "chai"; +import chaiAsPromised from "chai-as-promised"; +import sinon from "sinon"; + +import { useEnvironment } from "./environment"; +import { sleep, tryUntil } from "./helpers"; + +use(chaiAsPromised); + +describe("provider events", function () { + useEnvironment("minimal-project"); + + describe("transaction events", function () { + beforeEach(async function () { + await this.env.network.provider.send("evm_setAutomine", [false]); + }); + + it("should support .on(txHash)", async function () { + const [s] = await this.env.ethers.getSigners(); + const tx = await s.sendTransaction({ to: s }); + + let listener: any; + const txPromise = new Promise((resolve) => { + listener = resolve; + }); + await this.env.ethers.provider.on(tx.hash, listener); + + await this.env.network.provider.send("hardhat_mine"); + + await txPromise; + + await this.env.ethers.provider.off(tx.hash, listener); + }); + + it("should support .addListener and .removeListener as aliases", async function () { + const [s] = await this.env.ethers.getSigners(); + const tx = await s.sendTransaction({ to: s }); + + let listener: any; + const txPromise = new Promise((resolve) => { + listener = resolve; + }); + await this.env.ethers.provider.addListener(tx.hash, listener); + + await this.env.network.provider.send("hardhat_mine"); + + await txPromise; + + await this.env.ethers.provider.removeListener(tx.hash, listener); + }); + + it("should support .once(txHash)", async function () { + const [s] = await this.env.ethers.getSigners(); + const tx = await s.sendTransaction({ to: s }); + + const listener = sinon.stub(); + await this.env.ethers.provider.once(tx.hash, listener); + + await this.env.network.provider.send("hardhat_mine"); + + await tryUntil(() => { + assert.equal(listener.callCount, 1); + }); + }); + + it("should remove a listener with .off()", async function () { + const [s] = await this.env.ethers.getSigners(); + const tx1 = await s.sendTransaction({ to: s, gasLimit: 21_000 }); + const tx2 = await s.sendTransaction({ to: s, gasLimit: 21_000 }); + + const listener1 = sinon.stub(); + const listener2 = sinon.stub(); + await this.env.ethers.provider.on(tx1.hash, listener1); + await this.env.ethers.provider.once(tx2.hash, listener2); + + await this.env.ethers.provider.off(tx1.hash, listener1); + await this.env.ethers.provider.off(tx2.hash, listener2); + + await this.env.network.provider.send("hardhat_mine"); + + await sleep(100); + + assert.isFalse(listener1.called); + assert.isFalse(listener2.called); + }); + + it("should remove all listeners if .off() is called without a listener", async function () { + const [s] = await this.env.ethers.getSigners(); + const tx1 = await s.sendTransaction({ to: s, gasLimit: 21_000 }); + const tx2 = await s.sendTransaction({ to: s, gasLimit: 21_000 }); + + const listener1 = sinon.stub(); + const listener2 = sinon.stub(); + await this.env.ethers.provider.on(tx1.hash, listener1); + await this.env.ethers.provider.once(tx2.hash, listener2); + + await this.env.ethers.provider.off(tx1.hash); + await this.env.ethers.provider.off(tx2.hash); + + await this.env.network.provider.send("hardhat_mine"); + + await sleep(100); + + assert.isFalse(listener1.called); + assert.isFalse(listener2.called); + }); + + it("should remove all listeners if removeAllListeners(txHash) is called", async function () { + const [s] = await this.env.ethers.getSigners(); + const tx1 = await s.sendTransaction({ to: s, gasLimit: 21_000 }); + const tx2 = await s.sendTransaction({ to: s, gasLimit: 21_000 }); + + const listener1 = sinon.stub(); + const listener2 = sinon.stub(); + await this.env.ethers.provider.on(tx1.hash, listener1); + await this.env.ethers.provider.once(tx2.hash, listener2); + + await this.env.ethers.provider.removeAllListeners(tx1.hash); + await this.env.ethers.provider.removeAllListeners(tx2.hash); + + await this.env.network.provider.send("hardhat_mine"); + + await sleep(100); + + assert.isFalse(listener1.called); + assert.isFalse(listener2.called); + }); + + it("should remove all listeners if removeAllListeners() is called", async function () { + const [s] = await this.env.ethers.getSigners(); + const tx1 = await s.sendTransaction({ to: s, gasLimit: 21_000 }); + const tx2 = await s.sendTransaction({ to: s, gasLimit: 21_000 }); + + const listener1 = sinon.stub(); + const listener2 = sinon.stub(); + await this.env.ethers.provider.on(tx1.hash, listener1); + await this.env.ethers.provider.once(tx2.hash, listener2); + + await this.env.ethers.provider.removeAllListeners(); + + await this.env.network.provider.send("hardhat_mine"); + + await sleep(100); + + assert.isFalse(listener1.called); + assert.isFalse(listener2.called); + }); + + it("should support emitting a transaction event", async function () { + const fakeTransactionHash = + "0x1234567812345678123456781234567812345678123456781234567812345678"; + const listener = sinon.spy(); + await this.env.ethers.provider.once(fakeTransactionHash, listener); + + const fakeTransaction = {}; + await this.env.ethers.provider.emit(fakeTransactionHash, fakeTransaction); + + await tryUntil(() => { + assert.isTrue(listener.calledOnceWith(fakeTransaction)); + }); + }); + }); + + describe("block events", function () { + it("should support .on('block')", async function () { + let listener: any; + const blockPromise = new Promise((resolve) => { + listener = resolve; + }); + + await this.env.ethers.provider.on("block", listener); + + // should be emitted when a tx is sent + await this.env.network.provider.send("hardhat_mine"); + + await blockPromise; + + // remove subscription + await this.env.ethers.provider.off("block", listener); + }); + + it("should support .on('block') in multiple contexts", async function () { + const blockListener = sinon.stub(); + await this.env.ethers.provider.on("block", blockListener); + + // should be emitted when a tx is sent + const [s] = await this.env.ethers.getSigners(); + await s.sendTransaction({ to: s }); + + // should be emitted when a block is mined + await this.env.network.provider.send("hardhat_mine"); + + // should be emitted when several blocks are mined + await this.env.network.provider.send("hardhat_mine", ["0x5"]); + + await tryUntil(() => { + assert.equal(blockListener.callCount, 7); + }); + + // remove subscription + await this.env.ethers.provider.off("block", blockListener); + }); + + it("should support .once('block')", async function () { + const blockListener = sinon.stub(); + await this.env.ethers.provider.once("block", blockListener); + + // should be emitted when a tx is sent + const [s] = await this.env.ethers.getSigners(); + await s.sendTransaction({ to: s }); + + await tryUntil(() => { + assert.equal(blockListener.callCount, 1); + }); + + // shouldn't be emitted a second time + await s.sendTransaction({ to: s }); + await sleep(100); + assert.equal(blockListener.callCount, 1); + }); + + it("should remove a listener with .off()", async function () { + const listener1 = sinon.stub(); + const listener2 = sinon.stub(); + await this.env.ethers.provider.on("block", listener1); + await this.env.ethers.provider.once("block", listener2); + + await this.env.ethers.provider.off("block", listener1); + await this.env.ethers.provider.off("block", listener2); + + // mine a block + const [s] = await this.env.ethers.getSigners(); + await s.sendTransaction({ to: s }); + + await sleep(100); + + assert.isFalse(listener1.called); + assert.isFalse(listener2.called); + }); + + it("should remove all listeners if .off() is called without a listener", async function () { + const listener1 = sinon.stub(); + const listener2 = sinon.stub(); + await this.env.ethers.provider.on("block", listener1); + await this.env.ethers.provider.once("block", listener2); + + await this.env.ethers.provider.off("block"); + + // mine a block + const [s] = await this.env.ethers.getSigners(); + await s.sendTransaction({ to: s }); + + await sleep(100); + + assert.isFalse(listener1.called); + assert.isFalse(listener2.called); + }); + + it("should remove all listeners if .removeAllListeners('block') is called", async function () { + const listener1 = sinon.stub(); + const listener2 = sinon.stub(); + await this.env.ethers.provider.on("block", listener1); + await this.env.ethers.provider.once("block", listener2); + + await this.env.ethers.provider.removeAllListeners("block"); + + // mine a block + const [s] = await this.env.ethers.getSigners(); + await s.sendTransaction({ to: s }); + + await sleep(100); + + assert.isFalse(listener1.called); + assert.isFalse(listener2.called); + }); + + it("should remove all listeners if .removeAllListeners() is called", async function () { + const listener1 = sinon.stub(); + const listener2 = sinon.stub(); + await this.env.ethers.provider.on("block", listener1); + await this.env.ethers.provider.once("block", listener2); + + await this.env.ethers.provider.removeAllListeners(); + + // mine a block + const [s] = await this.env.ethers.getSigners(); + await s.sendTransaction({ to: s }); + + await sleep(100); + + assert.isFalse(listener1.called); + assert.isFalse(listener2.called); + }); + + it("should support emitting a block event", async function () { + let listener: sinon.SinonSpy = null as any; + const blockPromise = new Promise((resolve) => { + listener = sinon.spy(() => { + resolve(); + }); + }); + + await this.env.ethers.provider.on("block", listener); + + // should be emitted when a tx is sent + await this.env.ethers.provider.emit("block", 123); + + await blockPromise; + + assert.isTrue(listener.calledOnceWith(123)); + + // remove subscription + await this.env.ethers.provider.off("block", listener); + }); + }); + + describe("listeners getters", function () { + it("should get all the block listeners", async function () { + const listener1 = () => {}; + const listener2 = () => {}; + + await this.env.ethers.provider.on("block", listener1); + await this.env.ethers.provider.once("block", listener2); + + const listeners = await this.env.ethers.provider.listeners("block"); + + assert.lengthOf(listeners, 2); + assert.sameMembers(listeners, [listener1, listener2]); + + await this.env.ethers.provider.off("block"); + }); + + it("should get the right block listeners after a block is mined", async function () { + const listener1 = () => {}; + const listener2 = () => {}; + + await this.env.ethers.provider.on("block", listener1); + await this.env.ethers.provider.once("block", listener2); + + await this.env.network.provider.send("hardhat_mine"); + + await tryUntil(async () => { + const listeners = await this.env.ethers.provider.listeners("block"); + + assert.lengthOf(listeners, 1); + assert.sameMembers(listeners, [listener1]); + }); + + await this.env.ethers.provider.off("block"); + }); + }); + + describe("unsupported events", function () { + it("should throw if .on is called with an unsupported event type", async function () { + await assert.isRejected( + this.env.ethers.provider.on([], () => {}), + "is not supported" + ); + }); + + it("should throw if .once is called with an unsupported event type", async function () { + await assert.isRejected( + this.env.ethers.provider.once([], () => {}), + "is not supported" + ); + }); + }); +}); diff --git a/packages/hardhat-ethers/test/transactions.ts b/packages/hardhat-ethers/test/transactions.ts new file mode 100644 index 0000000000..618f1c16cf --- /dev/null +++ b/packages/hardhat-ethers/test/transactions.ts @@ -0,0 +1,73 @@ +import { assert, use } from "chai"; +import chaiAsPromised from "chai-as-promised"; + +import { usePersistentEnvironment } from "./environment"; +import { sleep } from "./helpers"; + +use(chaiAsPromised); + +describe("transactions", function () { + usePersistentEnvironment("minimal-project"); + + it("should wait until a transaction is mined", async function () { + const [signer] = await this.env.ethers.getSigners(); + + // send a transaction with automining disabled + await this.env.network.provider.send("evm_setAutomine", [false]); + const tx = await signer.sendTransaction({ to: signer }); + + let transactionIsMined = false; + const transactionMinedPromise = tx.wait().then(() => { + transactionIsMined = true; + }); + + // .wait() shouldn't resolve if the transaction wasn't mined + await Promise.race([transactionMinedPromise, sleep(250)]); + + assert.isFalse(transactionIsMined); + + // mine a new block + await this.env.network.provider.send("hardhat_mine", []); + + await transactionMinedPromise; + + assert.isTrue(transactionIsMined); + + // restore automining + await this.env.network.provider.send("evm_setAutomine", [true]); + }); + + it("should wait until a transaction has the given number of confirmations", async function () { + const [signer] = await this.env.ethers.getSigners(); + + // send a transaction with automining disabled + await this.env.network.provider.send("evm_setAutomine", [false]); + const tx = await signer.sendTransaction({ to: signer }); + + let transactionIsMined = false; + const transactionMinedPromise = tx.wait(10).then(() => { + transactionIsMined = true; + }); + + // .wait() shouldn't resolve if the transaction wasn't mined + await Promise.race([transactionMinedPromise, sleep(250)]); + assert.isFalse(transactionIsMined); + + // mine a new block + await this.env.network.provider.send("hardhat_mine", []); + + // the promise shouldn't be resolved with just one confirmation + await Promise.race([transactionMinedPromise, sleep(250)]); + assert.isFalse(transactionIsMined); + + // mine 9 blocks more + await this.env.network.provider.send("hardhat_mine", ["0x9"]); + + await transactionMinedPromise; + + assert.isTrue(transactionIsMined); + + // restore automining + await this.env.network.provider.send("evm_setAutomine", [true]); + }); +}); diff --git a/packages/hardhat-ethers/test/type-tests.ts b/packages/hardhat-ethers/test/type-tests.ts new file mode 100644 index 0000000000..0fe9ce754d --- /dev/null +++ b/packages/hardhat-ethers/test/type-tests.ts @@ -0,0 +1,13 @@ +import { FactoryOptions } from "../src/types"; + +// FactoryOptions shouldn't have mandatory properties +const _factoryOptions: FactoryOptions = {}; + +// FactoryOptions only has these two properties. +// If new ones are added, then the deployContract +// implementation should be updated to also delete +// those new extra properties +const _factoryOptionsRequired: Required = { + signer: null as any, + libraries: null as any, +}; diff --git a/packages/hardhat-foundry/.eslintrc.js b/packages/hardhat-foundry/.eslintrc.js index 889740f226..c6de07705a 100644 --- a/packages/hardhat-foundry/.eslintrc.js +++ b/packages/hardhat-foundry/.eslintrc.js @@ -1,7 +1,24 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { project: `${__dirname}/tsconfig.json`, sourceType: "module", }, + overrides: [ + { + files: ["src/index.ts"], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [...slowImportsCommonIgnoredModules], + }, + ], + }, + }, + ], }; diff --git a/packages/hardhat-foundry/.gitignore b/packages/hardhat-foundry/.gitignore index c00d7e7296..4aca21f18d 100644 --- a/packages/hardhat-foundry/.gitignore +++ b/packages/hardhat-foundry/.gitignore @@ -15,10 +15,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -57,21 +53,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-foundry/CHANGELOG.md b/packages/hardhat-foundry/CHANGELOG.md index f7552978a9..ac56551696 100644 --- a/packages/hardhat-foundry/CHANGELOG.md +++ b/packages/hardhat-foundry/CHANGELOG.md @@ -1,5 +1,29 @@ # @nomicfoundation/hardhat-foundry +## 1.1.1 + +### Patch Changes + +- 8af824dfd: Bump hardhat-foundry's peer dependency on Hardhat + +## 1.1.0 + +### Minor Changes + +- 9cb4f845d: Revamped how remappings are handled. Now they are passed to Hardhat's compile task, which handles them during file resolution. + +## 1.0.3 + +### Patch Changes + +- 3bdc9d6bb: Fixed a bug related to remappings that use the node_modules directory + +## 1.0.2 + +### Patch Changes + +- c52470de5: Fixed a performance issue that was causing compilation to be much slower when `hardhat-foundry` was used + ## 1.0.1 ### Patch Changes diff --git a/packages/hardhat-foundry/package.json b/packages/hardhat-foundry/package.json index cdbfb14bdd..751c2f0cfe 100644 --- a/packages/hardhat-foundry/package.json +++ b/packages/hardhat-foundry/package.json @@ -1,6 +1,6 @@ { "name": "@nomicfoundation/hardhat-foundry", - "version": "1.0.1", + "version": "1.1.1", "description": "Hardhat plugin that adds Hardhat support to Foundry projects", "repository": "github:nomicfoundation/hardhat", "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-foundry", @@ -16,13 +16,14 @@ "foundry" ], "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", "test": "mocha --recursive \"test/**/*.ts\" --exit", "build": "tsc --build .", - "prepublishOnly": "yarn build", + "prepublishOnly": "pnpm build", "clean": "rimraf dist" }, "files": [ @@ -35,24 +36,26 @@ "chalk": "^2.4.2" }, "devDependencies": { + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", "@types/chai": "^4.2.0", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@types/node": "^16.0.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "chai": "^4.2.0", - "eslint": "^7.29.0", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-prettier": "3.4.0", - "hardhat": "^2.12.6", + "hardhat": "workspace:^2.17.2", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", "ts-node": "^10.8.0", - "typescript": "~4.7.4" + "typescript": "~5.0.0" }, "peerDependencies": { - "hardhat": "^2.12.6" + "hardhat": "^2.17.2" } } diff --git a/packages/hardhat-foundry/src/foundry.ts b/packages/hardhat-foundry/src/foundry.ts index 34c6d09643..c3fbf10350 100644 --- a/packages/hardhat-foundry/src/foundry.ts +++ b/packages/hardhat-foundry/src/foundry.ts @@ -7,7 +7,7 @@ const exec = promisify(execCallback); type Remappings = Record; -let cachedRemappings: Remappings | undefined; +let cachedRemappings: Promise | undefined; export class HardhatFoundryError extends NomicLabsHardhatPluginError { constructor(message: string, parent?: Error) { @@ -31,37 +31,48 @@ export function getForgeConfig() { return JSON.parse(runCmdSync("forge config --json")); } -export async function getRemappings() { - // Return remappings if they were already loaded - if (cachedRemappings !== undefined) { - return cachedRemappings; - } - - // Get remappings from foundry - const remappingsTxt = await runCmd("forge remappings"); - +export function parseRemappings(remappingsTxt: string): Remappings { const remappings: Remappings = {}; const remappingLines = remappingsTxt.split(/\r\n|\r|\n/); for (const remappingLine of remappingLines) { - const fromTo = remappingLine.split("="); - if (fromTo.length !== 2) { + if (remappingLine.trim() === "") { continue; } - const [from, to] = fromTo; + if (remappingLine.includes(":")) { + throw new HardhatFoundryError( + `Invalid remapping '${remappingLine}', remapping contexts are not allowed` + ); + } - // source names with "node_modules" in it have special treatment in hardhat core, so we skip them - if (to.includes("node_modules")) { + if (!remappingLine.includes("=")) { + throw new HardhatFoundryError( + `Invalid remapping '${remappingLine}', remappings without a target are not allowed` + ); + } + + const fromTo = remappingLine.split("="); + + // if the remapping already exists, we ignore it because the first one wins + if (remappings[fromTo[0]] !== undefined) { continue; } - remappings[from] = to; + remappings[fromTo[0]] = fromTo[1]; } - cachedRemappings = remappings; return remappings; } +export async function getRemappings() { + // Get remappings only once + if (cachedRemappings === undefined) { + cachedRemappings = runCmd("forge remappings").then(parseRemappings); + } + + return cachedRemappings; +} + export async function installDependency(dependency: string) { const cmd = `forge install --no-commit ${dependency}`; console.log(`Running '${chalk.blue(cmd)}'`); diff --git a/packages/hardhat-foundry/src/index.ts b/packages/hardhat-foundry/src/index.ts index db5fb776d9..ec164a557b 100644 --- a/packages/hardhat-foundry/src/index.ts +++ b/packages/hardhat-foundry/src/index.ts @@ -1,17 +1,10 @@ import { extendConfig, internalTask, task } from "hardhat/config"; import { - TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE, + TASK_COMPILE_GET_REMAPPINGS, TASK_COMPILE_TRANSFORM_IMPORT_NAME, } from "hardhat/builtin-tasks/task-names"; -import { SolidityFilesCache } from "hardhat/builtin-tasks/utils/solidity-files-cache"; -import { - CompilationJob, - CompilationJobCreationError, - DependencyGraph, - HardhatRuntimeEnvironment, - ResolvedFile, -} from "hardhat/types"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; import { existsSync, writeFileSync } from "fs"; import path from "path"; import chalk from "chalk"; @@ -80,57 +73,32 @@ extendConfig((config, userConfig) => { pluginActivated = true; }); -// Task that transforms import names to sourcenames using remappings +// This task is in place to detect old hardhat-core versions internalTask(TASK_COMPILE_TRANSFORM_IMPORT_NAME).setAction( async ( - { importName }: { importName: string }, - _hre, - runSuper + { + importName, + deprecationCheck, + }: { importName: string; deprecationCheck: boolean }, + _hre ): Promise => { - if (!pluginActivated) { - return runSuper({ importName }); - } - - const remappings = await getRemappings(); - - for (const [from, to] of Object.entries(remappings)) { - if (importName.startsWith(from) && !importName.startsWith(".")) { - return importName.replace(from, to); - } + // When the deprecationCheck param is passed, it means a new enough hardhat-core is being used + if (deprecationCheck) { + return importName; } - - return importName; + throw new HardhatFoundryError( + "This version of hardhat-foundry depends on hardhat version >= 2.17.2" + ); } ); -// Task that includes the remappings in solc input -internalTask(TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE).setAction( - async ( - { - dependencyGraph, - file, - }: { - dependencyGraph: DependencyGraph; - file: ResolvedFile; - solidityFilesCache?: SolidityFilesCache; - }, - hre, - runSuper - ): Promise => { - const job = (await runSuper({ dependencyGraph, file })) as - | CompilationJob - | CompilationJobCreationError; - - if (!pluginActivated || isCompilationJobCreationError(job)) { - return job; +internalTask(TASK_COMPILE_GET_REMAPPINGS).setAction( + async (): Promise> => { + if (!pluginActivated) { + return {}; } - const remappings = await getRemappings(); - job.getSolcConfig().settings.remappings = Object.entries(remappings).map( - ([from, to]) => `${from}=${to}` - ); - - return job; + return getRemappings(); } ); @@ -171,9 +139,3 @@ task( await installDependency("foundry-rs/forge-std"); } ); - -function isCompilationJobCreationError( - x: CompilationJob | CompilationJobCreationError -): x is CompilationJobCreationError { - return "reason" in x; -} diff --git a/packages/hardhat-foundry/test/foundry.ts b/packages/hardhat-foundry/test/foundry.ts new file mode 100644 index 0000000000..3d9f299a8b --- /dev/null +++ b/packages/hardhat-foundry/test/foundry.ts @@ -0,0 +1,45 @@ +import { expect } from "chai"; +import { HardhatFoundryError, parseRemappings } from "../src/foundry"; + +describe("foundry module", function () { + describe("parseRemappings", function () { + it("should parse simple remappings", async function () { + const remappings = parseRemappings("a=b\nb=c\nc=d"); + + expect(remappings).to.deep.equal({ + a: "b", + b: "c", + c: "d", + }); + }); + + it("should throw if a remapping has a context", async function () { + expect(() => parseRemappings("a:b=c")).to.throw( + "Invalid remapping 'a:b=c', remapping contexts are not allowed" + ); + }); + + it("should throw if a remapping doesn't have a target", async function () { + expect(() => parseRemappings("a")).to.throw( + "Invalid remapping 'a', remappings without a target are not allowed" + ); + }); + + it("should use the first remapping if more than one has the same prefix", async function () { + const remappings = parseRemappings("a=b\na=c"); + + expect(remappings).to.deep.equal({ + a: "b", + }); + }); + + it("should ignore empty lines", async function () { + const remappings = parseRemappings("a=b\n\nb=c"); + + expect(remappings).to.deep.equal({ + a: "b", + b: "c", + }); + }); + }); +}); diff --git a/packages/hardhat-ledger/.gitignore b/packages/hardhat-ledger/.gitignore new file mode 100644 index 0000000000..b0ee1244f1 --- /dev/null +++ b/packages/hardhat-ledger/.gitignore @@ -0,0 +1,97 @@ +# Node modules +/node_modules + +# Compilation output +/build-test/ +/dist + +# Code coverage artifacts +/coverage +/.nyc_output + +/*.js +/*.js.map +/*.d.ts +/*.d.ts.map +/builtin-tasks +/common +/internal +/types +/utils + +# Below is Github's node gitignore template, +# ignoring the node_modules part, as it'd ignore every node_modules, and we have some for testing + +# Logs +logs +*.log + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +#node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'pnpm pack' +*.tgz + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +test/fixture-projects/*/artifacts +test/fixture-projects/*/cache diff --git a/packages/hardhat-ledger/.mocharc.json b/packages/hardhat-ledger/.mocharc.json new file mode 100644 index 0000000000..d00ceb4138 --- /dev/null +++ b/packages/hardhat-ledger/.mocharc.json @@ -0,0 +1,5 @@ +{ + "require": "ts-node/register/files", + "ignore": ["test/fixture-projects/**/*"], + "timeout": 10000 +} diff --git a/packages/hardhat-ledger/.prettierignore b/packages/hardhat-ledger/.prettierignore new file mode 100644 index 0000000000..8b59d6f54c --- /dev/null +++ b/packages/hardhat-ledger/.prettierignore @@ -0,0 +1,7 @@ +/node_modules +/dist +/test/fixture-projects/**/artifacts +/test/fixture-projects/**/artifacts-dir +/test/fixture-projects/**/cache +CHANGELOG.md +.nyc_output diff --git a/packages/hardhat-ledger/CHANGELOG.md b/packages/hardhat-ledger/CHANGELOG.md new file mode 100644 index 0000000000..d96d33292e --- /dev/null +++ b/packages/hardhat-ledger/CHANGELOG.md @@ -0,0 +1,7 @@ +# @nomicfoundation/hardhat-ledger + +## 1.0.1 + +### Patch Changes + +- d8793639e: Pinned version of @ledgerhq/hw-app-eth because the latest version has breaking changes diff --git a/packages/hardhat-ledger/LICENSE b/packages/hardhat-ledger/LICENSE new file mode 100644 index 0000000000..3b7e8c7eab --- /dev/null +++ b/packages/hardhat-ledger/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Nomic Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/hardhat-ledger/README.md b/packages/hardhat-ledger/README.md new file mode 100644 index 0000000000..89c4574b21 --- /dev/null +++ b/packages/hardhat-ledger/README.md @@ -0,0 +1,106 @@ +[![npm](https://img.shields.io/npm/v/@nomicfoundation/hardhat-ledger.svg)](https://www.npmjs.com/package/@nomicfoundation/hardhat-ledger) [![hardhat](https://hardhat.org/buidler-plugin-badge.svg?1)](https://hardhat.org) + +# hardhat-ledger + +[Hardhat](https://hardhat.org) plugin for integration with a [Ledger hardware wallet](https://www.ledger.com/). + +## What + +This plugin extends the Hardhat provider enabling it to work with a connected Ledger wallet seamlessly. + +## Installation + +```bash +npm install --save-dev @nomicfoundation/hardhat-ledger +``` + +And add the following statement to your `hardhat.config.js`: + +```js +require("@nomicfoundation/hardhat-ledger"); +``` + +Or, if you are using TypeScript, add this to your `hardhat.config.ts`: + +```js +import "@nomicfoundation/hardhat-ledger"; +``` + +## Tasks + +This plugin creates no additional tasks. + +## Environment extensions + +This plugin adds nothing to the Hardhat Runtime Environment. + +## Provider extensions + +The provider supplied by Hardhat will be extended using [`extendProvider`](https://hardhat.org/hardhat-runner/docs/advanced/building-plugins#extending-the-hardhat-provider), decorating it to be a `LedgerProvider`. Any successive calls to `extendProvider` will be added on top of this. + +A `LedgerProvider` knows how to connect and interact with a Ledger wallet + +## Usage + +The only additional step to make this plugin work is to configure it properly through the Hardhat Config. For example, in your `hardhat.config.js`: + +```js +require("@nomicfoundation/hardhat-ledger"); + +module.exports = { + networks: { + hardhat: { + ledgerAccounts: [ + "0xa809931e3b38059adae9bc5455bc567d0509ab92", + "0xda6a52afdae5ff66aa786da68754a227331f56e3", + "0xbc307688a80ec5ed0edc1279c44c1b34f7746bda", + ], + }, + }, +}; +``` + +This will make those three accounts available to the `LedgerProvider`. If you try to send a transaction or sign something using any of those accounts, the provider will try to connect to the Ledger wallet and find a derivation path for that address. By default, the derivation paths that are tried start from `m/44'/60'/0'/0'/0` and go way up to `44'/60'/20'/0'/0`. + +If you want to use the provider, you could, for example in a task: + +```js +task("sign", "Signs a message", async (_, hre) => { + const message = + "0x5417aa2a18a44da0675524453ff108c545382f0d7e26605c56bba47c21b5e979"; + const account = "0xa809931e3b38059adae9bc5455bc567d0509ab92"; + + const signature = await hre.network.provider.request({ + method: "personal_sign", + params: [ + "0x5417aa2a18a44da0675524453ff108c545382f0d7e26605c56bba47c21b5e979", + account, + ], + }); + + console.log( + "Signed message", + message, + "for Ledger account", + account, + "and got", + signature + ); +}); +``` + +## Errors + +The package throws and exports a few [errors](https://github.com/NomicFoundation/hardhat/blob/feat/main/packages/hardhat-core/src/config.ts). In case you ever need to catch and check for them, you can use the `public static` method present on each of them. For example: + +```ts +try { + //(...) +} catch (error) { + if (DerivationPathError.isDerivationPathError(error)) { + // error is a DerivationPathError + } +} +``` + +Same for the other errors, all have their corresponding `.isXXXError()` method. diff --git a/packages/hardhat-ledger/package.json b/packages/hardhat-ledger/package.json new file mode 100644 index 0000000000..e57dd416e8 --- /dev/null +++ b/packages/hardhat-ledger/package.json @@ -0,0 +1,79 @@ +{ + "name": "@nomicfoundation/hardhat-ledger", + "version": "1.0.1", + "description": "Hardhat plugin for the Ledger hardware wallet", + "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-ledger", + "repository": "github:nomicfoundation/hardhat", + "author": "Nomic Foundation", + "license": "MIT", + "main": "dist/src/index.js", + "types": "dist/src/index.d.ts", + "keywords": [ + "ethereum", + "smart-contracts", + "hardhat", + "hardhat-plugin", + "ledger", + "hardware-wallet" + ], + "scripts": { + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", + "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", + "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", + "test": "mocha --recursive \"test/**/*.ts\" -c --exit", + "coverage": "nyc pnpm test -- --reporter min", + "build": "tsc --build .", + "prepublishOnly": "pnpm build", + "clean": "rimraf dist" + }, + "files": [ + "dist/src/", + "src/", + "LICENSE", + "README.md" + ], + "dependencies": { + "@ledgerhq/errors": "^6.12.6", + "@ledgerhq/hw-app-eth": "6.33.6", + "@ledgerhq/hw-transport": "^6.28.4", + "@ledgerhq/hw-transport-node-hid": "^6.27.13", + "@nomicfoundation/ethereumjs-util": "9.0.2", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "ethers": "^6.1.0", + "fs-extra": "^7.0.1", + "io-ts": "1.10.4", + "ora": "^5.4.1" + }, + "devDependencies": { + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", + "@types/chai": "^4.2.0", + "@types/fs-extra": "^5.1.0", + "@types/mocha": ">=9.1.0", + "@types/node": "^16.0.0", + "@types/sinon": "^9.0.8", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", + "chai": "^4.2.0", + "eslint": "^8.44.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "hardhat": "workspace:^2.16.0", + "mocha": "^10.0.0", + "nyc": "^15.1.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "sinon": "^9.0.0", + "ts-node": "^10.8.0", + "typescript": "~5.0.0" + }, + "peerDependencies": { + "hardhat": "^2.16.0" + } +} diff --git a/packages/hardhat-ledger/src/errors.ts b/packages/hardhat-ledger/src/errors.ts new file mode 100644 index 0000000000..073edc325e --- /dev/null +++ b/packages/hardhat-ledger/src/errors.ts @@ -0,0 +1,70 @@ +import type { TransportError } from "@ledgerhq/errors"; +import { NomicLabsHardhatPluginError } from "hardhat/plugins"; + +export class HardhatLedgerError extends NomicLabsHardhatPluginError { + constructor(message: string, parent?: Error) { + super("@nomiclabs/hardhat-ledger", message, parent); + } +} + +export class HardhatLedgerNotControlledAddressError extends HardhatLedgerError { + public static instanceOf( + other: any + ): other is HardhatLedgerNotControlledAddressError { + return ( + other !== undefined && + other !== null && + other._isNotControlledAddressError === true + ); + } + + private readonly _isNotControlledAddressError = true; + + constructor(message: string, public address: string) { + super(message); + } +} + +export class HardhatLedgerConnectionError extends HardhatLedgerError { + public static instanceOf(other: any): other is HardhatLedgerConnectionError { + return ( + other !== undefined && other !== null && other._isConnectionError === true + ); + } + + private readonly _isConnectionError = true; + + constructor(error: Error) { + let errorMessage = `There was an error trying to establish a connection to the Ledger wallet: "${error.message}". + +Make sure your Ledger is connected and unlocked, and that the Ethereum app is open. +`; + + if (error.name === "TransportError") { + const transportError = error as TransportError; + errorMessage += ` +The error id was: ${transportError.id} +`; + } + + super(errorMessage); + } +} + +export class HardhatLedgerDerivationPathError extends HardhatLedgerError { + public static instanceOf( + other: any + ): other is HardhatLedgerDerivationPathError { + return ( + other !== undefined && + other !== null && + other._isDerivationPathError === true + ); + } + + private readonly _isDerivationPathError = true; + + constructor(message: string, public path: string) { + super(message); + } +} diff --git a/packages/hardhat-ledger/src/index.ts b/packages/hardhat-ledger/src/index.ts new file mode 100644 index 0000000000..1db9768c5d --- /dev/null +++ b/packages/hardhat-ledger/src/index.ts @@ -0,0 +1,22 @@ +import { extendConfig, extendProvider } from "hardhat/config"; + +import "./type-extensions"; + +export * from "./errors"; + +extendConfig((config, userConfig) => { + // set ledgerAccounts to the user configured value, or to [] if there isn't any + for (const networkName of Object.keys(config.networks)) { + config.networks[networkName].ledgerAccounts = + userConfig.networks?.[networkName]?.ledgerAccounts ?? []; + } +}); + +extendProvider(async (provider, config, network) => { + const { createLedgerProvider } = await import( + "./internal/create-ledger-provider" + ); + + const networkConfig = config.networks[network]; + return createLedgerProvider(provider, networkConfig); +}); diff --git a/packages/hardhat-ledger/src/internal/cache.ts b/packages/hardhat-ledger/src/internal/cache.ts new file mode 100644 index 0000000000..b9886eb18e --- /dev/null +++ b/packages/hardhat-ledger/src/internal/cache.ts @@ -0,0 +1,44 @@ +import type { Paths } from "env-paths"; +import fs from "fs-extra"; +import path from "path"; + +type CacheableJson = Record; + +export const CACHE_FILE_NAME = "accounts.json"; +const PACKAGE_NAME = "hardhat"; + +export async function write(json: T) { + const ledgerCacheFile = await getLedgerCacheFile(CACHE_FILE_NAME); + await fs.writeJSON(ledgerCacheFile, json); +} + +export async function read(): Promise { + const ledgerCacheFile = await getLedgerCacheFile(CACHE_FILE_NAME); + try { + const file: T = await fs.readJSON(ledgerCacheFile); + return file; + } catch (error) {} +} + +async function getLedgerCacheFile(fileName: string): Promise { + const ledgerCacheDir = await getLedgerCacheDir(); + return path.join(ledgerCacheDir, fileName); +} + +async function getLedgerCacheDir(): Promise { + const cache = await getCacheDir(); + const compilersCache = path.join(cache, "ledger"); + await fs.ensureDir(compilersCache); + return compilersCache; +} + +async function getCacheDir(): Promise { + const { cache } = await generatePaths(PACKAGE_NAME); + await fs.ensureDir(cache); + return cache; +} + +async function generatePaths(packageName: string): Promise { + const { default: envPaths } = await import("env-paths"); + return envPaths(packageName); +} diff --git a/packages/hardhat-ledger/src/internal/create-ledger-provider.ts b/packages/hardhat-ledger/src/internal/create-ledger-provider.ts new file mode 100644 index 0000000000..142d07339b --- /dev/null +++ b/packages/hardhat-ledger/src/internal/create-ledger-provider.ts @@ -0,0 +1,15 @@ +import { EIP1193Provider, NetworkConfig } from "hardhat/types"; + +import { LedgerProvider } from "../provider"; +import { withSpinners } from "./with-spinners"; + +export function createLedgerProvider( + provider: EIP1193Provider, + networkConfig: NetworkConfig +): LedgerProvider { + const accounts = networkConfig.ledgerAccounts; + + const ledgerProvider = new LedgerProvider({ accounts }, provider); + + return withSpinners(ledgerProvider); +} diff --git a/packages/hardhat-ledger/src/internal/utils.ts b/packages/hardhat-ledger/src/internal/utils.ts new file mode 100644 index 0000000000..429866b826 --- /dev/null +++ b/packages/hardhat-ledger/src/internal/utils.ts @@ -0,0 +1,4 @@ +export function toHex(value: string | Buffer): string { + const stringValue = typeof value === "string" ? value : value.toString("hex"); + return stringValue.startsWith("0x") ? stringValue : `0x${stringValue}`; +} diff --git a/packages/hardhat-ledger/src/internal/with-spinners.ts b/packages/hardhat-ledger/src/internal/with-spinners.ts new file mode 100644 index 0000000000..4a057e4435 --- /dev/null +++ b/packages/hardhat-ledger/src/internal/with-spinners.ts @@ -0,0 +1,43 @@ +import ora from "ora"; +import EventEmitter from "events"; + +export function withSpinners(emitter: T): T { + attachSpinner(emitter, { + startText: "[hardhat-ledger] Connecting wallet", + eventPrefix: "connection", + }); + + attachSpinner(emitter, { + startText: "[hardhat-ledger] Waiting for confirmation", + eventPrefix: "confirmation", + }); + + const derivationSpinner = attachSpinner(emitter, { + startText: "[hardhat-ledger] Finding derivation path", + eventPrefix: "derivation", + }); + emitter.on( + "derivation_progress", + (path: string, index: number) => + (derivationSpinner.text = `[hardhat-ledger] Deriving address #${index} (path "${path}")`) + ); + + return emitter; +} + +function attachSpinner( + emmiter: EventEmitter, + spinnerOptions: { + startText: string; + eventPrefix: string; + } +): ora.Ora { + const { startText, eventPrefix } = spinnerOptions; + const spinner = ora(startText); + + emmiter.on(`${eventPrefix}_start`, () => spinner.start()); + emmiter.on(`${eventPrefix}_success`, () => spinner.succeed()); + emmiter.on(`${eventPrefix}_failure`, () => spinner.fail()); + + return spinner; +} diff --git a/packages/hardhat-ledger/src/internal/wrap-transport.ts b/packages/hardhat-ledger/src/internal/wrap-transport.ts new file mode 100644 index 0000000000..1e57f399b3 --- /dev/null +++ b/packages/hardhat-ledger/src/internal/wrap-transport.ts @@ -0,0 +1,8 @@ +import Eth from "@ledgerhq/hw-app-eth"; +import Transport from "@ledgerhq/hw-transport"; + +import { EthWrapper } from "../types"; + +export function wrapTransport(transport: Transport): EthWrapper { + return new Eth(transport); +} diff --git a/packages/hardhat-ledger/src/provider.ts b/packages/hardhat-ledger/src/provider.ts new file mode 100644 index 0000000000..84b3237973 --- /dev/null +++ b/packages/hardhat-ledger/src/provider.ts @@ -0,0 +1,431 @@ +import { ethers } from "ethers"; +import * as t from "io-ts"; + +import { isValidAddress } from "@nomicfoundation/ethereumjs-util"; + +import { isEIP712Message, ledgerService } from "@ledgerhq/hw-app-eth"; +import TransportNodeHid from "@ledgerhq/hw-transport-node-hid"; +import { EIP712Message } from "@ledgerhq/hw-app-eth/lib/modules/EIP712"; +import { EIP1193Provider, RequestArguments } from "hardhat/types"; +import { validateParams } from "hardhat/internal/core/jsonrpc/types/input/validation"; +import { rpcTransactionRequest } from "hardhat/internal/core/jsonrpc/types/input/transactionRequest"; +import { + rpcAddress, + rpcData, + rpcQuantityToBigInt, +} from "hardhat/internal/core/jsonrpc/types/base-types"; +import { ProviderWrapperWithChainId } from "hardhat/internal/core/providers/chainId"; +import { HardhatError } from "hardhat/internal/core/errors"; +import { ERRORS } from "hardhat/internal/core/errors-list"; + +import * as cache from "./internal/cache"; +import { toHex } from "./internal/utils"; +import { wrapTransport } from "./internal/wrap-transport"; +import { LedgerOptions, EthWrapper, Signature, Paths } from "./types"; +import { + HardhatLedgerConnectionError, + HardhatLedgerDerivationPathError, + HardhatLedgerError, + HardhatLedgerNotControlledAddressError, +} from "./errors"; + +export class LedgerProvider extends ProviderWrapperWithChainId { + public static readonly MAX_DERIVATION_ACCOUNTS = 20; + public static readonly DEFAULT_TIMEOUT = 3000; + + public readonly paths: Paths = {}; // { address: path } + public name: string = "LedgerProvider"; + + protected _eth: EthWrapper | undefined; + + public static async create( + options: LedgerOptions, + wrappedProvider: EIP1193Provider + ) { + const provider = new LedgerProvider(options, wrappedProvider); + await provider.init(); + return provider; + } + + constructor( + public readonly options: LedgerOptions, + _wrappedProvider: EIP1193Provider + ) { + super(_wrappedProvider); + + this.options.accounts = options.accounts.map((account) => { + if (!isValidAddress(account)) { + throw new HardhatLedgerError( + `The following ledger address from the config is invalid: ${account}` + ); + } + return account.toLowerCase(); + }); + } + + public get eth(): EthWrapper { + if (this._eth === undefined) { + throw new HardhatError(ERRORS.GENERAL.UNINITIALIZED_PROVIDER); + } + return this._eth; + } + + public async init(): Promise { + // If init is called concurrently, it can cause the Ledger to throw + // because the transport might be in use. This is a known problem but shouldn't happen + // as init is not called manually. More info read: https://github.com/NomicFoundation/hardhat/pull/4008#discussion_r1233258204 + + if (this._eth === undefined) { + const openTimeout = + this.options.openTimeout ?? LedgerProvider.DEFAULT_TIMEOUT; + + const connectionTimeout = + this.options.connectionTimeout ?? LedgerProvider.DEFAULT_TIMEOUT; + + try { + this.emit("connection_start"); + + const transport = await TransportNodeHid.create( + openTimeout, + connectionTimeout + ); + this._eth = wrapTransport(transport); + + this.emit("connection_success"); + } catch (error) { + this.emit("connection_failure"); + + if (error instanceof Error) { + throw new HardhatLedgerConnectionError(error); + } + + throw error; + } + } + + try { + const paths = await cache.read(); + if (paths !== undefined) { + Object.assign(this.paths, paths); + } + } catch (error) {} + } + + public async request(args: RequestArguments): Promise { + const params = this._getParams(args); + + if (args.method === "eth_accounts") { + const accounts = (await this._wrappedProvider.request(args)) as string[]; + return [...accounts, ...this.options.accounts]; + } + + if (this._methodRequiresSignature(args.method)) { + try { + if (args.method === "eth_sign") { + return await this._ethSign(params); + } + + if (args.method === "personal_sign") { + return await this._personalSign(params); + } + + if (args.method === "eth_signTypedData_v4") { + return await this._ethSignTypedDataV4(params); + } + + if (args.method === "eth_sendTransaction" && params.length > 0) { + return await this._ethSendTransaction(params); + } + } catch (error) { + // We skip non controlled errors and forward them to the wrapped provider + if (!HardhatLedgerNotControlledAddressError.instanceOf(error)) { + throw error; + } + } + } + + return this._wrappedProvider.request(args); + } + + private _methodRequiresSignature(method: string): boolean { + return [ + "personal_sign", + "eth_sign", + "eth_signTypedData_v4", + "eth_sendTransaction", + ].includes(method); + } + + private async _ethSign(params: any[]): Promise { + if (params.length > 0) { + const [address, data] = validateParams(params, rpcAddress, rpcData); + + await this._requireControlledInit(address); + + if (address !== undefined) { + if (data === undefined) { + throw new HardhatError(ERRORS.NETWORK.ETHSIGN_MISSING_DATA_PARAM); + } + + const path = await this._derivePath(address); + const signature = await this._withConfirmation(() => + this.eth.signPersonalMessage(path, data.toString("hex")) + ); + return this._toRpcSig(signature); + } + } + } + + private async _personalSign(params: any[]): Promise { + if (params.length > 0) { + const [data, address] = validateParams(params, rpcData, rpcAddress); + + await this._requireControlledInit(address); + + if (data !== undefined) { + if (address === undefined) { + throw new HardhatError( + ERRORS.NETWORK.PERSONALSIGN_MISSING_ADDRESS_PARAM + ); + } + + const path = await this._derivePath(address); + const signature = await this._withConfirmation(() => + this.eth.signPersonalMessage(path, data.toString("hex")) + ); + return this._toRpcSig(signature); + } + } + } + + private async _ethSignTypedDataV4(params: any[]): Promise { + const [address, data] = validateParams(params, rpcAddress, t.any as any); + + await this._requireControlledInit(address); + + if (data === undefined) { + throw new HardhatError(ERRORS.NETWORK.ETHSIGN_MISSING_DATA_PARAM); + } + + let typedMessage: EIP712Message; + try { + typedMessage = typeof data === "string" ? JSON.parse(data) : data; + + if (!isEIP712Message(typedMessage)) { + throw new HardhatError( + ERRORS.NETWORK.ETHSIGN_TYPED_DATA_V4_INVALID_DATA_PARAM + ); + } + } catch { + throw new HardhatError( + ERRORS.NETWORK.ETHSIGN_TYPED_DATA_V4_INVALID_DATA_PARAM + ); + } + + const { types, domain, message, primaryType } = typedMessage; + const { EIP712Domain: _, ...structTypes } = types; + + const path = await this._derivePath(address); + const signature = await this._withConfirmation(async () => { + try { + return await this.eth.signEIP712Message(path, typedMessage); + } catch (error) { + return this.eth.signEIP712HashedMessage( + path, + ethers.TypedDataEncoder.hashDomain(domain), + ethers.TypedDataEncoder.hashStruct(primaryType, structTypes, message) + ); + } + }); + + return this._toRpcSig(signature); + } + + private async _ethSendTransaction(params: any[]): Promise { + const [txRequest] = validateParams(params, rpcTransactionRequest); + + await this._requireControlledInit(txRequest.from); + + if (txRequest.gas === undefined) { + throw new HardhatError(ERRORS.NETWORK.MISSING_TX_PARAM_TO_SIGN_LOCALLY, { + param: "gas", + }); + } + + const hasGasPrice = txRequest.gasPrice !== undefined; + const hasEip1559Fields = + txRequest.maxFeePerGas !== undefined || + txRequest.maxPriorityFeePerGas !== undefined; + + if (!hasGasPrice && !hasEip1559Fields) { + throw new HardhatError(ERRORS.NETWORK.MISSING_FEE_PRICE_FIELDS); + } + + if (hasGasPrice && hasEip1559Fields) { + throw new HardhatError(ERRORS.NETWORK.INCOMPATIBLE_FEE_PRICE_FIELDS); + } + + if (hasEip1559Fields && txRequest.maxFeePerGas === undefined) { + throw new HardhatError(ERRORS.NETWORK.MISSING_TX_PARAM_TO_SIGN_LOCALLY, { + param: "maxFeePerGas", + }); + } + + if (hasEip1559Fields && txRequest.maxPriorityFeePerGas === undefined) { + throw new HardhatError(ERRORS.NETWORK.MISSING_TX_PARAM_TO_SIGN_LOCALLY, { + param: "maxPriorityFeePerGas", + }); + } + + const path = await this._derivePath(txRequest.from); + + if (txRequest.nonce === undefined) { + txRequest.nonce = await this._getNonce(txRequest.from); + } + + const chainId = await this._getChainId(); + + const baseTx: ethers.TransactionLike = { + chainId, + gasLimit: txRequest.gas, + gasPrice: txRequest.gasPrice, + maxFeePerGas: txRequest.maxFeePerGas, + maxPriorityFeePerGas: txRequest.maxPriorityFeePerGas, + nonce: Number(txRequest.nonce), + value: txRequest.value, + }; + if (txRequest.to !== undefined) { + baseTx.to = toHex(txRequest.to); + } + if (txRequest.data !== undefined) { + baseTx.data = toHex(txRequest.data); + } + + const txToSign = + ethers.Transaction.from(baseTx).unsignedSerialized.substring(2); + + const resolution = await ledgerService.resolveTransaction(txToSign, {}, {}); + + const signature = await this._withConfirmation(() => + this.eth.signTransaction(path, txToSign, resolution) + ); + + const rawTransaction = ethers.Transaction.from({ + ...baseTx, + signature: { + v: toHex(signature.v), + r: toHex(signature.r), + s: toHex(signature.s), + }, + }).serialized; + + return this._wrappedProvider.request({ + method: "eth_sendRawTransaction", + params: [rawTransaction], + }); + } + + private async _derivePath(addressToFindAsBuffer: Buffer): Promise { + const addressToFind = toHex(addressToFindAsBuffer).toLowerCase(); + + if (this.paths[addressToFind] !== undefined) { + return this.paths[addressToFind]; + } + + this.emit("derivation_start"); + + let path = ""; + try { + for ( + let account = 0; + account <= LedgerProvider.MAX_DERIVATION_ACCOUNTS; + account++ + ) { + path = `44'/60'/${account}'/0/0`; + + this.emit("derivation_progress", path, account); + + const wallet = await this.eth.getAddress(path); + const address = wallet.address.toLowerCase(); + + if (address === addressToFind) { + this.emit("derivation_success", path); + this.paths[addressToFind] = path; + + void cache.write(this.paths); // hanging promise + + return path; + } + } + } catch (error) { + const message = (error as Error).message; + + this.emit("derivation_failure"); + throw new HardhatLedgerDerivationPathError( + `There was an error trying to derivate path ${path}: "${message}". The wallet might be connected but locked or in the wrong app.`, + path + ); + } + + this.emit("derivation_failure"); + throw new HardhatLedgerDerivationPathError( + `Could not find a valid derivation path for ${addressToFind}. Paths from m/44'/60'/0'/0/0 to m/44'/60'/${LedgerProvider.MAX_DERIVATION_ACCOUNTS}'/0/0 were searched.`, + path + ); + } + + private async _withConfirmation any>( + func: T + ): Promise> { + try { + this.emit("confirmation_start"); + const result = await func(); + this.emit("confirmation_success"); + + return result; + } catch (error) { + this.emit("confirmation_failure"); + throw new HardhatLedgerError((error as Error).message); + } + } + + private async _toRpcSig(signature: Signature): Promise { + const { toRpcSig, toBuffer } = await import( + "@nomicfoundation/ethereumjs-util" + ); + + return toRpcSig( + BigInt(signature.v - 27), + toBuffer(toHex(signature.r)), + toBuffer(toHex(signature.s)) + ); + } + + private async _getNonce(address: Buffer): Promise { + const { bufferToHex } = await import("@nomicfoundation/ethereumjs-util"); + + const response = (await this._wrappedProvider.request({ + method: "eth_getTransactionCount", + params: [bufferToHex(address), "pending"], + })) as string; + + return rpcQuantityToBigInt(response); + } + + private async _requireControlledInit(address: Buffer): Promise { + this._requireControlledAddress(address); + await this.init(); + } + + private _requireControlledAddress(address: Buffer): void { + const hexAddress = toHex(address).toLowerCase(); + const isControlledAddress = this.options.accounts.includes(hexAddress); + + if (!isControlledAddress) { + throw new HardhatLedgerNotControlledAddressError( + "Tried to send a transaction with an address we don't control.", + hexAddress + ); + } + } +} diff --git a/packages/hardhat-ledger/src/type-extensions.ts b/packages/hardhat-ledger/src/type-extensions.ts new file mode 100644 index 0000000000..c1614a9ecc --- /dev/null +++ b/packages/hardhat-ledger/src/type-extensions.ts @@ -0,0 +1,17 @@ +import "hardhat/types/config"; + +declare module "hardhat/types/config" { + interface HardhatNetworkUserConfig { + ledgerAccounts?: string[]; + } + interface HardhatNetworkConfig { + ledgerAccounts: string[]; + } + + interface HttpNetworkUserConfig { + ledgerAccounts?: string[]; + } + interface HttpNetworkConfig { + ledgerAccounts: string[]; + } +} diff --git a/packages/hardhat-ledger/src/types.ts b/packages/hardhat-ledger/src/types.ts new file mode 100644 index 0000000000..f0d1f15735 --- /dev/null +++ b/packages/hardhat-ledger/src/types.ts @@ -0,0 +1,23 @@ +import Eth from "@ledgerhq/hw-app-eth"; + +export interface EthWrapper { + getAddress: Eth["getAddress"]; + signPersonalMessage: Eth["signPersonalMessage"]; + signEIP712Message: Eth["signEIP712Message"]; + signEIP712HashedMessage: Eth["signEIP712HashedMessage"]; + signTransaction: Eth["signTransaction"]; +} + +export interface Signature { + v: number; + s: string; + r: string; +} + +export interface LedgerOptions { + openTimeout?: number; + connectionTimeout?: number; + accounts: string[]; +} + +export type Paths = Record; // { address: path } diff --git a/packages/hardhat-ledger/test/.eslintrc.js b/packages/hardhat-ledger/test/.eslintrc.js new file mode 100644 index 0000000000..12ee5882f1 --- /dev/null +++ b/packages/hardhat-ledger/test/.eslintrc.js @@ -0,0 +1,11 @@ +module.exports = { + extends: [`${__dirname}/../.eslintrc.js`], + rules: { + "import/no-extraneous-dependencies": [ + "error", + { + devDependencies: true, + }, + ], + }, +}; diff --git a/packages/hardhat-ledger/test/errors.ts b/packages/hardhat-ledger/test/errors.ts new file mode 100644 index 0000000000..3791f8d624 --- /dev/null +++ b/packages/hardhat-ledger/test/errors.ts @@ -0,0 +1,80 @@ +import { assert } from "chai"; + +import { + HardhatLedgerConnectionError, + HardhatLedgerDerivationPathError, + HardhatLedgerError, + HardhatLedgerNotControlledAddressError, +} from "../src/errors"; + +describe("HardhatLedgerError", () => { + it("should set the plugin name of the error", () => { + const error = new HardhatLedgerError(""); + assert.equal(error.pluginName, "@nomiclabs/hardhat-ledger"); + }); + + it("should set the message of the error", () => { + const message = "Some message"; + const error = new HardhatLedgerError(message); + assert.equal(error.message, message); + }); +}); + +describe("HardhatLedgerNotControlledAddressError", () => { + it("should set the message of the error", () => { + const message = "Look, a message"; + const error = new HardhatLedgerNotControlledAddressError(message, ""); + assert.equal(error.message, message); + }); + + it("should store the address", () => { + const address = "0x3d6e2674e40ea221b4a48663d28eff77af564a50"; + const error = new HardhatLedgerNotControlledAddressError("", address); + assert.equal(error.address, address); + }); + + it("should detect a HardhatLedgerNotControlledAddressError", () => { + assert.isFalse( + HardhatLedgerNotControlledAddressError.instanceOf(new Error()) + ); + assert.isTrue( + HardhatLedgerNotControlledAddressError.instanceOf( + new HardhatLedgerNotControlledAddressError("", "") + ) + ); + }); +}); + +describe("HardhatLedgerDerivationPathError", () => { + it("should set the message of the error", () => { + const message = "Yet another message"; + const error = new HardhatLedgerDerivationPathError(message, ""); + assert.equal(error.message, message); + }); + + it("should store the path", () => { + const path = "44'/60'/0'/0/0"; + const error = new HardhatLedgerDerivationPathError("", path); + assert.equal(error.path, path); + }); + + it("should detect a HardhatLedgerDerivationPathError", () => { + assert.isFalse(HardhatLedgerDerivationPathError.instanceOf(new Error())); + assert.isTrue( + HardhatLedgerDerivationPathError.instanceOf( + new HardhatLedgerDerivationPathError("", "") + ) + ); + }); +}); + +describe("HardhatLedgerConnectionError", () => { + it("should detect a HardhatLegerConnectionError", () => { + assert.isFalse(HardhatLedgerConnectionError.instanceOf(new Error())); + assert.isTrue( + HardhatLedgerConnectionError.instanceOf( + new HardhatLedgerConnectionError(new Error("")) + ) + ); + }); +}); diff --git a/packages/hardhat-ledger/test/internal/cache.ts b/packages/hardhat-ledger/test/internal/cache.ts new file mode 100644 index 0000000000..c24dd69896 --- /dev/null +++ b/packages/hardhat-ledger/test/internal/cache.ts @@ -0,0 +1,50 @@ +import { assert } from "chai"; +import envPaths from "env-paths"; +import fs from "fs-extra"; +import sinon from "sinon"; +import path from "path"; + +import * as cache from "../../src/internal/cache"; + +describe("cache", () => { + let fsStub: sinon.SinonStubbedInstance; + let cacheDir: string; + + beforeEach(() => { + const { cache: cachePath } = envPaths("hardhat"); + + cacheDir = path.join(cachePath, "ledger", cache.CACHE_FILE_NAME); + fsStub = sinon.stub(fs); + }); + + afterEach(() => { + sinon.restore(); + }); + + describe("write", () => { + it("should write the supplied json to the ledger cache file", async () => { + const json = { some: "json" }; + await cache.write(json); + + // We need to do this by hand cause sinon does not play nice with overloads + const args = fsStub.writeJSON.getCall(0).args; + + assert.equal(args.length, 2); + assert.equal(args[0], cacheDir); + assert.deepEqual(args[1], json); + }); + }); + + describe("read", () => { + it("should read the ledger cache file", async () => { + const json = { another: "json" }; + + // We need to do this cast cause sinon does not play nice with overloads + fsStub.readJSON.returns(Promise.resolve(json) as any); + + const result = await cache.read(); + + assert.deepEqual(result, json); + }); + }); +}); diff --git a/packages/hardhat-ledger/test/internal/create-ledger-provider.ts b/packages/hardhat-ledger/test/internal/create-ledger-provider.ts new file mode 100644 index 0000000000..2a05abb363 --- /dev/null +++ b/packages/hardhat-ledger/test/internal/create-ledger-provider.ts @@ -0,0 +1,54 @@ +import { assert } from "chai"; +import sinon from "sinon"; + +import { NetworkConfig } from "hardhat/types"; + +import { EthereumMockedProvider } from "../mocks"; +import { createLedgerProvider } from "../../src/internal/create-ledger-provider"; +import * as spinners from "../../src/internal/with-spinners"; + +describe("createLedgerProvider", () => { + let mockedProvider: EthereumMockedProvider; + + beforeEach(() => { + mockedProvider = new EthereumMockedProvider(); + }); + + it("should pass the ledgerAccounts from the config to the LedgerProvider", () => { + const ledgerAccounts = [ + "0x704ad3adfa9eae2be46c907ef5325d0fabe17353", + "0xf4416d306caa15dd4cdf4cd882cd764a6b2aa9b2", + "0xe149ff2797adc146aa2d68d3df3e819c3c38e762", + "0x343fe45cd2d785a5f2e97a00de8436f9c42ef444", + ]; + const config = { ledgerAccounts } as NetworkConfig; + const ledgerProvider = createLedgerProvider(mockedProvider, config); + + assert.deepEqual(ledgerProvider.options.accounts, ledgerAccounts); + }); + + it("should pass the provider to the LedgerProvider", async () => { + const config = { + ledgerAccounts: ["0xf4416d306caa15dd4cdf4cd882cd764a6b2aa9b2"], + } as NetworkConfig; + const ledgerProvider = createLedgerProvider(mockedProvider, config); + const requestStub = sinon.stub(mockedProvider, "request"); + + await ledgerProvider.request({ method: "eth_blockNumber" }); + + sinon.assert.calledOnceWithExactly(requestStub, { + method: "eth_blockNumber", + }); + }); + + it("should return a new LedgerProvider with spinners handlers attached", () => { + const withSpinnerSpy = sinon.spy(spinners, "withSpinners"); + + const config = { + ledgerAccounts: ["0xe149ff2797adc146aa2d68d3df3e819c3c38e762"], + } as NetworkConfig; + const ledgerProvider = createLedgerProvider(mockedProvider, config); + + sinon.assert.calledOnceWithExactly(withSpinnerSpy, ledgerProvider); + }); +}); diff --git a/packages/hardhat-ledger/test/internal/utils.ts b/packages/hardhat-ledger/test/internal/utils.ts new file mode 100644 index 0000000000..6f7c20a9ea --- /dev/null +++ b/packages/hardhat-ledger/test/internal/utils.ts @@ -0,0 +1,20 @@ +import { assert } from "chai"; +import { toHex } from "../../src/internal/utils"; + +describe("toHex", () => { + it("should append 0x to the supplied string value", () => { + assert.equal(toHex("123"), "0x123"); + }); + + it("should not append 0x if the supplied string value already has it", () => { + assert.equal(toHex("0x123"), "0x123"); + }); + + it("should return the 0x hex representation of the Buffer", () => { + // "736f6d6520737472696e67".toString("hex") === "736f6d6520737472696e67" + assert.equal( + toHex(Buffer.from("some string", "utf8")), + "0x736f6d6520737472696e67" + ); + }); +}); diff --git a/packages/hardhat-ledger/test/internal/with-spinners.ts b/packages/hardhat-ledger/test/internal/with-spinners.ts new file mode 100644 index 0000000000..d744a7fc4a --- /dev/null +++ b/packages/hardhat-ledger/test/internal/with-spinners.ts @@ -0,0 +1,54 @@ +import { assert } from "chai"; +import sinon from "sinon"; +import EventEmitter from "events"; +import * as spinners from "../../src/internal/with-spinners"; + +describe("withSpinners", () => { + let eventEmitter: EventEmitter; + + function containsArray(baseArray: Array, values: string[]) { + return values.every((value) => baseArray.includes(value)); + } + + beforeEach(() => { + eventEmitter = new EventEmitter(); + }); + + afterEach(() => { + sinon.restore(); + }); + + it("should attach the connection events", () => { + const emitter = spinners.withSpinners(eventEmitter); + assert.isTrue( + containsArray(emitter.eventNames(), [ + "connection_start", + "connection_success", + "connection_failure", + ]) + ); + }); + + it("should attach the derivation events", () => { + const emitter = spinners.withSpinners(eventEmitter); + assert.isTrue( + containsArray(emitter.eventNames(), [ + "derivation_start", + "derivation_success", + "derivation_failure", + "derivation_progress", + ]) + ); + }); + + it("should attach the confirmation events", () => { + const emitter = spinners.withSpinners(eventEmitter); + assert.isTrue( + containsArray(emitter.eventNames(), [ + "confirmation_start", + "confirmation_success", + "confirmation_failure", + ]) + ); + }); +}); diff --git a/packages/hardhat-ledger/test/mocks.ts b/packages/hardhat-ledger/test/mocks.ts new file mode 100644 index 0000000000..8423da4de2 --- /dev/null +++ b/packages/hardhat-ledger/test/mocks.ts @@ -0,0 +1,10 @@ +import EventEmitter from "events"; + +import { EIP1193Provider, RequestArguments } from "hardhat/types"; + +export class EthereumMockedProvider + extends EventEmitter + implements EIP1193Provider +{ + public async request(_args: RequestArguments): Promise {} +} diff --git a/packages/hardhat-ledger/test/provider.ts b/packages/hardhat-ledger/test/provider.ts new file mode 100644 index 0000000000..0ea5c3a987 --- /dev/null +++ b/packages/hardhat-ledger/test/provider.ts @@ -0,0 +1,756 @@ +import { assert } from "chai"; +import sinon from "sinon"; + +import Eth from "@ledgerhq/hw-app-eth"; +import TransportNodeHid from "@ledgerhq/hw-transport-node-hid"; +import Transport from "@ledgerhq/hw-transport"; +import { EIP712Message } from "@ledgerhq/hw-app-eth/lib/modules/EIP712"; +import { TransportError } from "@ledgerhq/errors"; + +import { RequestArguments } from "hardhat/types"; + +import * as ethWrapper from "../src/internal/wrap-transport"; +import * as cache from "../src/internal/cache"; +import { LedgerProvider } from "../src/provider"; +import { EthWrapper, LedgerOptions } from "../src/types"; +import { + HardhatLedgerConnectionError, + HardhatLedgerDerivationPathError, +} from "../src/errors"; +import { EthereumMockedProvider } from "./mocks"; + +describe("LedgerProvider", () => { + let accounts: string[]; + let mockedProvider: EthereumMockedProvider; + let ethInstanceStub: sinon.SinonStubbedInstance; + let cacheStub: sinon.SinonStubbedInstance; + let provider: LedgerProvider; + + function stubTransport(transport: Transport) { + return sinon + .stub(TransportNodeHid, "create") + .returns(Promise.resolve(transport)); + } + + beforeEach(() => { + accounts = [ + "0xa809931e3b38059adae9bc5455bc567d0509ab92", + "0xda6a52afdae5ff66aa786da68754a227331f56e3", + "0xbc307688a80ec5ed0edc1279c44c1b34f7746bda", + ]; + mockedProvider = new EthereumMockedProvider(); + ethInstanceStub = sinon.createStubInstance(Eth); + cacheStub = sinon.stub(cache); + + sinon.stub(ethWrapper, "wrapTransport").returns(ethInstanceStub); + cacheStub.read.returns(Promise.resolve(undefined)); + + provider = new LedgerProvider({ accounts }, mockedProvider); + }); + + afterEach(() => { + sinon.restore(); + }); + + describe("instance", () => { + it("should lowercase all accounts", () => { + const uppercaseAccounts = [ + "0xA809931E3B38059ADAE9BC5455BC567D0509AB92", + "0xDA6A52AFDAE5FF66AA786DA68754A227331F56E3", + "0xBC307688A80EC5ED0EDC1279C44C1B34F7746BDA", + ]; + const uppercaseProvider = new LedgerProvider( + { accounts: uppercaseAccounts }, + mockedProvider + ); + const lowercasedAccounts = uppercaseAccounts.map((account) => + account.toLowerCase() + ); + + assert.deepEqual(uppercaseProvider.options.accounts, lowercasedAccounts); + }); + + it("should check for valid ethereum addresses", () => { + assert.throws( + () => + new LedgerProvider( + { + accounts: [ + "0xe149ff2797adc146aa2d68d3df3e819c3c38e762", + "0x1", + "0x343fe45cd2d785a5F2e97a00de8436f9c42Ef444", + ], + }, + mockedProvider + ), + "The following ledger address from the config is invalid: 0x1" + ); + }); + }); + + describe("create", () => { + beforeEach(() => { + stubTransport(new Transport()); + }); + + it("should return a provider instance", async () => { + const newProvider = await LedgerProvider.create( + { accounts }, + mockedProvider + ); + assert.instanceOf(newProvider, LedgerProvider); + }); + + it("should init the provider", async () => { + const spy = sinon.spy(LedgerProvider.prototype, "init"); + await LedgerProvider.create({ accounts }, mockedProvider); + assert.isTrue(spy.calledOnce); + }); + }); + + describe("init", () => { + let transport: Transport; + let createStub: sinon.SinonStub; + + beforeEach(() => { + transport = new Transport(); + createStub = stubTransport(transport); + }); + + it("should call the create method on TransportNodeHid", async () => { + await provider.init(); + + sinon.assert.calledOnceWithExactly( + createStub, + LedgerProvider.DEFAULT_TIMEOUT, + LedgerProvider.DEFAULT_TIMEOUT + ); + }); + + it("should only init once on multiple calls", async () => { + await provider.init(); + await provider.init(); + await provider.init(); + + sinon.assert.calledOnceWithExactly( + createStub, + LedgerProvider.DEFAULT_TIMEOUT, + LedgerProvider.DEFAULT_TIMEOUT + ); + }); + + it("should pass the timeout options to the Transport creation", async () => { + const options: LedgerOptions = { + accounts, + openTimeout: 1000, + connectionTimeout: 5432, + }; + const newProvider = new LedgerProvider(options, mockedProvider); + await newProvider.init(); + + sinon.assert.calledOnceWithExactly( + createStub, + options.openTimeout, + options.connectionTimeout + ); + }); + + it("should create an eth instance", async () => { + await provider.init(); + assert.instanceOf(provider.eth, Eth); + }); + + it("should throw a ledger provider error if create does", async () => { + const createError = new Error("Test Error"); + createStub.throws(createError); + + try { + await provider.init(); + } catch (error) { + if (!HardhatLedgerConnectionError.instanceOf(error)) { + assert.fail("Expected a ConnectionError"); + } + assert.include( + error.message, + `There was an error trying to establish a connection to the Ledger wallet: "${createError.message}".` + ); + } + }); + + it("should throw an error with the proper explanation if a transport error is thrown", async () => { + const createError = new TransportError( + "Transport Error", + "Transport Error Id" + ); + createStub.throws(createError); + + try { + await provider.init(); + } catch (error) { + if (!HardhatLedgerConnectionError.instanceOf(error)) { + assert.fail("Expected a ConnectionError"); + } + assert.include( + error.message, + `There was an error trying to establish a connection to the Ledger wallet: "${createError.message}".` + ); + assert.include(error.message, `The error id was: ${createError.id}`); + } + }); + + it("should start the paths cache with what the cache returns", async () => { + const newPaths = { + "0xe149ff2797adc146aa2d68d3df3e819c3c38e762": "44'/60'/0'/0/0", + }; + const oldPaths = { ...provider.paths }; // new object + + cacheStub.read.returns(Promise.resolve(newPaths)); + await provider.init(); + + assert.deepEqual(oldPaths, {}); + assert.deepEqual(newPaths, provider.paths); + }); + + describe("events", () => { + let emitSpy: sinon.SinonSpy; + + beforeEach(() => { + emitSpy = sinon.spy(provider, "emit"); + }); + + it("should emit the connection_start event", async () => { + await provider.init(); + sinon.assert.calledWithExactly(emitSpy, "connection_start"); + }); + + it("should emit the connection_success event if everything goes right", async () => { + await provider.init(); + sinon.assert.calledWithExactly(emitSpy, "connection_start"); + }); + + it("should emit the connection_failure if the connection fails", async () => { + try { + createStub.throws(new Error()); + await provider.init(); + } catch (error) {} + sinon.assert.calledWithExactly(emitSpy, "connection_failure"); + }); + }); + }); + + describe("request", () => { + let path: string; + let account: { address: string; publicKey: string }; + let rsv: { v: number; r: string; s: string }; + let txRsv: { v: string; r: string; s: string }; + let signature: string; + let dataToSign: string; + let typedMessage: EIP712Message; + let initSpy: sinon.SinonSpy; + + beforeEach(async () => { + stubTransport(new Transport()); + + initSpy = sinon.spy(provider, "init"); + + path = "44'/60'/1'/0/0"; + account = { + address: accounts[1], + publicKey: "0x1", + }; + ethInstanceStub.getAddress.callsFake(async (searchedPath: string) => + searchedPath === path ? account : { address: "0x0", publicKey: "0x0" } + ); + + rsv = { + v: 55, + r: "4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d", + s: "7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd0", + }; + txRsv = { + v: "f4f5", + r: "4ab14d7e96a8bc7390cfffa0260d4b82848428ce7f5b8dd367d13bf31944b6c0", + s: "3cc226daa6a2f4e22334c59c2e04ac72672af72907ec9c4a601189858ba60069", + }; + signature = + "0x4f4c17305743700648bc4f6cd3038ec6f6af0df73e31757007b7f59df7bee88d7e1941b264348e80c78c4027afc65a87b0a5e43e86742b8ca0823584c6788fd01c"; + dataToSign = + "0x5417aa2a18a44da0675524453ff108c545382f0d7e26605c56bba47c21b5e979"; + + typedMessage = { + types: { + EIP712Domain: [ + { name: "name", type: "string" }, + { name: "version", type: "string" }, + { name: "chainId", type: "uint256" }, + { name: "verifyingContract", type: "address" }, + ], + Person: [ + { name: "name", type: "string" }, + { name: "wallet", type: "address" }, + ], + Mail: [ + { name: "from", type: "Person" }, + { name: "to", type: "Person" }, + { name: "contents", type: "string" }, + ], + }, + primaryType: "Mail", + domain: { + name: "Ether Mail", + version: "1", + chainId: 1, + verifyingContract: "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC", + }, + message: { + from: { + name: "Cow", + wallet: "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826", + }, + to: { + name: "Bob", + wallet: "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB", + }, + contents: "Hello, Bob!", + }, + }; + }); + + describe("unsupported methods", () => { + it("should not init the provider if and unsupported JSONRPC method is called", async () => { + sinon.stub(mockedProvider, "request"); + await provider.request({ method: "eth_blockNumber" }); + await provider.request({ method: "eth_getBlockByNumber" }); + await provider.request({ method: "net_version" }); + + sinon.assert.notCalled(initSpy); + }); + + it("should forward unsupported JSONRPC methods to the wrapped provider", async () => { + const requestStub = sinon.stub(mockedProvider, "request"); + + const blockNumberArgs = { + method: "eth_blockNumber", + params: [1, 2, 3], + }; + await provider.request(blockNumberArgs); + + const netVersionArgs = { + method: "eth_getBlockByNumber", + params: ["2.0"], + }; + await provider.request(netVersionArgs); + + sinon.assert.calledTwice(requestStub); + sinon.assert.calledWith(requestStub.getCall(0), blockNumberArgs); + sinon.assert.calledWith(requestStub.getCall(1), netVersionArgs); + }); + }); + + describe("supported (sign) methods", () => { + it("should forward to the wrapped provider if the address doing the signing is not controlled", async () => { + const requestStub = sinon.stub(mockedProvider, "request"); + + // the address is not on the accounts the providers manage + const uncontrolledAddress = + "0x76F8654a8e981A4a5D634c2d3cE56E195a65c319"; + + const requestArgs = [ + { + method: "eth_sign", + params: [uncontrolledAddress, dataToSign], + }, + { + method: "personal_sign", + params: [dataToSign, uncontrolledAddress], + }, + { + method: "eth_signTypedData_v4", + params: [uncontrolledAddress, typedMessage], + }, + { + method: "eth_sendTransaction", + params: [ + { + from: uncontrolledAddress, + to: accounts[1], + value: "0x100", + gas: "0x1000000", + gasPrice: "0x100", + gasLimit: "0x1000000", + }, + ], + }, + ]; + + for (const [index, args] of requestArgs.entries()) { + await provider.request(args); + sinon.assert.calledWithExactly(requestStub.getCall(index), args); + } + + sinon.assert.notCalled(initSpy); + }); + + it("should return the configured and base accounts when the JSONRPC eth_accounts method is called", async () => { + const baseAccounts = [ + "0x18225dbbd263d5a01ac537db4d1eefc12fae8b24", + "0x704ad3adfa9eae2be46c907ef5325d0fabe17353", + ]; + sinon.stub(mockedProvider, "request").callsFake(async (args) => { + if (args.method === "eth_accounts") { + return baseAccounts; + } + }); + + const resultAccounts = await provider.request({ + method: "eth_accounts", + }); + assert.deepEqual([...baseAccounts, ...accounts], resultAccounts); + sinon.assert.notCalled(initSpy); + }); + + it("should call the ledger's signPersonalMessage method when the JSONRPC personal_sign method is called", async () => { + const stub = ethInstanceStub.signPersonalMessage.returns( + Promise.resolve(rsv) + ); + + const resultSignature = await provider.request({ + method: "personal_sign", + params: [dataToSign, account.address], + }); + + sinon.assert.calledOnceWithExactly(stub, path, dataToSign.slice(2)); // slices 0x + assert.deepEqual(signature, resultSignature); + sinon.assert.calledOnce(initSpy); + }); + + it("should call the ledger's signPersonalMessage method when the JSONRPC eth_sign method is called", async () => { + const stub = ethInstanceStub.signPersonalMessage.returns( + Promise.resolve(rsv) + ); + + const resultSignature = await provider.request({ + method: "eth_sign", + params: [account.address, dataToSign], + }); + + sinon.assert.calledOnceWithExactly(stub, path, dataToSign.slice(2)); // slices 0x + assert.deepEqual(signature, resultSignature); + sinon.assert.calledOnce(initSpy); + }); + + it("should call the ledger's signEIP712Message method when the JSONRPC eth_signTypedData_v4 method is called", async () => { + const stub = ethInstanceStub.signEIP712Message.returns( + Promise.resolve(rsv) + ); + + const resultSignature = await provider.request({ + method: "eth_signTypedData_v4", + params: [account.address, typedMessage], + }); + + sinon.assert.calledOnceWithExactly(stub, path, typedMessage); + assert.deepEqual(signature, resultSignature); + sinon.assert.calledOnce(initSpy); + }); + + it("should call the ledger's signEIP712HashedMessage method when the JSONRPC eth_signTypedData_v4 method is called", async () => { + ethInstanceStub.signEIP712Message.throws("Unsupported Ledger"); + + const stub = ethInstanceStub.signEIP712HashedMessage.returns( + Promise.resolve(rsv) + ); + + const resultSignature = await provider.request({ + method: "eth_signTypedData_v4", + params: [account.address, typedMessage], + }); + + sinon.assert.calledOnceWithExactly( + stub, + path, + "0xf2cee375fa42b42143804025fc449deafd50cc031ca257e0b194a650a912090f", // hash domain + "0xc52c0ee5d84264471806290a3f2c4cecfc5490626bf912d01f240d7a274b371e" // hash struct + ); + assert.deepEqual(signature, resultSignature); + sinon.assert.calledOnce(initSpy); + }); + + it("should call the ledger's signTransaction method when the JSONRPC eth_sendTransaction method is called", async () => { + const numberToRpcQuantity = (n: number | bigint) => + `0x${n.toString(16)}`; + + const tx = + "0xf8626464830f4240949f649fe750340a295dddbbd7e1ec8f378cf24b43648082f4f5a04ab14d7e96a8bc7390cfffa0260d4b82848428ce7f5b8dd367d13bf31944b6c0a03cc226daa6a2f4e22334c59c2e04ac72672af72907ec9c4a601189858ba60069"; + + const requestStub = sinon.stub(); + sinon.replace( + mockedProvider, + "request", + async (args: RequestArguments) => { + requestStub(args); + + switch (args.method) { + case "eth_chainId": + return "0x7a69"; + case "eth_getTransactionCount": + return "0x64"; + case "eth_sendRawTransaction": + return tx; + } + } + ); + + const signTransactionStub = ethInstanceStub.signTransaction.returns( + Promise.resolve(txRsv) + ); + + const resultTx = await provider.request({ + method: "eth_sendTransaction", + params: [ + { + from: account.address, + to: accounts[1], + value: numberToRpcQuantity(100), + gas: numberToRpcQuantity(1000000), + gasPrice: numberToRpcQuantity(100), + gasLimit: numberToRpcQuantity(1000000), + }, + ], + }); + + sinon.assert.calledOnceWithExactly( + signTransactionStub, + path, + "01e1827a696464830f424094da6a52afdae5ff66aa786da68754a227331f56e36480c0", + { + nfts: [], + erc20Tokens: [], + externalPlugin: [], + plugin: [], + domains: [], + } + ); + sinon.assert.calledWithExactly(requestStub.getCall(0), { + method: "eth_getTransactionCount", + params: [account.address, "pending"], + }); + sinon.assert.calledWithExactly(requestStub.getCall(1), { + method: "eth_chainId", + }); + sinon.assert.calledWithExactly(requestStub.getCall(2), { + method: "eth_sendRawTransaction", + params: [ + "0x01f864827a696464830f424094da6a52afdae5ff66aa786da68754a227331f56e36480c080a04ab14d7e96a8bc7390cfffa0260d4b82848428ce7f5b8dd367d13bf31944b6c0a03cc226daa6a2f4e22334c59c2e04ac72672af72907ec9c4a601189858ba60069", + ], + }); + assert.equal(tx, resultTx); + sinon.assert.calledOnce(initSpy); + }); + }); + + describe("path derivation", () => { + async function requestPersonalSign() { + ethInstanceStub.signPersonalMessage.returns(Promise.resolve(rsv)); + await provider.request({ + method: "personal_sign", + params: [dataToSign, account.address], + }); + } + + it("should cache the derived path from the supplied accounts", async () => { + await requestPersonalSign(); + await requestPersonalSign(); + await requestPersonalSign(); + await requestPersonalSign(); + + sinon.assert.calledTwice(ethInstanceStub.getAddress); + sinon.assert.calledWith(ethInstanceStub.getAddress, "44'/60'/0'/0/0"); + sinon.assert.calledWith(ethInstanceStub.getAddress, "44'/60'/1'/0/0"); + }); + + it("should cache the path per address on the paths property", async () => { + await requestPersonalSign(); + await requestPersonalSign(); + + assert.deepEqual(provider.paths, { [accounts[1]]: path }); + }); + + it("should write the cache with the new paths", async () => { + await requestPersonalSign(); + await requestPersonalSign(); + await requestPersonalSign(); + + sinon.assert.calledOnceWithExactly(cacheStub.write, { + [accounts[1]]: path, + }); + }); + + it("should not break if caching fails", async () => { + cacheStub.write.returns(Promise.reject(new Error("Write error"))); + + let hasThrown = false; + try { + await requestPersonalSign(); + } catch (error) { + console.log(error); + hasThrown = true; + } + + assert.isFalse(hasThrown); + }); + + it("should throw a DerivationPathError if trying to get the address fails", async () => { + const errorMessage = "Getting the address broke"; + ethInstanceStub.getAddress.throws(new Error(errorMessage)); + try { + await requestPersonalSign(); + } catch (error) { + const errorPath = "44'/60'/0'/0/0"; + if (!HardhatLedgerDerivationPathError.instanceOf(error)) { + assert.fail("Expected a DerivationPathError"); + } + assert.equal(error.path, errorPath); + assert.equal( + (error as HardhatLedgerDerivationPathError).message, + `There was an error trying to derivate path ${errorPath}: "${errorMessage}". The wallet might be connected but locked or in the wrong app.` + ); + } + }); + + it("should throw a DerivationPathError if the max number of derivations is searched without a result", async () => { + try { + ethInstanceStub.getAddress.callsFake(async () => ({ + address: "0x0", + publicKey: "0x0", + })); + await requestPersonalSign(); + } catch (error) { + const errorPath = `44'/60'/${LedgerProvider.MAX_DERIVATION_ACCOUNTS}'/0/0`; + if (!HardhatLedgerDerivationPathError.instanceOf(error)) { + assert.fail("Expected a DerivationPathError"); + } + assert.equal(error.path, errorPath); + assert.equal( + (error as HardhatLedgerDerivationPathError).message, + `Could not find a valid derivation path for ${accounts[1]}. Paths from m/44'/60'/0'/0/0 to m/${errorPath} were searched.` + ); + } + }); + }); + + describe("events", () => { + let emitSpy: sinon.SinonSpy; + + beforeEach(() => { + emitSpy = sinon.spy(provider, "emit"); + }); + + describe("confirmation", () => { + it("should emit the confirmation_start event when a request for signing is made", async () => { + ethInstanceStub.signPersonalMessage.returns(Promise.resolve(rsv)); + await provider.request({ + method: "personal_sign", + params: [dataToSign, account.address], + }); + + sinon.assert.calledWithExactly(emitSpy, "confirmation_start"); + }); + + it("should emit the confirmation_success event when a request for signing goes OK", async () => { + ethInstanceStub.signPersonalMessage.returns(Promise.resolve(rsv)); + await provider.request({ + method: "eth_sign", + params: [account.address, dataToSign], + }); + + sinon.assert.calledWithExactly(emitSpy, "confirmation_success"); + }); + + it("should emit the confirmation_failure event when a request for signing breaks", async () => { + ethInstanceStub.signEIP712Message.throws(new Error()); + ethInstanceStub.signEIP712HashedMessage.throws(new Error()); + try { + await provider.request({ + method: "eth_signTypedData_v4", + params: [account.address, typedMessage], + }); + } catch (error) {} + + sinon.assert.calledWithExactly(emitSpy, "confirmation_failure"); + }); + }); + + describe("derivation", () => { + async function requestSign() { + ethInstanceStub.signPersonalMessage.returns(Promise.resolve(rsv)); + await provider.request({ + method: "eth_sign", + params: [account.address, dataToSign], + }); + } + + it("should emit the derivation_start event when a request for signing is made", async () => { + await requestSign(); + sinon.assert.calledWithExactly(emitSpy, "derivation_start"); + }); + + it("should emit the derivation_progress event with the derived paths when a request for signing is made", async () => { + await requestSign(); + sinon.assert.calledWithExactly( + emitSpy, + "derivation_progress", + "44'/60'/0'/0/0", + 0 + ); + sinon.assert.calledWithExactly( + emitSpy, + "derivation_progress", + "44'/60'/1'/0/0", + 1 + ); + }); + + it("should emit the derivation_success event with the path when a request for signing is made and succeeds", async () => { + await requestSign(); + sinon.assert.calledWithExactly( + emitSpy, + "derivation_success", + "44'/60'/1'/0/0" + ); + }); + + it("should emit the derivation_failure event when a request for signing is made and breaks", async () => { + try { + ethInstanceStub.getAddress.throws(new Error()); + await requestSign(); + } catch (error) {} + sinon.assert.calledWithExactly(emitSpy, "derivation_failure"); + }); + + it("should emit the derivation_failure event when a request for signing is made and can't find a valid path", async () => { + try { + ethInstanceStub.getAddress.callsFake(async () => ({ + address: "0x0", + publicKey: "0x0", + })); + await requestSign(); + } catch (error) {} + sinon.assert.calledWithExactly(emitSpy, "derivation_failure"); + }); + }); + + describe("eth_accounts", () => { + beforeEach(() => { + // eth_accounts will be called to merge the accounts + sinon.stub(mockedProvider, "request").returns(Promise.resolve([])); + }); + + it("should not emit a connection or derivation event with eth_accounts", async () => { + await provider.request({ method: "eth_accounts" }); + sinon.assert.notCalled(emitSpy); + }); + }); + }); + }); +}); diff --git a/packages/hardhat-ledger/tsconfig.json b/packages/hardhat-ledger/tsconfig.json new file mode 100644 index 0000000000..f3ad7b97c6 --- /dev/null +++ b/packages/hardhat-ledger/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../config/typescript/tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "composite": true + }, + "exclude": ["./dist", "./node_modules", "./test/**/hardhat.config.ts"], + "references": [ + { + "path": "../hardhat-core/src" + } + ] +} diff --git a/packages/hardhat-network-helpers/.eslintrc.js b/packages/hardhat-network-helpers/.eslintrc.js index 889740f226..c6de07705a 100644 --- a/packages/hardhat-network-helpers/.eslintrc.js +++ b/packages/hardhat-network-helpers/.eslintrc.js @@ -1,7 +1,24 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { project: `${__dirname}/tsconfig.json`, sourceType: "module", }, + overrides: [ + { + files: ["src/index.ts"], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [...slowImportsCommonIgnoredModules], + }, + ], + }, + }, + ], }; diff --git a/packages/hardhat-network-helpers/.gitignore b/packages/hardhat-network-helpers/.gitignore index 80110bdc12..8707b8ac84 100644 --- a/packages/hardhat-network-helpers/.gitignore +++ b/packages/hardhat-network-helpers/.gitignore @@ -21,10 +21,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -63,21 +59,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-network-helpers/.prettierignore b/packages/hardhat-network-helpers/.prettierignore index c66ddcfc8a..2ef4541cbc 100644 --- a/packages/hardhat-network-helpers/.prettierignore +++ b/packages/hardhat-network-helpers/.prettierignore @@ -10,3 +10,4 @@ /test/fixture-projects/**/artifacts /test/fixture-projects/**/cache CHANGELOG.md +!.eslintrc.js diff --git a/packages/hardhat-network-helpers/CHANGELOG.md b/packages/hardhat-network-helpers/CHANGELOG.md index 6c554ac9e1..4e1454d79e 100644 --- a/packages/hardhat-network-helpers/CHANGELOG.md +++ b/packages/hardhat-network-helpers/CHANGELOG.md @@ -1,5 +1,17 @@ # @nomicfoundation/hardhat-network-helpers +## 1.0.10 + +### Patch Changes + +- 43d75470c: Added support for using network helpers on anvil network (thanks @tmigone!) + +## 1.0.9 + +### Patch Changes + +- 9715d4195: Added support for receiving Date instances in `increaseTo` network helper (thanks @Saty248) + ## 1.0.8 ### Patch Changes diff --git a/packages/hardhat-network-helpers/LICENSE b/packages/hardhat-network-helpers/LICENSE index 3b8858c555..3b7e8c7eab 100644 --- a/packages/hardhat-network-helpers/LICENSE +++ b/packages/hardhat-network-helpers/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-network-helpers/package.json b/packages/hardhat-network-helpers/package.json index 18d28fe319..a2e4aa1835 100644 --- a/packages/hardhat-network-helpers/package.json +++ b/packages/hardhat-network-helpers/package.json @@ -1,6 +1,6 @@ { "name": "@nomicfoundation/hardhat-network-helpers", - "version": "1.0.8", + "version": "1.0.10", "description": "Hardhat utils for testing", "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-network-helpers", "repository": "github:nomicfoundation/hardhat", @@ -15,13 +15,14 @@ "testing" ], "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", "test": "mocha --recursive \"test/**/*.ts\" --exit", "build": "tsc --build .", - "prepublishOnly": "yarn build", + "prepublishOnly": "pnpm build", "clean": "rimraf dist internal types *.{d.ts,js}{,.map} build-test tsconfig.tsbuildinfo" }, "files": [ @@ -40,25 +41,28 @@ "ethereumjs-util": "^7.1.4" }, "devDependencies": { + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", "@types/chai": "^4.2.0", + "@types/chai-as-promised": "^7.1.3", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@types/node": "^16.0.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", - "eslint": "^7.29.0", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", - "ethers": "^5.0.0", - "hardhat": "^2.9.5", + "ethers-v5": "npm:ethers@5", + "hardhat": "workspace:^2.9.5", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", "ts-node": "^10.8.0", - "typescript": "~4.7.4" + "typescript": "~5.0.0" }, "peerDependencies": { "hardhat": "^2.9.5" diff --git a/packages/hardhat-network-helpers/src/helpers/time/increaseTo.ts b/packages/hardhat-network-helpers/src/helpers/time/increaseTo.ts index e86f15090d..3dc166a5a3 100644 --- a/packages/hardhat-network-helpers/src/helpers/time/increaseTo.ts +++ b/packages/hardhat-network-helpers/src/helpers/time/increaseTo.ts @@ -2,16 +2,19 @@ import type { NumberLike } from "../../types"; import { getHardhatProvider, toRpcQuantity, toBigInt } from "../../utils"; import { mine } from "../mine"; +import { millis } from "./duration"; /** * Mines a new block whose timestamp is `timestamp` * - * @param timestamp Must be bigger than the latest block's timestamp + * @param timestamp Can be `Date` or Epoch seconds. Must be bigger than the latest block's timestamp */ -export async function increaseTo(timestamp: NumberLike): Promise { +export async function increaseTo(timestamp: NumberLike | Date): Promise { const provider = await getHardhatProvider(); - const normalizedTimestamp = toBigInt(timestamp); + const normalizedTimestamp = toBigInt( + timestamp instanceof Date ? millis(timestamp.valueOf()) : timestamp + ); await provider.request({ method: "evm_setNextBlockTimestamp", diff --git a/packages/hardhat-network-helpers/src/utils.ts b/packages/hardhat-network-helpers/src/utils.ts index 53d6b2305b..8935752a72 100644 --- a/packages/hardhat-network-helpers/src/utils.ts +++ b/packages/hardhat-network-helpers/src/utils.ts @@ -5,31 +5,31 @@ import type { NumberLike } from "./types"; import { HardhatNetworkHelpersError, OnlyHardhatNetworkError } from "./errors"; -let cachedIsHardhatNetwork: boolean; -async function checkIfHardhatNetwork( +let cachedIsDevelopmentNetwork: boolean; +async function checkIfDevelopmentNetwork( provider: EIP1193Provider, networkName: string ): Promise { let version: string | undefined; - if (cachedIsHardhatNetwork === undefined) { + if (cachedIsDevelopmentNetwork === undefined) { try { version = (await provider.request({ method: "web3_clientVersion", })) as string; - cachedIsHardhatNetwork = version - .toLowerCase() - .startsWith("hardhatnetwork"); + cachedIsDevelopmentNetwork = + version.toLowerCase().startsWith("hardhatnetwork") || + version.toLowerCase().startsWith("anvil"); } catch (e) { - cachedIsHardhatNetwork = false; + cachedIsDevelopmentNetwork = false; } } - if (!cachedIsHardhatNetwork) { + if (!cachedIsDevelopmentNetwork) { throw new OnlyHardhatNetworkError(networkName, version); } - return cachedIsHardhatNetwork; + return cachedIsDevelopmentNetwork; } export async function getHardhatProvider(): Promise { @@ -37,7 +37,7 @@ export async function getHardhatProvider(): Promise { const provider = hre.network.provider; - await checkIfHardhatNetwork(provider, hre.network.name); + await checkIfDevelopmentNetwork(provider, hre.network.name); return hre.network.provider; } diff --git a/packages/hardhat-network-helpers/test/helpers/getStorageAt.ts b/packages/hardhat-network-helpers/test/helpers/getStorageAt.ts index 46de0a1624..06236298dc 100644 --- a/packages/hardhat-network-helpers/test/helpers/getStorageAt.ts +++ b/packages/hardhat-network-helpers/test/helpers/getStorageAt.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import { BN } from "ethereumjs-util"; -import { ethers } from "ethers"; +import { ethers } from "ethers-v5"; import * as hh from "../../src"; import { BlockTag, NumberLike } from "../../src/types"; diff --git a/packages/hardhat-network-helpers/test/helpers/mine.ts b/packages/hardhat-network-helpers/test/helpers/mine.ts index 97945826d1..8cf7674389 100644 --- a/packages/hardhat-network-helpers/test/helpers/mine.ts +++ b/packages/hardhat-network-helpers/test/helpers/mine.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import { BN } from "ethereumjs-util"; -import { ethers } from "ethers"; +import { ethers } from "ethers-v5"; import * as hh from "../../src"; import { NumberLike } from "../../src/types"; diff --git a/packages/hardhat-network-helpers/test/helpers/mineUpTo.ts b/packages/hardhat-network-helpers/test/helpers/mineUpTo.ts index bce852065a..3010630e27 100644 --- a/packages/hardhat-network-helpers/test/helpers/mineUpTo.ts +++ b/packages/hardhat-network-helpers/test/helpers/mineUpTo.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import { BN } from "ethereumjs-util"; -import { ethers } from "ethers"; +import { ethers } from "ethers-v5"; import * as hh from "../../src"; import { useEnvironment } from "../test-utils"; diff --git a/packages/hardhat-network-helpers/test/helpers/setBalance.ts b/packages/hardhat-network-helpers/test/helpers/setBalance.ts index 040a26a770..1af4b3c88d 100644 --- a/packages/hardhat-network-helpers/test/helpers/setBalance.ts +++ b/packages/hardhat-network-helpers/test/helpers/setBalance.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import { BN } from "ethereumjs-util"; -import { ethers } from "ethers"; +import { ethers } from "ethers-v5"; import * as hh from "../../src"; import { NumberLike } from "../../src/types"; diff --git a/packages/hardhat-network-helpers/test/helpers/setBlockGasLimit.ts b/packages/hardhat-network-helpers/test/helpers/setBlockGasLimit.ts index 5604bf0f48..0a717d924c 100644 --- a/packages/hardhat-network-helpers/test/helpers/setBlockGasLimit.ts +++ b/packages/hardhat-network-helpers/test/helpers/setBlockGasLimit.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import { BN } from "ethereumjs-util"; -import { ethers } from "ethers"; +import { ethers } from "ethers-v5"; import * as hh from "../../src"; import { NumberLike } from "../../src/types"; diff --git a/packages/hardhat-network-helpers/test/helpers/setNextBlockBaseFeePerGas.ts b/packages/hardhat-network-helpers/test/helpers/setNextBlockBaseFeePerGas.ts index 85b078a25a..e9404cb891 100644 --- a/packages/hardhat-network-helpers/test/helpers/setNextBlockBaseFeePerGas.ts +++ b/packages/hardhat-network-helpers/test/helpers/setNextBlockBaseFeePerGas.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import { BN } from "ethereumjs-util"; -import { ethers } from "ethers"; +import { ethers } from "ethers-v5"; import * as hh from "../../src"; import { NumberLike } from "../../src/types"; diff --git a/packages/hardhat-network-helpers/test/helpers/setNonce.ts b/packages/hardhat-network-helpers/test/helpers/setNonce.ts index b1f5ea7a45..2e619a7237 100644 --- a/packages/hardhat-network-helpers/test/helpers/setNonce.ts +++ b/packages/hardhat-network-helpers/test/helpers/setNonce.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import { BN } from "ethereumjs-util"; -import { ethers } from "ethers"; +import { ethers } from "ethers-v5"; import * as hh from "../../src"; import { NumberLike } from "../../src/types"; diff --git a/packages/hardhat-network-helpers/test/helpers/setPrevRandao.ts b/packages/hardhat-network-helpers/test/helpers/setPrevRandao.ts index a42db5b6ce..18f1a68516 100644 --- a/packages/hardhat-network-helpers/test/helpers/setPrevRandao.ts +++ b/packages/hardhat-network-helpers/test/helpers/setPrevRandao.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import { BN } from "ethereumjs-util"; -import { ethers } from "ethers"; +import { ethers } from "ethers-v5"; import * as hh from "../../src"; import { NumberLike } from "../../src/types"; diff --git a/packages/hardhat-network-helpers/test/helpers/setStorageAt.ts b/packages/hardhat-network-helpers/test/helpers/setStorageAt.ts index 18aac66834..62de311629 100644 --- a/packages/hardhat-network-helpers/test/helpers/setStorageAt.ts +++ b/packages/hardhat-network-helpers/test/helpers/setStorageAt.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import { BN } from "ethereumjs-util"; -import { ethers } from "ethers"; +import { ethers } from "ethers-v5"; import * as hh from "../../src"; import { toPaddedRpcQuantity } from "../../src/utils"; diff --git a/packages/hardhat-network-helpers/test/helpers/time/advanceBlock.ts b/packages/hardhat-network-helpers/test/helpers/time/advanceBlock.ts index 352462d271..ea7ffebbc6 100644 --- a/packages/hardhat-network-helpers/test/helpers/time/advanceBlock.ts +++ b/packages/hardhat-network-helpers/test/helpers/time/advanceBlock.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import { BN } from "ethereumjs-util"; -import { ethers } from "ethers"; +import { ethers } from "ethers-v5"; import * as hh from "../../../src"; import { NumberLike } from "../../../src/types"; diff --git a/packages/hardhat-network-helpers/test/helpers/time/advanceBlockTo.ts b/packages/hardhat-network-helpers/test/helpers/time/advanceBlockTo.ts index 44c4031bee..6d6d6315e4 100644 --- a/packages/hardhat-network-helpers/test/helpers/time/advanceBlockTo.ts +++ b/packages/hardhat-network-helpers/test/helpers/time/advanceBlockTo.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import { BN } from "ethereumjs-util"; -import { ethers } from "ethers"; +import { ethers } from "ethers-v5"; import * as hh from "../../../src"; import { useEnvironment } from "../../test-utils"; diff --git a/packages/hardhat-network-helpers/test/helpers/time/increase.ts b/packages/hardhat-network-helpers/test/helpers/time/increase.ts index 719fa169a9..ce14bc809c 100644 --- a/packages/hardhat-network-helpers/test/helpers/time/increase.ts +++ b/packages/hardhat-network-helpers/test/helpers/time/increase.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import { BN } from "ethereumjs-util"; -import { ethers } from "ethers"; +import { ethers } from "ethers-v5"; import * as hh from "../../../src"; import { NumberLike } from "../../../src/types"; diff --git a/packages/hardhat-network-helpers/test/helpers/time/increaseTo.ts b/packages/hardhat-network-helpers/test/helpers/time/increaseTo.ts index 9e4301cd79..b57c452149 100644 --- a/packages/hardhat-network-helpers/test/helpers/time/increaseTo.ts +++ b/packages/hardhat-network-helpers/test/helpers/time/increaseTo.ts @@ -1,6 +1,6 @@ import { assert } from "chai"; import { BN } from "ethereumjs-util"; -import { ethers } from "ethers"; +import { ethers } from "ethers-v5"; import * as hh from "../../../src"; import { useEnvironment } from "../../test-utils"; @@ -91,6 +91,19 @@ describe("time#increaseTo", function () { assert.equal(newTimestamp, endTimestamp); assert(endTimestamp - initialTimestamp === 3600); }); + + it(`should accept an argument of type [Date]`, async function () { + const initialTimestamp = await hh.time.latest(); + + const newTimestamp = initialTimestamp + 3600; + // multiply by 1000 because Date accepts Epoch millis + await hh.time.increaseTo(new Date(newTimestamp * 1000)); + + const endTimestamp = await hh.time.latest(); + + assert.equal(newTimestamp, endTimestamp); + assert(endTimestamp - initialTimestamp === 3600); + }); }); }); diff --git a/packages/hardhat-shorthand/.gitignore b/packages/hardhat-shorthand/.gitignore index c00d7e7296..4aca21f18d 100644 --- a/packages/hardhat-shorthand/.gitignore +++ b/packages/hardhat-shorthand/.gitignore @@ -15,10 +15,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -57,21 +53,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-shorthand/LICENSE b/packages/hardhat-shorthand/LICENSE index 3b8858c555..3b7e8c7eab 100644 --- a/packages/hardhat-shorthand/LICENSE +++ b/packages/hardhat-shorthand/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-shorthand/package.json b/packages/hardhat-shorthand/package.json index 4bd3900b7e..afb53737e1 100644 --- a/packages/hardhat-shorthand/package.json +++ b/packages/hardhat-shorthand/package.json @@ -17,13 +17,14 @@ "cli" ], "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", "test": "mocha --recursive \"test/**/*.ts\" --exit", "build": "tsc --build .", - "prepublishOnly": "yarn build", + "prepublishOnly": "pnpm build", "clean": "rimraf dist" }, "files": [ @@ -33,24 +34,28 @@ "README.md" ], "devDependencies": { + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", "@types/chai": "^4.2.0", + "@types/debug": "^4.1.4", "@types/fs-extra": "^5.1.0", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@types/node": "^16.0.0", + "@types/semver": "^6.0.2", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "chai": "^4.2.0", - "eslint": "^7.29.0", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", - "hardhat": "^2.0.0", + "hardhat": "workspace:^2.0.0", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", "ts-node": "^10.8.0", - "typescript": "~4.7.4" + "typescript": "~5.0.0" }, "dependencies": { "@fvictorio/tabtab": "^0.0.3", diff --git a/packages/hardhat-solhint/.eslintrc.js b/packages/hardhat-solhint/.eslintrc.js index 889740f226..c6de07705a 100644 --- a/packages/hardhat-solhint/.eslintrc.js +++ b/packages/hardhat-solhint/.eslintrc.js @@ -1,7 +1,24 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { project: `${__dirname}/tsconfig.json`, sourceType: "module", }, + overrides: [ + { + files: ["src/index.ts"], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [...slowImportsCommonIgnoredModules], + }, + ], + }, + }, + ], }; diff --git a/packages/hardhat-solhint/.gitignore b/packages/hardhat-solhint/.gitignore index c00d7e7296..4aca21f18d 100644 --- a/packages/hardhat-solhint/.gitignore +++ b/packages/hardhat-solhint/.gitignore @@ -15,10 +15,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -57,21 +53,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-solhint/LICENSE b/packages/hardhat-solhint/LICENSE index 3b8858c555..3b7e8c7eab 100644 --- a/packages/hardhat-solhint/LICENSE +++ b/packages/hardhat-solhint/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-solhint/package.json b/packages/hardhat-solhint/package.json index eee048881f..c1f15363d0 100644 --- a/packages/hardhat-solhint/package.json +++ b/packages/hardhat-solhint/package.json @@ -18,13 +18,14 @@ "linter" ], "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", "test": "mocha --recursive \"test/**/*.ts\" --exit", "build": "tsc --build .", - "prepublishOnly": "yarn build", + "prepublishOnly": "pnpm build", "clean": "rimraf dist" }, "files": [ @@ -37,26 +38,29 @@ "solhint": "^3.4.0" }, "devDependencies": { + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", "@types/chai": "^4.2.0", "@types/fs-extra": "^5.1.0", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@types/node": "^16.0.0", + "@types/sinon": "^9.0.8", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "chai": "^4.2.0", - "eslint": "^7.29.0", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", "fs-extra": "^7.0.1", - "hardhat": "^2.0.0", + "hardhat": "workspace:^2.0.0", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", "sinon": "^9.0.0", "ts-node": "^10.8.0", - "typescript": "~4.7.4" + "typescript": "~5.0.0" }, "peerDependencies": { "hardhat": "^2.0.0" diff --git a/packages/hardhat-solpp/.eslintrc.js b/packages/hardhat-solpp/.eslintrc.js index 889740f226..c6de07705a 100644 --- a/packages/hardhat-solpp/.eslintrc.js +++ b/packages/hardhat-solpp/.eslintrc.js @@ -1,7 +1,24 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { project: `${__dirname}/tsconfig.json`, sourceType: "module", }, + overrides: [ + { + files: ["src/index.ts"], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [...slowImportsCommonIgnoredModules], + }, + ], + }, + }, + ], }; diff --git a/packages/hardhat-solpp/.gitignore b/packages/hardhat-solpp/.gitignore index c00d7e7296..4aca21f18d 100644 --- a/packages/hardhat-solpp/.gitignore +++ b/packages/hardhat-solpp/.gitignore @@ -15,10 +15,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -57,21 +53,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-solpp/LICENSE b/packages/hardhat-solpp/LICENSE index 3b8858c555..3b7e8c7eab 100644 --- a/packages/hardhat-solpp/LICENSE +++ b/packages/hardhat-solpp/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-solpp/package.json b/packages/hardhat-solpp/package.json index 790862f71c..c6be7b6cda 100644 --- a/packages/hardhat-solpp/package.json +++ b/packages/hardhat-solpp/package.json @@ -18,13 +18,14 @@ "solpp" ], "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", "test": "mocha --recursive \"test/**/*.ts\" --exit", "build": "tsc --build .", - "prepublishOnly": "yarn build", + "prepublishOnly": "pnpm build", "clean": "rimraf dist" }, "files": [ @@ -38,24 +39,26 @@ "solpp": "^0.11.5" }, "devDependencies": { + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", "@types/chai": "^4.2.0", "@types/fs-extra": "^5.1.0", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@types/node": "^16.0.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "chai": "^4.2.0", - "eslint": "^7.29.0", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", - "hardhat": "^2.0.0", + "hardhat": "workspace:^2.0.0", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", "ts-node": "^10.8.0", - "typescript": "~4.7.4" + "typescript": "~5.0.0" }, "peerDependencies": { "hardhat": "^2.0.0" diff --git a/packages/hardhat-toolbox-viem/.eslintrc.js b/packages/hardhat-toolbox-viem/.eslintrc.js new file mode 100644 index 0000000000..44ed8ed6d5 --- /dev/null +++ b/packages/hardhat-toolbox-viem/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: [`${__dirname}/../../config/eslint/eslintrc.js`], + parserOptions: { + project: `${__dirname}/src/tsconfig.json`, + sourceType: "module", + }, +}; diff --git a/packages/hardhat-toolbox-viem/.gitignore b/packages/hardhat-toolbox-viem/.gitignore new file mode 100644 index 0000000000..bf1014bb51 --- /dev/null +++ b/packages/hardhat-toolbox-viem/.gitignore @@ -0,0 +1,92 @@ +# Node modules +/node_modules + +# Compilation output +/build-test/ +/dist +/internal +/*.js +/*.js.map +/*.d.ts +/*.d.ts.map + +!.eslintrc.js + +# Code coverage artifacts +/coverage +/.nyc_output + +# Below is Github's node gitignore template, +# ignoring the node_modules part, as it'd ignore every node_modules, and we have some for testing + +# Logs +logs +*.log + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +#node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'pnpm pack' +*.tgz + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + diff --git a/packages/hardhat-toolbox-viem/.mocharc.json b/packages/hardhat-toolbox-viem/.mocharc.json new file mode 100644 index 0000000000..d00ceb4138 --- /dev/null +++ b/packages/hardhat-toolbox-viem/.mocharc.json @@ -0,0 +1,5 @@ +{ + "require": "ts-node/register/files", + "ignore": ["test/fixture-projects/**/*"], + "timeout": 10000 +} diff --git a/packages/hardhat-toolbox-viem/.prettierignore b/packages/hardhat-toolbox-viem/.prettierignore new file mode 100644 index 0000000000..1961b8ba50 --- /dev/null +++ b/packages/hardhat-toolbox-viem/.prettierignore @@ -0,0 +1,13 @@ +/node_modules +/dist +/internal +/test/fixture-projects/**/artifacts +/test/fixture-projects/**/artifacts-dir +/test/fixture-projects/**/cache +/*.d.ts +/*.d.ts.map +/*.js +/*.js.map +/build-test +CHANGELOG.md +!.eslintrc.js diff --git a/packages/hardhat-toolbox-viem/CHANGELOG.md b/packages/hardhat-toolbox-viem/CHANGELOG.md new file mode 100644 index 0000000000..3d01d2bd31 --- /dev/null +++ b/packages/hardhat-toolbox-viem/CHANGELOG.md @@ -0,0 +1,7 @@ +# @nomicfoundation/hardhat-toolbox-viem + +## 2.0.0 + +### Major Changes + +- 23665f399: Upgraded hardhat-verify dependency diff --git a/packages/hardhat-toolbox-viem/LICENSE b/packages/hardhat-toolbox-viem/LICENSE new file mode 100644 index 0000000000..3b7e8c7eab --- /dev/null +++ b/packages/hardhat-toolbox-viem/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Nomic Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/hardhat-toolbox-viem/README.md b/packages/hardhat-toolbox-viem/README.md new file mode 100644 index 0000000000..c6ec648044 --- /dev/null +++ b/packages/hardhat-toolbox-viem/README.md @@ -0,0 +1,28 @@ +[![npm](https://img.shields.io/npm/v/@nomicfoundation/hardhat-toolbox-viem.svg)](https://www.npmjs.com/package/@nomicfoundation/hardhat-toolbox-viem) [![hardhat](https://hardhat.org/buidler-plugin-badge.svg?1)](https://hardhat.org) + +# Hardhat Toolbox (Viem based) + +The `@nomicfoundation/hardhat-toolbox-viem` plugin bundles all the commonly used packages and Hardhat plugins we recommend to start developing with Hardhat. + +When you use this plugin, you'll be able to: + +- Deploy and interact with your contracts using [Viem](https://viem.sh/) and the [`hardhat-viem`](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-viem) plugin. +- Test your contracts with [Mocha](https://mochajs.org/), [Chai](https://chaijs.com/) and [Chai as Promised](https://github.com/domenic/chai-as-promised#chai-assertions-for-promises). Note: the plugin Hardhat Chai Matchers is currently not available for Viem. +- Interact with Hardhat Network with our [Hardhat Network Helpers](https://hardhat.org/hardhat-network-helpers). +- Verify the source code of your contracts with the [hardhat-verify](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify) plugin. +- Get metrics on the gas used by your contracts with the [hardhat-gas-reporter](https://github.com/cgewecke/hardhat-gas-reporter) plugin. +- Measure your tests coverage with [solidity-coverage](https://github.com/sc-forks/solidity-coverage). + +**Note:** you might want to pin Viem-related dependencies because Viem does not strictly follow semantic versioning for type changes. You can read more [here](https://hardhat.org/hardhat-runner/docs/advanced/using-viem#managing-types-and-version-stability). + +### Usage + +To create a new project that uses the Toolbox, check our [Setting up a project guide](https://hardhat.org/hardhat-runner/docs/guides/project-setup) but select the _Create a TypeScript project (with Viem)_ option instead. + +### Network Helpers + +When the Toolbox is installed using npm 7 or later, its peer dependencies are automatically installed. However, these dependencies won't be listed in the `package.json`. As a result, directly importing the Network Helpers can be problematic for certain tools or IDEs. To address this issue, the Toolbox re-exports the Hardhat Network Helpers. You can use them like this: + +```ts +import helpers from "@nomicfoundation/hardhat-toolbox/network-helpers"; +``` diff --git a/packages/hardhat-toolbox-viem/package.json b/packages/hardhat-toolbox-viem/package.json new file mode 100644 index 0000000000..4d72c81122 --- /dev/null +++ b/packages/hardhat-toolbox-viem/package.json @@ -0,0 +1,95 @@ +{ + "name": "@nomicfoundation/hardhat-toolbox-viem", + "version": "2.0.0", + "description": "Nomic Foundation's recommended bundle of Hardhat plugins (viem based)", + "repository": "github:nomicfoundation/hardhat", + "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-toolbox-viem", + "author": "Nomic Foundation", + "contributors": [ + "Nomic Foundation" + ], + "license": "MIT", + "main": "index.js", + "types": "index.d.ts", + "keywords": [ + "ethereum", + "smart-contracts", + "hardhat", + "hardhat-plugin", + "hardhat-viem" + ], + "scripts": { + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", + "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", + "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", + "test": "mocha --recursive \"test/**/*.ts\" --exit", + "build": "tsc --build .", + "prepublishOnly": "pnpm build", + "clean": "rimraf dist *.{d.ts,js}{,.map} build-test tsconfig.tsbuildinfo" + }, + "files": [ + "src/", + "internal/", + "*.d.ts", + "*.d.ts.map", + "*.js", + "*.js.map", + "LICENSE", + "README.md" + ], + "dependencies": { + "chai-as-promised": "^7.1.1" + }, + "devDependencies": { + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", + "@nomicfoundation/hardhat-network-helpers": "workspace:^1.0.0", + "@nomicfoundation/hardhat-verify": "workspace:^2.0.0", + "@nomicfoundation/hardhat-viem": "workspace:^1.0.0", + "@types/chai": "^4.2.0", + "@types/chai-as-promised": "^7.1.6", + "@types/mocha": ">=9.1.0", + "@types/node": "^16.0.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", + "chai": "^4.2.0", + "eslint": "^8.44.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "hardhat": "workspace:^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "solidity-coverage": "^0.8.1", + "ts-node": "^10.8.0", + "typescript": "~5.0.4", + "viem": "^1.15.1" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@nomicfoundation/hardhat-viem": "^1.0.0", + "@types/chai": "^4.2.0", + "@types/chai-as-promised": "^7.1.6", + "@types/mocha": ">=9.1.0", + "@types/node": ">=16.0.0", + "chai": "^4.2.0", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typescript": "~5.0.4", + "viem": "^1.15.1" + }, + "bugs": { + "url": "https://github.com/nomicfoundation/hardhat/issues" + }, + "directories": { + "test": "test" + } +} diff --git a/packages/hardhat-toolbox-viem/src/index.ts b/packages/hardhat-toolbox-viem/src/index.ts new file mode 100644 index 0000000000..c3e0f8d0f3 --- /dev/null +++ b/packages/hardhat-toolbox-viem/src/index.ts @@ -0,0 +1,38 @@ +import "@nomicfoundation/hardhat-verify"; +import "@nomicfoundation/hardhat-viem"; +import "hardhat-gas-reporter"; +import "solidity-coverage"; +import "./internal/chai-setup"; + +/** + * If a new official plugin is added, make sure to update: + * - The tsconfig.json file + * - The hardhat-toolbox GitHub workflow + * - The parts of the documentation that install hardhat-toolbox with npm 6 or yarn + * - The list of dependencies that the sample projects install + * - The README + */ + +import { extendConfig } from "hardhat/config"; + +extendConfig((config, userConfig) => { + const configAsAny = config as any; + + // hardhat-gas-reporter doesn't use extendConfig, so + // the values of config.gasReporter and userConfig.gasReporter + // are the same. The userConfigVersion is frozen though, so we + // shouldn't use it. + const gasReporterConfig = + configAsAny.gasReporter as typeof userConfig.gasReporter; + + configAsAny.gasReporter = gasReporterConfig ?? {}; + + if (gasReporterConfig?.enabled === undefined) { + // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions + configAsAny.gasReporter.enabled = process.env.REPORT_GAS ? true : false; + } + + if (gasReporterConfig?.currency === undefined) { + configAsAny.gasReporter.currency = "USD"; + } +}); diff --git a/packages/hardhat-toolbox-viem/src/internal/chai-setup.ts b/packages/hardhat-toolbox-viem/src/internal/chai-setup.ts new file mode 100644 index 0000000000..c0c8e71856 --- /dev/null +++ b/packages/hardhat-toolbox-viem/src/internal/chai-setup.ts @@ -0,0 +1,4 @@ +import chai from "chai"; +import chaiAsPromised from "chai-as-promised"; + +chai.use(chaiAsPromised); diff --git a/packages/hardhat-toolbox-viem/src/network-helpers.ts b/packages/hardhat-toolbox-viem/src/network-helpers.ts new file mode 100644 index 0000000000..71747baddc --- /dev/null +++ b/packages/hardhat-toolbox-viem/src/network-helpers.ts @@ -0,0 +1 @@ +export * from "@nomicfoundation/hardhat-network-helpers"; diff --git a/packages/hardhat-toolbox-viem/src/tsconfig.json b/packages/hardhat-toolbox-viem/src/tsconfig.json new file mode 100644 index 0000000000..a703f8f42e --- /dev/null +++ b/packages/hardhat-toolbox-viem/src/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../../config/typescript/tsconfig.json", + "compilerOptions": { + "outDir": "../", + "rootDirs": ["."], + "composite": true + }, + "include": ["./**/*.ts"], + "exclude": [], + "references": [ + { + "path": "../../hardhat-core/src" + }, + { + "path": "../../hardhat-network-helpers" + }, + { + "path": "../../hardhat-verify/src" + }, + { + "path": "../../hardhat-viem/src" + } + ] +} diff --git a/packages/hardhat-toolbox-viem/test/.eslintrc.js b/packages/hardhat-toolbox-viem/test/.eslintrc.js new file mode 100644 index 0000000000..757fe8a3ca --- /dev/null +++ b/packages/hardhat-toolbox-viem/test/.eslintrc.js @@ -0,0 +1,15 @@ +module.exports = { + extends: [`${__dirname}/../.eslintrc.js`], + parserOptions: { + project: `${__dirname}/../tsconfig.json`, + sourceType: "module", + }, + rules: { + "import/no-extraneous-dependencies": [ + "error", + { + devDependencies: true, + }, + ], + }, +}; diff --git a/packages/hardhat-toolbox-viem/test/fixture-projects/only-toolbox/hardhat.config.js b/packages/hardhat-toolbox-viem/test/fixture-projects/only-toolbox/hardhat.config.js new file mode 100644 index 0000000000..dfbbe371ca --- /dev/null +++ b/packages/hardhat-toolbox-viem/test/fixture-projects/only-toolbox/hardhat.config.js @@ -0,0 +1 @@ +require("../../../"); diff --git a/packages/hardhat-toolbox-viem/test/fixture-projects/only-toolbox/script.js b/packages/hardhat-toolbox-viem/test/fixture-projects/only-toolbox/script.js new file mode 100644 index 0000000000..7a6ae79dd4 --- /dev/null +++ b/packages/hardhat-toolbox-viem/test/fixture-projects/only-toolbox/script.js @@ -0,0 +1,22 @@ +const assert = require("assert"); +const chai = require("chai"); + +async function main() { + // check that viem exists + assert(viem !== undefined); + + // check that the expected tasks are there + const taskNames = Object.keys(tasks); + assert(taskNames.includes("verify")); + assert(taskNames.includes("coverage")); + + // assert that chai-as-promised is loaded + assert(chai.assert.eventually); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/packages/hardhat-toolbox-viem/test/fixture-projects/with-gas-reporter-config/hardhat.config.js b/packages/hardhat-toolbox-viem/test/fixture-projects/with-gas-reporter-config/hardhat.config.js new file mode 100644 index 0000000000..77263c1734 --- /dev/null +++ b/packages/hardhat-toolbox-viem/test/fixture-projects/with-gas-reporter-config/hardhat.config.js @@ -0,0 +1,7 @@ +require("../../../"); + +module.exports = { + gasReporter: { + enabled: true, + }, +}; diff --git a/packages/hardhat-toolbox-viem/test/helpers.ts b/packages/hardhat-toolbox-viem/test/helpers.ts new file mode 100644 index 0000000000..4fc372b905 --- /dev/null +++ b/packages/hardhat-toolbox-viem/test/helpers.ts @@ -0,0 +1,24 @@ +// load the environment type extensions from the plugins +import type {} from "../src/index"; + +import { resetHardhatContext } from "hardhat/plugins-testing"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import path from "path"; + +declare module "mocha" { + interface Context { + env: HardhatRuntimeEnvironment; + } +} + +export function useEnvironment(fixtureProjectName: string) { + beforeEach("Loading hardhat environment", function () { + process.chdir(path.join(__dirname, "fixture-projects", fixtureProjectName)); + + this.env = require("hardhat"); + }); + + afterEach("Resetting hardhat", function () { + resetHardhatContext(); + }); +} diff --git a/packages/hardhat-toolbox-viem/test/test.ts b/packages/hardhat-toolbox-viem/test/test.ts new file mode 100644 index 0000000000..1b77777598 --- /dev/null +++ b/packages/hardhat-toolbox-viem/test/test.ts @@ -0,0 +1,26 @@ +import { assert } from "chai"; + +import { useEnvironment } from "./helpers"; + +describe("hardhat-toolbox-viem", function () { + describe("only-toolbox", function () { + useEnvironment("only-toolbox"); + + it("has all the expected things in the HRE", async function () { + await this.env.run("run", { + noCompile: true, + script: "script.js", + }); + + assert.equal(process.exitCode, 0); + }); + }); + + describe("hardhat-gas-reporter-config", function () { + useEnvironment("with-gas-reporter-config"); + + it("Should not crash while loading the HRE", async function () { + assert.isDefined(this.env); + }); + }); +}); diff --git a/packages/hardhat-toolbox-viem/tsconfig.json b/packages/hardhat-toolbox-viem/tsconfig.json new file mode 100644 index 0000000000..65ecfc33b9 --- /dev/null +++ b/packages/hardhat-toolbox-viem/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../config/typescript/tsconfig.json", + "compilerOptions": { + "outDir": "./build-test", + "rootDirs": ["./test"], + "composite": true + }, + "include": ["./test/**/*.ts"], + "exclude": ["./node_modules", "./test/**/hardhat.config.ts"], + "references": [ + { + "path": "./src" + } + ] +} diff --git a/packages/hardhat-toolbox/.eslintrc.js b/packages/hardhat-toolbox/.eslintrc.js index 889740f226..44ed8ed6d5 100644 --- a/packages/hardhat-toolbox/.eslintrc.js +++ b/packages/hardhat-toolbox/.eslintrc.js @@ -1,7 +1,7 @@ module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { - project: `${__dirname}/tsconfig.json`, + project: `${__dirname}/src/tsconfig.json`, sourceType: "module", }, }; diff --git a/packages/hardhat-toolbox/.gitignore b/packages/hardhat-toolbox/.gitignore index c00d7e7296..574f3e65a7 100644 --- a/packages/hardhat-toolbox/.gitignore +++ b/packages/hardhat-toolbox/.gitignore @@ -4,6 +4,10 @@ # Compilation output /build-test/ /dist +/*.js +/*.js.map +/*.d.ts +/*.d.ts.map # Code coverage artifacts /coverage @@ -15,10 +19,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -57,21 +57,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-toolbox/.prettierignore b/packages/hardhat-toolbox/.prettierignore index 12cbe6bee7..eceda069d5 100644 --- a/packages/hardhat-toolbox/.prettierignore +++ b/packages/hardhat-toolbox/.prettierignore @@ -3,4 +3,10 @@ /test/fixture-projects/**/artifacts /test/fixture-projects/**/artifacts-dir /test/fixture-projects/**/cache +/*.d.ts +/*.d.ts.map +/*.js +/*.js.map +/build-test CHANGELOG.md +!.eslintrc.js diff --git a/packages/hardhat-toolbox/CHANGELOG.md b/packages/hardhat-toolbox/CHANGELOG.md index f0e56c3a1c..c2c0f80416 100644 --- a/packages/hardhat-toolbox/CHANGELOG.md +++ b/packages/hardhat-toolbox/CHANGELOG.md @@ -1,5 +1,17 @@ # @nomicfoundation/hardhat-toolbox +## 4.0.0 + +### Major Changes + +- 23665f399: Upgraded typechain and hardhat-verify dependencies + +## 3.0.0 + +### Major Changes + +- 399347f40: The Toolbox and the plugins that it includes are now based on ethers v6 + ## 2.0.2 ### Patch Changes diff --git a/packages/hardhat-toolbox/LICENSE b/packages/hardhat-toolbox/LICENSE index d5cab88817..3b7e8c7eab 100644 --- a/packages/hardhat-toolbox/LICENSE +++ b/packages/hardhat-toolbox/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-toolbox/README.md b/packages/hardhat-toolbox/README.md index 0ed50f6b6b..6bd2832620 100644 --- a/packages/hardhat-toolbox/README.md +++ b/packages/hardhat-toolbox/README.md @@ -6,10 +6,10 @@ The `@nomicfoundation/hardhat-toolbox` plugin bundles all the commonly used pack When you use this plugin, you'll be able to: -- Deploy and interact with your contracts using [ethers.js](https://docs.ethers.io/v5/) and the [`hardhat-ethers`](https://hardhat.org/hardhat-runner/plugins/nomiclabs-hardhat-ethers) plugin. +- Deploy and interact with your contracts using [ethers.js](https://docs.ethers.org/v6/) and the [`hardhat-ethers`](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-ethers) plugin. - Test your contracts with [Mocha](https://mochajs.org/), [Chai](https://chaijs.com/) and our own [Hardhat Chai Matchers](https://hardhat.org/hardhat-chai-matchers) plugin. - Interact with Hardhat Network with our [Hardhat Network Helpers](https://hardhat.org/hardhat-network-helpers). -- Verify the source code of your contracts with the [hardhat-etherscan](https://hardhat.org/hardhat-runner/plugins/nomiclabs-hardhat-etherscan) plugin. +- Verify the source code of your contracts with the [hardhat-verify](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify) plugin. - Get metrics on the gas used by your contracts with the [hardhat-gas-reporter](https://github.com/cgewecke/hardhat-gas-reporter) plugin. - Measure your tests coverage with [solidity-coverage](https://github.com/sc-forks/solidity-coverage). - And, if you are using TypeScript, get type bindings for your contracts with [Typechain](https://github.com/dethcrypto/TypeChain/). @@ -19,3 +19,11 @@ When you use this plugin, you'll be able to: To create a new project that uses the Toolbox, check our [Setting up a project guide](https://hardhat.org/hardhat-runner/docs/guides/project-setup). If you want to migrate an existing Hardhat project to use the Toolbox, read [our migration guide](https://hardhat.org/hardhat-runner/docs/guides/migrating-from-hardhat-waffle). + +### Network Helpers + +When the Toolbox is installed using npm 7 or later, its peer dependencies are automatically installed. However, these dependencies won't be listed in the `package.json`. As a result, directly importing the Network Helpers can be problematic for certain tools or IDEs. To address this issue, the Toolbox re-exports the Hardhat Network Helpers. You can use them like this: + +```ts +import helpers from "@nomicfoundation/hardhat-toolbox/network-helpers"; +``` diff --git a/packages/hardhat-toolbox/package.json b/packages/hardhat-toolbox/package.json index 756773bb13..e1efff8135 100644 --- a/packages/hardhat-toolbox/package.json +++ b/packages/hardhat-toolbox/package.json @@ -1,7 +1,7 @@ { "name": "@nomicfoundation/hardhat-toolbox", - "version": "2.0.2", - "description": "Nomic Foundation's recommended bundle of Hardhat plugins", + "version": "4.0.0", + "description": "Nomic Foundation's recommended bundle of Hardhat plugins (ethers based)", "repository": "github:nomicfoundation/hardhat", "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-toolbox", "author": "Nomic Foundation", @@ -9,81 +9,84 @@ "Nomic Foundation" ], "license": "MIT", - "main": "dist/src/index.js", - "types": "dist/src/index.d.ts", + "main": "index.js", + "types": "index.d.ts", "keywords": [ "ethereum", "smart-contracts", "hardhat", - "hardhat-plugin" + "hardhat-plugin", + "hardhat-ethers" ], "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", "test": "mocha --recursive \"test/**/*.ts\" --exit", "build": "tsc --build .", - "prepublishOnly": "yarn build", - "clean": "rimraf dist" + "prepublishOnly": "pnpm build", + "clean": "rimraf dist *.{d.ts,js}{,.map} build-test tsconfig.tsbuildinfo" }, "files": [ - "dist/src/", "src/", + "*.d.ts", + "*.d.ts.map", + "*.js", + "*.js.map", "LICENSE", "README.md" ], "dependencies": {}, "devDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.0.0", - "@typechain/ethers-v5": "^10.1.0", - "@typechain/hardhat": "^6.1.2", + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", + "@nomicfoundation/hardhat-chai-matchers": "workspace:^2.0.0", + "@nomicfoundation/hardhat-ethers": "workspace:^3.0.0", + "@nomicfoundation/hardhat-network-helpers": "workspace:^1.0.0", + "@nomicfoundation/hardhat-verify": "workspace:^2.0.0", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.0.0", "@types/chai": "^4.2.0", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@typescript-eslint/eslint-plugin": "4.29.2", - "@typescript-eslint/parser": "4.29.2", + "@types/node": "^16.0.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "chai": "^4.2.0", - "eslint": "^7.29.0", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", - "ethers": "^5.4.7", - "hardhat": "^2.11.0", + "ethers": "^6.4.0", + "hardhat": "workspace:^2.11.0", "hardhat-gas-reporter": "^1.0.8", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", "solidity-coverage": "^0.8.1", "ts-node": "^10.8.0", - "typechain": "^8.1.0", - "typescript": "~4.7.4" + "typechain": "^8.3.1", + "typescript": "~5.0.0" }, "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.0.0", "@types/chai": "^4.2.0", "@types/mocha": ">=9.1.0", - "@types/node": ">=12.0.0", - "@typechain/ethers-v5": "^10.1.0", - "@typechain/hardhat": "^6.1.2", + "@types/node": ">=16.0.0", "chai": "^4.2.0", - "ethers": "^5.4.7", + "ethers": "^6.4.0", "hardhat": "^2.11.0", "hardhat-gas-reporter": "^1.0.8", "solidity-coverage": "^0.8.1", "ts-node": ">=8.0.0", - "typechain": "^8.1.0", + "typechain": "^8.3.0", "typescript": ">=4.5.0" }, "bugs": { diff --git a/packages/hardhat-toolbox/src/index.ts b/packages/hardhat-toolbox/src/index.ts index 8efa0d2902..0a58d631e4 100644 --- a/packages/hardhat-toolbox/src/index.ts +++ b/packages/hardhat-toolbox/src/index.ts @@ -1,6 +1,6 @@ import "@nomicfoundation/hardhat-chai-matchers"; -import "@nomiclabs/hardhat-ethers"; -import "@nomiclabs/hardhat-etherscan"; +import "@nomicfoundation/hardhat-ethers"; +import "@nomicfoundation/hardhat-verify"; import "@typechain/hardhat"; import "hardhat-gas-reporter"; import "solidity-coverage"; diff --git a/packages/hardhat-toolbox/src/network-helpers.ts b/packages/hardhat-toolbox/src/network-helpers.ts new file mode 100644 index 0000000000..71747baddc --- /dev/null +++ b/packages/hardhat-toolbox/src/network-helpers.ts @@ -0,0 +1 @@ +export * from "@nomicfoundation/hardhat-network-helpers"; diff --git a/packages/hardhat-toolbox/src/tsconfig.json b/packages/hardhat-toolbox/src/tsconfig.json new file mode 100644 index 0000000000..9f84761f8b --- /dev/null +++ b/packages/hardhat-toolbox/src/tsconfig.json @@ -0,0 +1,27 @@ +{ + "extends": "../../../config/typescript/tsconfig.json", + "compilerOptions": { + "outDir": "../", + "rootDirs": ["."], + "composite": true + }, + "include": ["./**/*.ts"], + "exclude": [], + "references": [ + { + "path": "../../hardhat-core/src" + }, + { + "path": "../../hardhat-chai-matchers" + }, + { + "path": "../../hardhat-network-helpers" + }, + { + "path": "../../hardhat-ethers/src" + }, + { + "path": "../../hardhat-verify/src" + } + ] +} diff --git a/packages/hardhat-toolbox/test/.eslintrc.js b/packages/hardhat-toolbox/test/.eslintrc.js new file mode 100644 index 0000000000..757fe8a3ca --- /dev/null +++ b/packages/hardhat-toolbox/test/.eslintrc.js @@ -0,0 +1,15 @@ +module.exports = { + extends: [`${__dirname}/../.eslintrc.js`], + parserOptions: { + project: `${__dirname}/../tsconfig.json`, + sourceType: "module", + }, + rules: { + "import/no-extraneous-dependencies": [ + "error", + { + devDependencies: true, + }, + ], + }, +}; diff --git a/packages/hardhat-toolbox/test/helpers.ts b/packages/hardhat-toolbox/test/helpers.ts index e1b159efe3..4fc372b905 100644 --- a/packages/hardhat-toolbox/test/helpers.ts +++ b/packages/hardhat-toolbox/test/helpers.ts @@ -1,3 +1,6 @@ +// load the environment type extensions from the plugins +import type {} from "../src/index"; + import { resetHardhatContext } from "hardhat/plugins-testing"; import { HardhatRuntimeEnvironment } from "hardhat/types"; import path from "path"; diff --git a/packages/hardhat-toolbox/tsconfig.json b/packages/hardhat-toolbox/tsconfig.json index fd844c410b..65ecfc33b9 100644 --- a/packages/hardhat-toolbox/tsconfig.json +++ b/packages/hardhat-toolbox/tsconfig.json @@ -1,24 +1,15 @@ { "extends": "../../config/typescript/tsconfig.json", "compilerOptions": { - "outDir": "./dist" + "outDir": "./build-test", + "rootDirs": ["./test"], + "composite": true }, - "exclude": ["./dist", "./node_modules", "./test/**/hardhat.config.ts"], + "include": ["./test/**/*.ts"], + "exclude": ["./node_modules", "./test/**/hardhat.config.ts"], "references": [ { - "path": "../hardhat-core/src" - }, - { - "path": "../hardhat-chai-matchers" - }, - { - "path": "../hardhat-network-helpers" - }, - { - "path": "../hardhat-ethers/src" - }, - { - "path": "../hardhat-verify" + "path": "./src" } ] } diff --git a/packages/hardhat-truffle4/.eslintrc.js b/packages/hardhat-truffle4/.eslintrc.js index 266b8d5f24..34b7ef64ea 100644 --- a/packages/hardhat-truffle4/.eslintrc.js +++ b/packages/hardhat-truffle4/.eslintrc.js @@ -1,3 +1,7 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { @@ -15,4 +19,21 @@ module.exports = { }, ], }, + overrides: [ + { + files: ["src/index.ts"], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [ + ...slowImportsCommonIgnoredModules, + "chai", + "@nomiclabs/hardhat-web3-legacy", + ], + }, + ], + }, + }, + ], }; diff --git a/packages/hardhat-truffle4/.gitignore b/packages/hardhat-truffle4/.gitignore index c00d7e7296..4aca21f18d 100644 --- a/packages/hardhat-truffle4/.gitignore +++ b/packages/hardhat-truffle4/.gitignore @@ -15,10 +15,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -57,21 +53,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-truffle4/.mocharc.json b/packages/hardhat-truffle4/.mocharc.json index 775e35460d..68af7ce794 100644 --- a/packages/hardhat-truffle4/.mocharc.json +++ b/packages/hardhat-truffle4/.mocharc.json @@ -2,5 +2,5 @@ "require": "ts-node/register/files", "file": "../common/run-with-ganache", "ignore": ["test/fixture-projects/**/*"], - "timeout": 10000 + "timeout": 60000 } diff --git a/packages/hardhat-truffle4/LICENSE b/packages/hardhat-truffle4/LICENSE index 3b8858c555..3b7e8c7eab 100644 --- a/packages/hardhat-truffle4/LICENSE +++ b/packages/hardhat-truffle4/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-truffle4/package.json b/packages/hardhat-truffle4/package.json index 64214a9985..11d249dab8 100644 --- a/packages/hardhat-truffle4/package.json +++ b/packages/hardhat-truffle4/package.json @@ -17,13 +17,14 @@ "truffle-contract" ], "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", "test": "mocha --recursive \"test/**/*.ts\" --exit", "build": "tsc --build .", - "prepublishOnly": "yarn build", + "prepublishOnly": "pnpm build", "clean": "rimraf dist" }, "files": [ @@ -40,25 +41,27 @@ "truffle-contract": "^3.0.7" }, "devDependencies": { - "@nomiclabs/hardhat-web3-legacy": "^2.0.0", + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", + "@nomiclabs/hardhat-web3-legacy": "workspace:^2.0.0", "@types/fs-extra": "^5.1.0", "@types/glob": "^7.1.1", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@types/node": "^16.0.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "chai": "^4.2.0", - "eslint": "^7.29.0", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", - "hardhat": "^2.6.4", + "hardhat": "workspace:^2.6.4", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", "ts-node": "^10.8.0", - "typescript": "~4.7.4", + "typescript": "~5.0.0", "web3": "^0.20.0" }, "peerDependencies": { diff --git a/packages/hardhat-truffle4/src/provisioner.ts b/packages/hardhat-truffle4/src/provisioner.ts index 84fc097445..b5f845ab5c 100644 --- a/packages/hardhat-truffle4/src/provisioner.ts +++ b/packages/hardhat-truffle4/src/provisioner.ts @@ -1,4 +1,4 @@ -import { wrapWithSolidityErrorsCorrection } from "hardhat/internal/hardhat-network/stack-traces/solidity-errors"; +import type { wrapWithSolidityErrorsCorrection as WrapWithSolidityErrorsCorrectionT } from "hardhat/internal/hardhat-network/stack-traces/solidity-errors"; import { NomicLabsHardhatPluginError } from "hardhat/plugins"; import { NetworkConfig } from "hardhat/types"; import util from "util"; @@ -67,6 +67,11 @@ export class LazyTruffleContractProvisioner { const originalNew = Contract.new; const originalAt = Contract.at; + const { wrapWithSolidityErrorsCorrection } = + require("hardhat/internal/hardhat-network/stack-traces/solidity-errors") as { + wrapWithSolidityErrorsCorrection: typeof WrapWithSolidityErrorsCorrectionT; + }; + Contract.new = async (...args: any[]) => { return wrapWithSolidityErrorsCorrection(async () => { args = await this._ensureTxParamsWithDefaults(args); @@ -175,6 +180,11 @@ export class LazyTruffleContractProvisioner { const originalSendTransaction = original.sendTransaction; const originalRequest = original.request; + const { wrapWithSolidityErrorsCorrection } = + require("hardhat/internal/hardhat-network/stack-traces/solidity-errors") as { + wrapWithSolidityErrorsCorrection: typeof WrapWithSolidityErrorsCorrectionT; + }; + instance[methodName] = async (...args: any[]) => { return wrapWithSolidityErrorsCorrection(async () => { args = await this._ensureTxParamsWithDefaults(args, !isConstant); diff --git a/packages/hardhat-truffle5/.eslintrc.js b/packages/hardhat-truffle5/.eslintrc.js index 889740f226..acafebd7d2 100644 --- a/packages/hardhat-truffle5/.eslintrc.js +++ b/packages/hardhat-truffle5/.eslintrc.js @@ -1,7 +1,28 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { project: `${__dirname}/tsconfig.json`, sourceType: "module", }, + overrides: [ + { + files: ["src/index.ts"], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [ + ...slowImportsCommonIgnoredModules, + "chai", + "@nomiclabs/hardhat-web3", + ], + }, + ], + }, + }, + ], }; diff --git a/packages/hardhat-truffle5/.gitignore b/packages/hardhat-truffle5/.gitignore index c00d7e7296..4aca21f18d 100644 --- a/packages/hardhat-truffle5/.gitignore +++ b/packages/hardhat-truffle5/.gitignore @@ -15,10 +15,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -57,21 +53,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-truffle5/LICENSE b/packages/hardhat-truffle5/LICENSE index 3b8858c555..3b7e8c7eab 100644 --- a/packages/hardhat-truffle5/LICENSE +++ b/packages/hardhat-truffle5/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-truffle5/README.md b/packages/hardhat-truffle5/README.md index f0ba4df798..7797a3913e 100644 --- a/packages/hardhat-truffle5/README.md +++ b/packages/hardhat-truffle5/README.md @@ -15,7 +15,7 @@ This plugin requires [hardhat-web3](https://github.com/nomiclabs/hardhat/tree/ma ## Installation ```bash -npm install --save-dev @nomiclabs/hardhat-truffle5 @nomiclabs/hardhat-web3 web3 +npm install --save-dev @nomiclabs/hardhat-truffle5 @nomiclabs/hardhat-web3 'web3@^1.0.0-beta.36' ``` And add the following statement to your `hardhat.config.js`: diff --git a/packages/hardhat-truffle5/package.json b/packages/hardhat-truffle5/package.json index cc577ed87c..86c1ae5168 100644 --- a/packages/hardhat-truffle5/package.json +++ b/packages/hardhat-truffle5/package.json @@ -17,13 +17,14 @@ "truffle-contract" ], "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", "test": "mocha --recursive \"test/**/*.ts\" --exit", "build": "tsc --build .", - "prepublishOnly": "yarn build", + "prepublishOnly": "pnpm build", "clean": "rimraf dist" }, "files": [ @@ -40,25 +41,27 @@ "fs-extra": "^7.0.1" }, "devDependencies": { - "@nomiclabs/hardhat-web3": "^2.0.0", + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", + "@nomiclabs/hardhat-web3": "workspace:^2.0.0", "@types/fs-extra": "^5.1.0", "@types/glob": "^7.1.1", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@types/node": "^16.0.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "chai": "^4.2.0", - "eslint": "^7.29.0", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", - "hardhat": "^2.6.4", + "hardhat": "workspace:^2.6.4", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", "ts-node": "^10.8.0", - "typescript": "~4.7.4", + "typescript": "~5.0.0", "web3": "^1.0.0-beta.36" }, "peerDependencies": { diff --git a/packages/hardhat-verify/.eslintignore b/packages/hardhat-verify/.eslintignore new file mode 100644 index 0000000000..4110ca8786 --- /dev/null +++ b/packages/hardhat-verify/.eslintignore @@ -0,0 +1,8 @@ +.eslintrc.js + +*.d.ts +etherscan.js +index.js + +/build-test +/internal diff --git a/packages/hardhat-verify/.eslintrc.js b/packages/hardhat-verify/.eslintrc.js index 889740f226..13139c79c6 100644 --- a/packages/hardhat-verify/.eslintrc.js +++ b/packages/hardhat-verify/.eslintrc.js @@ -1,7 +1,24 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { - project: `${__dirname}/tsconfig.json`, + project: `${__dirname}/src/tsconfig.json`, sourceType: "module", }, + overrides: [ + { + files: ["src/index.ts"], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [...slowImportsCommonIgnoredModules], + }, + ], + }, + }, + ], }; diff --git a/packages/hardhat-verify/.gitignore b/packages/hardhat-verify/.gitignore index 230538feb0..de879e94f6 100644 --- a/packages/hardhat-verify/.gitignore +++ b/packages/hardhat-verify/.gitignore @@ -4,6 +4,11 @@ # Compilation output /build-test/ /dist +/internal +/*.js +/*.js.map +/*.d.ts +/*.d.ts.map # Code coverage artifacts /coverage @@ -15,10 +20,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -57,21 +58,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-verify/.prettierignore b/packages/hardhat-verify/.prettierignore index 8b59d6f54c..606a44372c 100644 --- a/packages/hardhat-verify/.prettierignore +++ b/packages/hardhat-verify/.prettierignore @@ -1,5 +1,11 @@ /node_modules /dist +/internal +/*.d.ts +/*.d.ts.map +/*.js +/*.js.map +/build-test /test/fixture-projects/**/artifacts /test/fixture-projects/**/artifacts-dir /test/fixture-projects/**/cache diff --git a/packages/hardhat-verify/CHANGELOG.md b/packages/hardhat-verify/CHANGELOG.md new file mode 100644 index 0000000000..ed689785be --- /dev/null +++ b/packages/hardhat-verify/CHANGELOG.md @@ -0,0 +1,64 @@ +# @nomicfoundation/hardhat-verify + +## 2.0.3 + +### Patch Changes + +- e77f1d8a0: Add apiUrl and browserUrl to Sourcify configuration. + +## 2.0.2 + +### Patch Changes + +- 5cab65fb7: Updated chiado urls to avoid redirect + +## 2.0.1 + +### Patch Changes + +- c2155fb26: Added polygonZkEVM and polygonZkEVMTestnet +- c7d87c41a: Fixed case-sensitive address comparison for detecting verified contracts + +## 2.0.0 + +### Major Changes + +- a32e68589: - Added Sourcify as a verification provider. + +## 1.1.1 + +### Patch Changes + +- 4ed196924: Added `base` mainnet + +## 1.1.0 + +### Minor Changes + +- e2fc27766: Exposed the Etherscan class as a public API for third-party consumers. + +## 1.0.4 + +### Patch Changes + +- 0f4411ce0: Added `baseGoerli` testnet. + +## 1.0.3 + +### Patch Changes + +- efe7824e0: Removed the `rinkeby`, `ropsten` and `kovan` deprecated test networks (thanks @pcaversaccio!) + +## 1.0.2 + +### Patch Changes + +- 4028c6e24: Fix URLs for the Aurora networks (thanks @zZoMROT and @ZumZoom!) +- 4028c6e24: Fixed a problem where the `--list-networks` flag wasn't working without passing an address (thanks @clauBv23!) +- 72162dcc7: Success messages are now more generic (thanks @clauBv23!). + +## 1.0.1 + +### Patch Changes + +- 40b371bca: Removed the compilation step from the verify task, and removed the noCompile flag diff --git a/packages/hardhat-verify/LICENSE b/packages/hardhat-verify/LICENSE index 3b8858c555..3b7e8c7eab 100644 --- a/packages/hardhat-verify/LICENSE +++ b/packages/hardhat-verify/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-verify/README.md b/packages/hardhat-verify/README.md index 350c3049d9..17f58efd83 100644 --- a/packages/hardhat-verify/README.md +++ b/packages/hardhat-verify/README.md @@ -6,7 +6,7 @@ ## What -This plugin helps you verify the source code for your Solidity contracts. At the moment, it supports [Etherscan](https://etherscan.io)-based explorers and explorers compatible with its API like [Blockscout](https://www.blockscout.com/). +This plugin helps you verify the source code for your Solidity contracts. At the moment, it supports [Etherscan](https://etherscan.io)-based explorers, explorers compatible with its API like [Blockscout](https://www.blockscout.com/) and [Sourcify](https://sourcify.dev/). It's smart and it tries to do as much as possible to facilitate the process: @@ -35,7 +35,7 @@ import "@nomicfoundation/hardhat-verify"; ## Tasks -This plugin provides the `verify` task, which allows you to verify contracts through Etherscan's service. +This plugin provides the `verify` task, which allows you to verify contracts through Sourcify and Etherscan's service. ## Environment extensions @@ -43,7 +43,7 @@ This plugin does not extend the environment. ## Usage -You need to add the following Etherscan config to your `hardhat.config.js` file: +You need to add the following Etherscan and Sourcify configs to your `hardhat.config.js` file: ```js module.exports = { @@ -54,6 +54,11 @@ module.exports = { // Your API key for Etherscan // Obtain one at https://etherscan.io/ apiKey: "YOUR_ETHERSCAN_API_KEY" + }, + sourcify: { + // Disabled by default + // Doesn't need an API key + enabled: true } }; ``` @@ -68,7 +73,7 @@ npx hardhat verify --network mainnet DEPLOYED_CONTRACT_ADDRESS "Constructor argu ### Complex arguments -When the constructor has a complex argument list, you'll need to write a javascript module that exports the argument list. The expected format is the same as a constructor list for an [ethers contract](https://docs.ethers.io/v5/api/contract/). For example, if you have a contract like this: +When the constructor has a complex argument list, you'll need to write a javascript module that exports the argument list. The expected format is the same as a constructor list for an [ethers contract](https://docs.ethers.org/v6/single-page/#api_contract__Contract). For example, if you have a contract like this: ```solidity struct Point { @@ -174,6 +179,36 @@ Keep in mind that the name you are giving to the network in `customChains` is th To see which custom chains are supported, run `npx hardhat verify --list-networks`. +### Verifying on Sourcify + +To verify a contract using Sourcify, you need to add to your Hardhat config: + +```js +sourcify: { + enabled: true, + // Optional: specify a different Sourcify server + apiUrl: "https://sourcify.dev/server", + // Optional: specify a different Sourcify repository + browserUrl: "https://repo.sourcify.dev", +} +``` + +and then run the `verify` task, passing the address of the contract and the network where it's deployed: + +```bash +npx hardhat verify --network mainnet DEPLOYED_CONTRACT_ADDRESS +``` + +**Note:** Constructor arguments are not required for Sourcify verification, but you'll need to provide them if you also have Etherscan verification enabled. + +To disable Sourcify verification and suppress related messages, set `enabled` to `false`: + +```js +sourcify: { + enabled: false, +} +``` + ### Using programmatically To call the verification task from within a Hardhat task or script, use the `"verify:verify"` subtask. Assuming the same contract as [above](#complex-arguments), you can run the subtask like this: @@ -208,6 +243,73 @@ hre.run("verify:verify", { } ``` +#### Advanced Usage: Using the Etherscan and Sourcify classes from another plugin + +Both Etherscan and Sourcify classes can be imported from the plugin for direct use. + +- **Etherscan Class Usage** + + ```js + import { Etherscan } from "@nomicfoundation/hardhat-verify/etherscan"; + + const instance = new Etherscan( + "abc123def123", // Etherscan API key + "https://api.etherscan.io/api", // Etherscan API URL + "https://etherscan.io" // Etherscan browser URL + ); + + if (!instance.isVerified("0x123abc...")) { + const { message: guid } = await instance.verify( + // Contract address + "0x123abc...", + // Contract source code + '{"language":"Solidity","sources":{"contracts/Sample.sol":{"content":"// SPDX-Lic..."}},"settings":{ ... }}', + // Contract name + "contracts/Sample.sol:MyContract", + // Compiler version + "v0.8.19+commit.7dd6d404", + // Encoded constructor arguments + "0000000000000000000000000000000000000000000000000000000000000032" + ); + + await sleep(1000); + const verificationStatus = await instance.getVerificationStatus(guid); + + if (verificationStatus.isSuccess()) { + const contractURL = instance.getContractUrl("0x123abc..."); + console.log( + `Successfully verified contract "MyContract" on Etherscan: ${contractURL}` + ); + } + } + ``` + +- **Sourcify Class Usage** + + ```js + import { Sourcify } from "@nomicfoundation/hardhat-verify/sourcify"; + + const instance = new Sourcify( + 1, + "https://sourcify.dev/server", + "https://repo.sourcify.dev" + ); // Set chainId + + if (!instance.isVerified("0x123abc...")) { + const sourcifyResponse = await instance.verify("0x123abc...", { + "metadata.json": "{...}", + "otherFile.sol": "...", + }); + if (sourcifyResponse.isOk()) { + const contractURL = instance.getContractUrl( + "0x123abc...", + sourcifyResponse.status + ); + console.log(`Successfully verified contract on Sourcify: ${contractURL}`); + } + } + ``` + ## How it works The plugin works by fetching the bytecode in the given address and using it to check which contract in your project corresponds to it. Besides that, some sanity checks are performed locally to make sure that the verification won't fail. diff --git a/packages/hardhat-verify/package.json b/packages/hardhat-verify/package.json index 029218e3e3..43ffdcc4f5 100644 --- a/packages/hardhat-verify/package.json +++ b/packages/hardhat-verify/package.json @@ -1,13 +1,7 @@ { "name": "@nomicfoundation/hardhat-verify", - "version": "1.0.0", + "version": "2.0.3", "description": "Hardhat plugin for verifying contracts", - "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-verify", - "repository": "github:nomicfoundation/hardhat", - "author": "Nomic Foundation", - "license": "MIT", - "main": "dist/src/index.js", - "types": "dist/src/index.d.ts", "keywords": [ "ethereum", "smart-contracts", @@ -15,23 +9,35 @@ "hardhat-plugin", "etherscan" ], - "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", - "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", - "prettier": "prettier \"**/*.{js,md,json}\"", - "test": "mocha --recursive \"test/**/*.ts\" --exit", - "coverage": "nyc yarn test -- --reporter min", - "build": "tsc --build .", - "prepublishOnly": "yarn build", - "clean": "rimraf dist" - }, + "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-verify", + "repository": "github:nomicfoundation/hardhat", + "license": "MIT", + "author": "Nomic Foundation", + "main": "index.js", + "types": "index.d.ts", "files": [ "dist/src/", "src/", + "internal/", + "*.d.ts", + "*.d.ts.map", + "*.js", + "*.js.map", "LICENSE", "README.md" ], + "scripts": { + "build": "tsc --build .", + "clean": "rimraf dist internal *.{d.ts,js}{,.map} build-test tsconfig.tsbuildinfo", + "coverage": "nyc pnpm test -- --reporter min", + "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", + "prepublishOnly": "pnpm build", + "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", + "test": "mocha --recursive \"test/**/*.ts\" --exit" + }, "dependencies": { "@ethersproject/abi": "^5.1.2", "@ethersproject/address": "^5.0.2", @@ -44,22 +50,25 @@ "undici": "^5.14.0" }, "devDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.0", + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", + "@nomicfoundation/hardhat-ethers": "workspace:^3.0.0", "@types/chai": "^4.2.0", "@types/chai-as-promised": "^7.1.3", + "@types/debug": "^4.1.4", "@types/lodash.clonedeep": "^4.5.7", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", + "@types/node": "^16.0.0", "@types/semver": "^6.0.2", "@types/sinon": "^9.0.8", "@types/sinon-chai": "^3.2.9", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "chai": "^4.2.0", "chai-as-promised": "^7.1.1", - "eslint": "^7.29.0", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", "ethers": "^5.0.0", @@ -71,7 +80,7 @@ "sinon": "^9.0.0", "sinon-chai": "^3.7.0", "ts-node": "^10.8.0", - "typescript": "~4.7.4" + "typescript": "~5.0.0" }, "peerDependencies": { "hardhat": "^2.0.4" diff --git a/packages/hardhat-verify/src/etherscan.ts b/packages/hardhat-verify/src/etherscan.ts index 17cdd8b1c5..c021bc1a93 100644 --- a/packages/hardhat-verify/src/etherscan.ts +++ b/packages/hardhat-verify/src/etherscan.ts @@ -1,219 +1 @@ -import type { Dispatcher } from "undici"; - -import { - ContractStatusPollingError, - ContractStatusPollingInvalidStatusCodeError, - ContractVerificationRequestError, - ContractVerificationMissingBytecodeError, - ContractVerificationInvalidStatusCodeError, - HardhatEtherscanError, - MissingApiKeyError, - ContractStatusPollingResponseNotOkError, -} from "./errors"; -import { sendGetRequest, sendPostRequest } from "./undici"; - -import { ChainConfig, ApiKey } from "./types"; -import { sleep } from "./utilities"; - -interface EtherscanVerifyRequestParams { - address: string; - sourceCode: string; - sourceName: string; - contractName: string; - compilerVersion: string; - encodedConstructorArguments: string; -} - -// Used for polling the result of the contract verification. -const VERIFICATION_STATUS_POLLING_TIME = 3000; - -export class Etherscan { - private _apiKey: string; - private _apiUrl: string; - private _browserUrl: string; - - constructor(apiKey: ApiKey | undefined, chainConfig: ChainConfig) { - this._apiKey = resolveApiKey(apiKey, chainConfig.network); - this._apiUrl = chainConfig.urls.apiURL; - this._browserUrl = chainConfig.urls.browserURL.trim().replace(/\/$/, ""); - } - - // https://docs.etherscan.io/api-endpoints/contracts#get-contract-source-code-for-verified-contract-source-codes - public async isVerified(address: string) { - const parameters = new URLSearchParams({ - apikey: this._apiKey, - module: "contract", - action: "getsourcecode", - address, - }); - - const url = new URL(this._apiUrl); - url.search = parameters.toString(); - - const response = await sendGetRequest(url); - const json = await response.body.json(); - - if (json.message !== "OK") { - return false; - } - - const sourceCode = json?.result?.[0]?.SourceCode; - return sourceCode !== undefined && sourceCode !== ""; - } - - // https://docs.etherscan.io/api-endpoints/contracts#verify-source-code - public async verify({ - address, - sourceCode, - sourceName, - contractName, - compilerVersion, - encodedConstructorArguments, - }: EtherscanVerifyRequestParams): Promise { - const parameters = new URLSearchParams({ - apikey: this._apiKey, - module: "contract", - action: "verifysourcecode", - contractaddress: address, - sourceCode, - codeformat: "solidity-standard-json-input", - contractname: `${sourceName}:${contractName}`, - compilerversion: `v${compilerVersion}`, - constructorArguements: encodedConstructorArguments, - }); - - let response: Dispatcher.ResponseData; - try { - response = await sendPostRequest( - new URL(this._apiUrl), - parameters.toString() - ); - } catch (error: any) { - throw new ContractVerificationRequestError(this._apiUrl, error); - } - - if (!(response.statusCode >= 200 && response.statusCode <= 299)) { - // This could be always interpreted as JSON if there were any such guarantee in the Etherscan API. - const responseText = await response.body.text(); - throw new ContractVerificationInvalidStatusCodeError( - this._apiUrl, - response.statusCode, - responseText - ); - } - - const etherscanResponse = new EtherscanResponse(await response.body.json()); - - if (etherscanResponse.isBytecodeMissingInNetworkError()) { - throw new ContractVerificationMissingBytecodeError(this._apiUrl, address); - } - - if (!etherscanResponse.isOk()) { - throw new HardhatEtherscanError(etherscanResponse.message); - } - - return etherscanResponse; - } - - // https://docs.etherscan.io/api-endpoints/contracts#check-source-code-verification-submission-status - public async getVerificationStatus(guid: string): Promise { - const parameters = new URLSearchParams({ - apikey: this._apiKey, - module: "contract", - action: "checkverifystatus", - guid, - }); - const url = new URL(this._apiUrl); - url.search = parameters.toString(); - - let response; - try { - response = await sendGetRequest(url); - } catch (error: any) { - throw new ContractStatusPollingError(url.toString(), error); - } - - if (!(response.statusCode >= 200 && response.statusCode <= 299)) { - // This could be always interpreted as JSON if there were any such guarantee in the Etherscan API. - const responseText = await response.body.text(); - - throw new ContractStatusPollingInvalidStatusCodeError( - response.statusCode, - responseText - ); - } - - const etherscanResponse = new EtherscanResponse(await response.body.json()); - - if (etherscanResponse.isPending()) { - await sleep(VERIFICATION_STATUS_POLLING_TIME); - - return this.getVerificationStatus(guid); - } - - if (etherscanResponse.isFailure()) { - return etherscanResponse; - } - - if (!etherscanResponse.isOk()) { - throw new ContractStatusPollingResponseNotOkError( - etherscanResponse.message - ); - } - - return etherscanResponse; - } - - public getContractUrl(address: string) { - return `${this._browserUrl}/address/${address}#code`; - } -} - -class EtherscanResponse { - public readonly status: number; - - public readonly message: string; - - constructor(response: any) { - this.status = parseInt(response.status, 10); - this.message = response.result; - } - - public isPending() { - return this.message === "Pending in queue"; - } - - public isFailure() { - return this.message === "Fail - Unable to verify"; - } - - public isSuccess() { - return this.message === "Pass - Verified"; - } - - public isBytecodeMissingInNetworkError() { - return this.message.startsWith("Unable to locate ContractCode at"); - } - - public isOk() { - return this.status === 1; - } -} - -function resolveApiKey(apiKey: ApiKey | undefined, network: string) { - if (apiKey === undefined || apiKey === "") { - throw new MissingApiKeyError(network); - } - - if (typeof apiKey === "string") { - return apiKey; - } - - const key = apiKey[network]; - - if (key === undefined || key === "") { - throw new MissingApiKeyError(network); - } - - return key; -} +export { Etherscan } from "./internal/etherscan"; diff --git a/packages/hardhat-verify/src/index.ts b/packages/hardhat-verify/src/index.ts index 5c78cb59ca..a012442dca 100644 --- a/packages/hardhat-verify/src/index.ts +++ b/packages/hardhat-verify/src/index.ts @@ -1,75 +1,58 @@ -import type LodashCloneDeepT from "lodash.clonedeep"; import type { - CompilationJob, - CompilerInput, - DependencyGraph, -} from "hardhat/types"; + ContractInformation, + ExtendedContractInformation, + LibraryToAddress, +} from "./internal/solc/artifacts"; +import type { Bytecode } from "./internal/solc/bytecode"; +import chalk from "chalk"; import { extendConfig, subtask, task, types } from "hardhat/config"; -import { isFullyQualifiedName } from "hardhat/utils/contract-names"; -import { - TASK_COMPILE, - TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE, - TASK_COMPILE_SOLIDITY_GET_COMPILER_INPUT, - TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, -} from "hardhat/builtin-tasks/task-names"; + import { TASK_VERIFY, - TASK_VERIFY_ETHERSCAN_ATTEMPT_VERIFICATION, - TASK_VERIFY_ETHERSCAN_GET_CONTRACT_INFORMATION, - TASK_VERIFY_ETHERSCAN_GET_MINIMAL_INPUT, TASK_VERIFY_GET_VERIFICATION_SUBTASKS, - TASK_VERIFY_RESOLVE_ARGUMENTS, TASK_VERIFY_VERIFY, TASK_VERIFY_ETHERSCAN, -} from "./task-names"; -import { getCurrentChainConfig } from "./chain-config"; -import { etherscanConfigExtender } from "./config"; + TASK_VERIFY_PRINT_SUPPORTED_NETWORKS, + TASK_VERIFY_SOURCIFY, + TASK_VERIFY_SOURCIFY_DISABLED_WARNING, + TASK_VERIFY_GET_CONTRACT_INFORMATION, +} from "./internal/task-names"; +import { + etherscanConfigExtender, + sourcifyConfigExtender, +} from "./internal/config"; import { - MissingAddressError, - InvalidAddressError, - InvalidContractNameError, InvalidConstructorArgumentsError, InvalidLibrariesError, - CompilerVersionsMismatchError, + HardhatVerifyError, ContractNotFoundError, BuildInfoNotFoundError, BuildInfoCompilerVersionMismatchError, - DeployedBytecodeDoesNotMatchFQNError, - UnexpectedNumberOfFilesError, - VerificationAPIUnexpectedMessageError, - ContractVerificationFailedError, -} from "./errors"; + DeployedBytecodeMismatchError, +} from "./internal/errors"; import { - sleep, - encodeArguments, - getCompilerVersions, printSupportedNetworks, - resolveConstructorArguments, - resolveLibraries, -} from "./utilities"; -import { Etherscan } from "./etherscan"; -import { Bytecode } from "./solc/bytecode"; + printVerificationErrors, +} from "./internal/utilities"; import { - ContractInformation, - ExtendedContractInformation, - extractInferredContractInformation, extractMatchingContractInformation, + extractInferredContractInformation, getLibraryInformation, - LibraryToAddress, -} from "./solc/artifacts"; +} from "./internal/solc/artifacts"; -import "./type-extensions"; +import "./internal/type-extensions"; +import "./internal/tasks/etherscan"; +import "./internal/tasks/sourcify"; // Main task args -interface VerifyTaskArgs { +export interface VerifyTaskArgs { address?: string; constructorArgsParams: string[]; constructorArgs?: string; libraries?: string; contract?: string; listNetworks: boolean; - noCompile: boolean; } // verify:verify subtask args @@ -78,17 +61,11 @@ interface VerifySubtaskArgs { constructorArguments: string[]; libraries: LibraryToAddress; contract?: string; - noCompile: boolean; } -// parsed verification args -interface VerificationArgs { - address: string; - constructorArgs: string[]; - libraries: LibraryToAddress; - contractFQN?: string; - listNetworks: boolean; - noCompile: boolean; +export interface VerificationResponse { + success: boolean; + message: string; } interface GetContractInformationArgs { @@ -98,32 +75,21 @@ interface GetContractInformationArgs { libraries: LibraryToAddress; } -interface GetMinimalInputArgs { - sourceName: string; -} - -interface AttemptVerificationArgs { - address: string; - compilerInput: CompilerInput; - contractInformation: ExtendedContractInformation; - verificationInterface: Etherscan; - encodedConstructorArguments: string; -} - -interface VerificationResponse { - success: boolean; - message: string; +export interface VerificationSubtask { + label: string; + subtaskName: string; } extendConfig(etherscanConfigExtender); +extendConfig(sourcifyConfigExtender); /** * Main verification task. * * This is a meta-task that gets all the verification tasks and runs them. - * Right now there's only a "verify-etherscan" task. + * It supports Etherscan and Sourcify. */ -task(TASK_VERIFY, "Verifies a contract on Etherscan") +task(TASK_VERIFY, "Verifies a contract on Etherscan or Sourcify") .addOptionalPositionalParam("address", "Address of the contract to verify") .addOptionalVariadicPositionalParam( "constructorArgsParams", @@ -150,217 +116,76 @@ task(TASK_VERIFY, "Verifies a contract on Etherscan") "Use if the deployed bytecode matches more than one contract in your project" ) .addFlag("listNetworks", "Print the list of supported networks") - .addFlag("noCompile", "Don't compile before running the task") .setAction(async (taskArgs: VerifyTaskArgs, { run }) => { - const verificationArgs: VerificationArgs = await run( - TASK_VERIFY_RESOLVE_ARGUMENTS, - taskArgs - ); + if (taskArgs.listNetworks) { + await run(TASK_VERIFY_PRINT_SUPPORTED_NETWORKS); + return; + } - const verificationSubtasks: string[] = await run( + const verificationSubtasks: VerificationSubtask[] = await run( TASK_VERIFY_GET_VERIFICATION_SUBTASKS ); - for (const verificationSubtask of verificationSubtasks) { - await run(verificationSubtask, verificationArgs); - } - }); - -subtask(TASK_VERIFY_RESOLVE_ARGUMENTS) - .addOptionalParam("address") - .addOptionalParam("constructorArgsParams", undefined, [], types.any) - .addOptionalParam("constructorArgs", undefined, undefined, types.inputFile) - .addOptionalParam("libraries", undefined, undefined, types.inputFile) - .addOptionalParam("contract") - .addFlag("listNetworks") - .addFlag("noCompile") - .setAction( - async ({ - address, - constructorArgsParams, - constructorArgs: constructorArgsModule, - contract, - libraries: librariesModule, - listNetworks, - noCompile, - }: VerifyTaskArgs): Promise => { - if (address === undefined) { - throw new MissingAddressError(); - } - - const { isAddress } = await import("@ethersproject/address"); - if (!isAddress(address)) { - throw new InvalidAddressError(address); + const errors: Record = {}; + for (const { label, subtaskName } of verificationSubtasks) { + try { + await run(subtaskName, taskArgs); + } catch (error) { + errors[label] = error as HardhatVerifyError; } + } - if (contract !== undefined && !isFullyQualifiedName(contract)) { - throw new InvalidContractNameError(contract); - } - - const constructorArgs = await resolveConstructorArguments( - constructorArgsParams, - constructorArgsModule - ); - - const libraries = await resolveLibraries(librariesModule); - - return { - address, - constructorArgs, - libraries, - contractFQN: contract, - listNetworks, - noCompile, - }; + const hasErrors = Object.keys(errors).length > 0; + if (hasErrors) { + printVerificationErrors(errors); + process.exit(1); } - ); + }); -/** - * Returns a list of verification subtasks. - */ -subtask(TASK_VERIFY_GET_VERIFICATION_SUBTASKS, async (): Promise => { - return [TASK_VERIFY_ETHERSCAN]; +subtask( + TASK_VERIFY_PRINT_SUPPORTED_NETWORKS, + "Prints the supported networks list" +).setAction(async ({}, { config }) => { + await printSupportedNetworks(config.etherscan.customChains); }); -/** - * Main Etherscan verification subtask. - * - * Verifies a contract in Etherscan by coordinating various subtasks related - * to contract verification. - */ -subtask(TASK_VERIFY_ETHERSCAN) - .addParam("address") - .addParam("constructorArgs", undefined, undefined, types.any) - .addParam("libraries", undefined, undefined, types.any) - .addOptionalParam("contractFQN") - .addFlag("listNetworks") - .addFlag("noCompile") - .setAction( - async ( - { - address, - constructorArgs, - libraries, - contractFQN, - listNetworks, - noCompile, - }: VerificationArgs, - { config, network, run } - ) => { - if (listNetworks) { - await printSupportedNetworks(config.etherscan.customChains); - return; - } - - const chainConfig = await getCurrentChainConfig( - network, - config.etherscan.customChains - ); - - const etherscan = new Etherscan(config.etherscan.apiKey, chainConfig); - - const isVerified = await etherscan.isVerified(address); - if (isVerified) { - const contractURL = etherscan.getContractUrl(address); - console.log(`The contract ${address} has already been verified. -${contractURL}`); - return; - } - - const configCompilerVersions = await getCompilerVersions(config.solidity); - - const deployedBytecode = await Bytecode.getDeployedContractBytecode( - address, - network.provider, - network.name - ); - - const matchingCompilerVersions = - await deployedBytecode.getMatchingVersions(configCompilerVersions); - // don't error if the bytecode appears to be OVM bytecode, because we can't infer a specific OVM solc version from the bytecode - if (matchingCompilerVersions.length === 0 && !deployedBytecode.isOvm()) { - throw new CompilerVersionsMismatchError( - configCompilerVersions, - deployedBytecode.getVersion(), - network.name - ); - } - - // Make sure that contract artifacts are up-to-date - if (!noCompile) { - await run(TASK_COMPILE, { quiet: true }); - } - - const contractInformation: ExtendedContractInformation = await run( - TASK_VERIFY_ETHERSCAN_GET_CONTRACT_INFORMATION, - { - contractFQN, - deployedBytecode, - matchingCompilerVersions, - libraries, - } - ); - - const minimalInput: CompilerInput = await run( - TASK_VERIFY_ETHERSCAN_GET_MINIMAL_INPUT, - { - sourceName: contractInformation.sourceName, - } - ); - - const encodedConstructorArguments = await encodeArguments( - contractInformation.contractOutput.abi, - contractInformation.sourceName, - contractInformation.contractName, - constructorArgs - ); - - // First, try to verify the contract using the minimal input - const { success: minimalInputVerificationSuccess }: VerificationResponse = - await run(TASK_VERIFY_ETHERSCAN_ATTEMPT_VERIFICATION, { - address, - compilerInput: minimalInput, - contractInformation, - verificationInterface: etherscan, - encodedConstructorArguments, - }); - - if (minimalInputVerificationSuccess) { - return; - } - - console.log(`We tried verifying your contract ${contractInformation.contractName} without including any unrelated one, but it failed. -Trying again with the full solc input used to compile and deploy it. -This means that unrelated contracts may be displayed on Etherscan... -`); +subtask( + TASK_VERIFY_GET_VERIFICATION_SUBTASKS, + async (_, { config, userConfig }): Promise => { + const verificationSubtasks: VerificationSubtask[] = []; - // If verifying with the minimal input failed, try again with the full compiler input - const { - success: fullCompilerInputVerificationSuccess, - message: verificationMessage, - }: VerificationResponse = await run( - TASK_VERIFY_ETHERSCAN_ATTEMPT_VERIFICATION, - { - address, - compilerInput: contractInformation.compilerInput, - contractInformation, - verificationInterface: etherscan, - encodedConstructorArguments, - } - ); + if (config.etherscan.enabled) { + verificationSubtasks.push({ + label: "Etherscan", + subtaskName: TASK_VERIFY_ETHERSCAN, + }); + } - if (fullCompilerInputVerificationSuccess) { - return; - } + if (config.sourcify.enabled) { + verificationSubtasks.push({ + label: "Sourcify", + subtaskName: TASK_VERIFY_SOURCIFY, + }); + } else if (userConfig.sourcify?.enabled === undefined) { + verificationSubtasks.unshift({ + label: "Common", + subtaskName: TASK_VERIFY_SOURCIFY_DISABLED_WARNING, + }); + } - throw new ContractVerificationFailedError( - verificationMessage, - contractInformation.undetectableLibraries + if (!config.etherscan.enabled && !config.sourcify.enabled) { + console.warn( + chalk.yellow( + `[WARNING] No verification services are enabled. Please enable at least one verification service in your configuration.` + ) ); } - ); -subtask(TASK_VERIFY_ETHERSCAN_GET_CONTRACT_INFORMATION) + return verificationSubtasks; + } +); + +subtask(TASK_VERIFY_GET_CONTRACT_INFORMATION) .addParam("deployedBytecode", undefined, undefined, types.any) .addParam("matchingCompilerVersions", undefined, undefined, types.any) .addParam("libraries", undefined, undefined, types.any) @@ -378,12 +203,7 @@ subtask(TASK_VERIFY_ETHERSCAN_GET_CONTRACT_INFORMATION) let contractInformation: ContractInformation | null; if (contractFQN !== undefined) { - let artifactExists; - try { - artifactExists = await artifacts.artifactExists(contractFQN); - } catch (error) { - artifactExists = false; - } + const artifactExists = await artifacts.artifactExists(contractFQN); if (!artifactExists) { throw new ContractNotFoundError(contractFQN); @@ -414,10 +234,7 @@ subtask(TASK_VERIFY_ETHERSCAN_GET_CONTRACT_INFORMATION) ); if (contractInformation === null) { - throw new DeployedBytecodeDoesNotMatchFQNError( - contractFQN, - network.name - ); + throw new DeployedBytecodeMismatchError(network.name, contractFQN); } } else { contractInformation = await extractInferredContractInformation( @@ -441,132 +258,21 @@ subtask(TASK_VERIFY_ETHERSCAN_GET_CONTRACT_INFORMATION) } ); -subtask(TASK_VERIFY_ETHERSCAN_GET_MINIMAL_INPUT) - .addParam("sourceName") - .setAction(async ({ sourceName }: GetMinimalInputArgs, { run }) => { - const cloneDeep = require("lodash.clonedeep") as typeof LodashCloneDeepT; - const dependencyGraph: DependencyGraph = await run( - TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, - { sourceNames: [sourceName] } - ); - - const resolvedFiles = dependencyGraph - .getResolvedFiles() - .filter((resolvedFile) => resolvedFile.sourceName === sourceName); - - if (resolvedFiles.length !== 1) { - throw new UnexpectedNumberOfFilesError(); - } - - const compilationJob: CompilationJob = await run( - TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE, - { - dependencyGraph, - file: resolvedFiles[0], - } - ); - - const minimalInput: CompilerInput = await run( - TASK_COMPILE_SOLIDITY_GET_COMPILER_INPUT, - { - compilationJob, - } - ); - - return cloneDeep(minimalInput); - }); - -subtask(TASK_VERIFY_ETHERSCAN_ATTEMPT_VERIFICATION) - .addParam("address") - .addParam("compilerInput", undefined, undefined, types.any) - .addParam("contractInformation", undefined, undefined, types.any) - .addParam("verificationInterface", undefined, undefined, types.any) - .addParam("encodedConstructorArguments") - .setAction( - async ({ - address, - compilerInput, - contractInformation, - verificationInterface, - encodedConstructorArguments, - }: AttemptVerificationArgs): Promise => { - // Ensure the linking information is present in the compiler input; - compilerInput.settings.libraries = contractInformation.libraries; - - const { message: guid } = await verificationInterface.verify({ - address, - sourceCode: JSON.stringify(compilerInput), - sourceName: contractInformation.sourceName, - contractName: contractInformation.contractName, - compilerVersion: contractInformation.solcLongVersion, - encodedConstructorArguments, - }); - - console.log(`Successfully submitted source code for contract -${contractInformation.sourceName}:${contractInformation.contractName} at ${address} -for verification on the block explorer. Waiting for verification result... -`); - - // Compilation is bound to take some time so there's no sense in requesting status immediately. - await sleep(700); - const verificationStatus = - await verificationInterface.getVerificationStatus(guid); - - if (!(verificationStatus.isFailure() || verificationStatus.isSuccess())) { - // Reaching this point shouldn't be possible unless the API is behaving in a new way. - throw new VerificationAPIUnexpectedMessageError( - verificationStatus.message - ); - } - - if (verificationStatus.isSuccess()) { - const contractURL = verificationInterface.getContractUrl(address); - console.log(`Successfully verified contract ${contractInformation.contractName} on Etherscan. -${contractURL}`); - } - - return { - success: verificationStatus.isSuccess(), - message: verificationStatus.message, - }; - } - ); - /** * This subtask is used for backwards compatibility. - * It validates the parameters as it is done in TASK_VERIFY_RESOLVE_ARGUMENTS - * and calls TASK_VERIFY_ETHERSCAN directly. + * TODO [remove-verify-subtask]: if you're going to remove this subtask, + * update TASK_VERIFY_ETHERSCAN and TASK_VERIFY_ETHERSCAN_RESOLVE_ARGUMENTS accordingly */ subtask(TASK_VERIFY_VERIFY) .addOptionalParam("address") .addOptionalParam("constructorArguments", undefined, [], types.any) .addOptionalParam("libraries", undefined, {}, types.any) .addOptionalParam("contract") - .addFlag("noCompile") .setAction( async ( - { - address, - constructorArguments, - libraries, - contract, - noCompile, - }: VerifySubtaskArgs, + { address, constructorArguments, libraries, contract }: VerifySubtaskArgs, { run } ) => { - if (address === undefined) { - throw new MissingAddressError(); - } - - const { isAddress } = await import("@ethersproject/address"); - if (!isAddress(address)) { - throw new InvalidAddressError(address); - } - - if (contract !== undefined && !isFullyQualifiedName(contract)) { - throw new InvalidContractNameError(contract); - } - // This can only happen if the subtask is invoked from within Hardhat by a user script or another task. if (!Array.isArray(constructorArguments)) { throw new InvalidConstructorArgumentsError(); @@ -578,10 +284,9 @@ subtask(TASK_VERIFY_VERIFY) await run(TASK_VERIFY_ETHERSCAN, { address, - constructorArgs: constructorArguments, + constructorArgsParams: constructorArguments, libraries, - contractFQN: contract, - noCompile, + contract, }); } ); diff --git a/packages/hardhat-verify/src/internal/abi-validation-extras.ts b/packages/hardhat-verify/src/internal/abi-validation-extras.ts new file mode 100644 index 0000000000..621e1ee458 --- /dev/null +++ b/packages/hardhat-verify/src/internal/abi-validation-extras.ts @@ -0,0 +1,71 @@ +// This file contains helpers to detect and handle various +// errors that may be thrown by @ethersproject/abi + +export interface ABIArgumentLengthErrorType extends Error { + code: "INVALID_ARGUMENT"; + count: { + types: number; + values: number; + }; + value: { + types: Array<{ + name: string; + type: string; + }>; + values: any[]; + }; + reason: string; +} + +export interface ABIArgumentTypeErrorType extends Error { + code: "INVALID_ARGUMENT"; + argument: string; + value: any; + reason: string; +} + +export interface ABIArgumentOverflowErrorType extends Error { + code: "NUMERIC_FAULT"; + fault: "overflow"; + value: any; + reason: string; + operation: string; +} + +export function isABIArgumentLengthError( + error: any +): error is ABIArgumentLengthErrorType { + return ( + error.code === "INVALID_ARGUMENT" && + error.count !== undefined && + typeof error.count.types === "number" && + typeof error.count.values === "number" && + error.value !== undefined && + typeof error.value.types === "object" && + typeof error.value.values === "object" && + error instanceof Error + ); +} + +export function isABIArgumentTypeError( + error: any +): error is ABIArgumentTypeErrorType { + return ( + error.code === "INVALID_ARGUMENT" && + typeof error.argument === "string" && + "value" in error && + error instanceof Error + ); +} + +export function isABIArgumentOverflowError( + error: any +): error is ABIArgumentOverflowErrorType { + return ( + error.code === "NUMERIC_FAULT" && + error.fault === "overflow" && + typeof error.operation === "string" && + "value" in error && + error instanceof Error + ); +} diff --git a/packages/hardhat-verify/src/internal/chain-config.ts b/packages/hardhat-verify/src/internal/chain-config.ts new file mode 100644 index 0000000000..b02295898a --- /dev/null +++ b/packages/hardhat-verify/src/internal/chain-config.ts @@ -0,0 +1,272 @@ +import type { ChainConfig } from "../types"; + +// See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-155.md#list-of-chain-ids +export const builtinChains: ChainConfig[] = [ + { + network: "mainnet", + chainId: 1, + urls: { + apiURL: "https://api.etherscan.io/api", + browserURL: "https://etherscan.io", + }, + }, + { + network: "goerli", + chainId: 5, + urls: { + apiURL: "https://api-goerli.etherscan.io/api", + browserURL: "https://goerli.etherscan.io", + }, + }, + { + network: "optimisticEthereum", + chainId: 10, + urls: { + apiURL: "https://api-optimistic.etherscan.io/api", + browserURL: "https://optimistic.etherscan.io/", + }, + }, + { + network: "bsc", + chainId: 56, + urls: { + apiURL: "https://api.bscscan.com/api", + browserURL: "https://bscscan.com", + }, + }, + { + network: "sokol", + chainId: 77, + urls: { + apiURL: "https://blockscout.com/poa/sokol/api", + browserURL: "https://blockscout.com/poa/sokol", + }, + }, + { + network: "bscTestnet", + chainId: 97, + urls: { + apiURL: "https://api-testnet.bscscan.com/api", + browserURL: "https://testnet.bscscan.com", + }, + }, + { + network: "xdai", + chainId: 100, + urls: { + apiURL: "https://api.gnosisscan.io/api", + browserURL: "https://gnosisscan.io", + }, + }, + { + network: "gnosis", + chainId: 100, + urls: { + apiURL: "https://api.gnosisscan.io/api", + browserURL: "https://gnosisscan.io", + }, + }, + { + network: "heco", + chainId: 128, + urls: { + apiURL: "https://api.hecoinfo.com/api", + browserURL: "https://hecoinfo.com", + }, + }, + { + network: "polygon", + chainId: 137, + urls: { + apiURL: "https://api.polygonscan.com/api", + browserURL: "https://polygonscan.com", + }, + }, + { + network: "opera", + chainId: 250, + urls: { + apiURL: "https://api.ftmscan.com/api", + browserURL: "https://ftmscan.com", + }, + }, + { + network: "hecoTestnet", + chainId: 256, + urls: { + apiURL: "https://api-testnet.hecoinfo.com/api", + browserURL: "https://testnet.hecoinfo.com", + }, + }, + { + network: "optimisticGoerli", + chainId: 420, + urls: { + apiURL: "https://api-goerli-optimism.etherscan.io/api", + browserURL: "https://goerli-optimism.etherscan.io/", + }, + }, + { + network: "polygonZkEVM", + chainId: 1101, + urls: { + apiURL: "https://api-zkevm.polygonscan.com/api", + browserURL: "https://zkevm.polygonscan.com", + }, + }, + { + network: "moonbeam", + chainId: 1284, + urls: { + apiURL: "https://api-moonbeam.moonscan.io/api", + browserURL: "https://moonbeam.moonscan.io", + }, + }, + { + network: "moonriver", + chainId: 1285, + urls: { + apiURL: "https://api-moonriver.moonscan.io/api", + browserURL: "https://moonriver.moonscan.io", + }, + }, + { + network: "moonbaseAlpha", + chainId: 1287, + urls: { + apiURL: "https://api-moonbase.moonscan.io/api", + browserURL: "https://moonbase.moonscan.io/", + }, + }, + { + network: "polygonZkEVMTestnet", + chainId: 1442, + urls: { + apiURL: "https://api-testnet-zkevm.polygonscan.com/api", + browserURL: "https://testnet-zkevm.polygonscan.com", + }, + }, + { + network: "ftmTestnet", + chainId: 4002, + urls: { + apiURL: "https://api-testnet.ftmscan.com/api", + browserURL: "https://testnet.ftmscan.com", + }, + }, + { + network: "base", + chainId: 8453, + urls: { + apiURL: "https://api.basescan.org/api", + browserURL: "https://basescan.org/", + }, + }, + { + network: "chiado", + chainId: 10200, + urls: { + apiURL: "https://gnosis-chiado.blockscout.com/api", + browserURL: "https://gnosis-chiado.blockscout.com", + }, + }, + { + network: "arbitrumOne", + chainId: 42161, + urls: { + apiURL: "https://api.arbiscan.io/api", + browserURL: "https://arbiscan.io/", + }, + }, + { + network: "avalancheFujiTestnet", + chainId: 43113, + urls: { + apiURL: "https://api-testnet.snowtrace.io/api", + browserURL: "https://testnet.snowtrace.io/", + }, + }, + { + network: "avalanche", + chainId: 43114, + urls: { + apiURL: "https://api.snowtrace.io/api", + browserURL: "https://snowtrace.io/", + }, + }, + { + network: "polygonMumbai", + chainId: 80001, + urls: { + apiURL: "https://api-testnet.polygonscan.com/api", + browserURL: "https://mumbai.polygonscan.com/", + }, + }, + { + network: "baseGoerli", + chainId: 84531, + urls: { + apiURL: "https://api-goerli.basescan.org/api", + browserURL: "https://goerli.basescan.org/", + }, + }, + { + network: "arbitrumTestnet", + chainId: 421611, + urls: { + apiURL: "https://api-testnet.arbiscan.io/api", + browserURL: "https://testnet.arbiscan.io/", + }, + }, + { + network: "arbitrumGoerli", + chainId: 421613, + urls: { + apiURL: "https://api-goerli.arbiscan.io/api", + browserURL: "https://goerli.arbiscan.io/", + }, + }, + { + network: "sepolia", + chainId: 11155111, + urls: { + apiURL: "https://api-sepolia.etherscan.io/api", + browserURL: "https://sepolia.etherscan.io", + }, + }, + { + network: "aurora", + chainId: 1313161554, + urls: { + apiURL: "https://explorer.mainnet.aurora.dev/api", + browserURL: "https://explorer.mainnet.aurora.dev", + }, + }, + { + network: "auroraTestnet", + chainId: 1313161555, + urls: { + apiURL: "https://explorer.testnet.aurora.dev/api", + browserURL: "https://explorer.testnet.aurora.dev", + }, + }, + { + network: "harmony", + chainId: 1666600000, + urls: { + apiURL: "https://ctrver.t.hmny.io/verify", + browserURL: "https://explorer.harmony.one", + }, + }, + { + network: "harmonyTest", + chainId: 1666700000, + urls: { + apiURL: "https://ctrver.t.hmny.io/verify?network=testnet", + browserURL: "https://explorer.pops.one", + }, + }, + // We are not adding new networks to the core of hardhat-verify anymore. + // Please read this to learn how to manually add support for custom networks: + // https://github.com/NomicFoundation/hardhat/tree/main/packages/hardhat-verify#adding-support-for-other-networks +]; diff --git a/packages/hardhat-verify/src/internal/config.ts b/packages/hardhat-verify/src/internal/config.ts new file mode 100644 index 0000000000..d6747f3f0b --- /dev/null +++ b/packages/hardhat-verify/src/internal/config.ts @@ -0,0 +1,46 @@ +import type LodashCloneDeepT from "lodash.clonedeep"; +import type { HardhatConfig, HardhatUserConfig } from "hardhat/types"; +import type { EtherscanConfig, SourcifyConfig } from "../types"; + +import chalk from "chalk"; + +export function etherscanConfigExtender( + config: HardhatConfig, + userConfig: Readonly +): void { + const defaultEtherscanConfig: EtherscanConfig = { + apiKey: "", + customChains: [], + enabled: true, + }; + const cloneDeep = require("lodash.clonedeep") as typeof LodashCloneDeepT; + const userEtherscanConfig = cloneDeep(userConfig.etherscan); + config.etherscan = { ...defaultEtherscanConfig, ...userEtherscanConfig }; + + // check that there is no etherscan entry in the networks object, since + // this is a common mistake made by users + if ( + userConfig.etherscan === undefined && + config.networks?.etherscan !== undefined + ) { + console.warn( + chalk.yellow( + "WARNING: you have an 'etherscan' entry in your networks configuration. This is likely a mistake. The etherscan configuration should be at the root of the configuration, not within the networks object." + ) + ); + } +} + +export function sourcifyConfigExtender( + config: HardhatConfig, + userConfig: Readonly +): void { + const defaultSourcifyConfig: SourcifyConfig = { + enabled: false, + apiUrl: "https://sourcify.dev/server", + browserUrl: "https://repo.sourcify.dev", + }; + const cloneDeep = require("lodash.clonedeep") as typeof LodashCloneDeepT; + const userSourcifyConfig = cloneDeep(userConfig.sourcify); + config.sourcify = { ...defaultSourcifyConfig, ...userSourcifyConfig }; +} diff --git a/packages/hardhat-verify/src/internal/errors.ts b/packages/hardhat-verify/src/internal/errors.ts new file mode 100644 index 0000000000..a023cad2f5 --- /dev/null +++ b/packages/hardhat-verify/src/internal/errors.ts @@ -0,0 +1,460 @@ +import { NomicLabsHardhatPluginError } from "hardhat/plugins"; +import { + ABIArgumentLengthErrorType, + ABIArgumentOverflowErrorType, + ABIArgumentTypeErrorType, +} from "./abi-validation-extras"; +import { TASK_VERIFY_VERIFY } from "./task-names"; + +export class HardhatVerifyError extends NomicLabsHardhatPluginError { + constructor(message: string, parent?: Error) { + super("@nomicfoundation/hardhat-verify", message, parent); + } +} + +export class MissingAddressError extends HardhatVerifyError { + constructor() { + super( + "You didn’t provide any address. Please re-run the 'verify' task with the address of the contract you want to verify." + ); + } +} + +export class InvalidAddressError extends HardhatVerifyError { + constructor(address: string) { + super(`${address} is an invalid address.`); + } +} + +export class InvalidContractNameError extends HardhatVerifyError { + constructor(contractName: string) { + super(`A valid fully qualified name was expected. Fully qualified names look like this: "contracts/AContract.sol:TheContract" +Instead, this name was received: ${contractName}`); + } +} + +export class MissingApiKeyError extends HardhatVerifyError { + constructor(network: string) { + super(`You are trying to verify a contract in '${network}', but no API token was found for this network. Please provide one in your hardhat config. For example: + +{ + ... + etherscan: { + apiKey: { + ${network}: 'your API key' + } + } +} + +See https://etherscan.io/apis`); + } +} + +export class InvalidConstructorArgumentsError extends HardhatVerifyError { + constructor() { + super(`The constructorArguments parameter should be an array. +If your constructor has no arguments pass an empty array. E.g: + + await run("${TASK_VERIFY_VERIFY}", { + , + constructorArguments: [] + };`); + } +} + +export class ExclusiveConstructorArgumentsError extends HardhatVerifyError { + constructor() { + super( + "The parameters constructorArgsParams and constructorArgsModule are exclusive. Please provide only one of them." + ); + } +} + +export class InvalidConstructorArgumentsModuleError extends HardhatVerifyError { + constructor(constructorArgsModulePath: string) { + super(`The module ${constructorArgsModulePath} doesn't export a list. The module should look like this: + +module.exports = [ arg1, arg2, ... ];`); + } +} + +export class InvalidLibrariesError extends HardhatVerifyError { + constructor() { + super(`The libraries parameter should be a dictionary. +If your contract does not have undetectable libraries pass an empty object or omit the argument. E.g: + + await run("${TASK_VERIFY_VERIFY}", { + , + libraries: {} + };`); + } +} + +export class InvalidLibrariesModuleError extends HardhatVerifyError { + constructor(librariesModulePath: string) { + super(`The module ${librariesModulePath} doesn't export a dictionary. The module should look like this: + +module.exports = { lib1: "0x...", lib2: "0x...", ... };`); + } +} + +export class ImportingModuleError extends HardhatVerifyError { + constructor(module: string, parent: Error) { + super( + `Importing the module for the ${module} failed. +Reason: ${parent.message}`, + parent + ); + } +} + +export class HardhatNetworkNotSupportedError extends HardhatVerifyError { + constructor() { + super( + `The selected network is "hardhat", which is not supported for contract verification. + +If you intended to use a different network, ensure that you provide the --network parameter when running the command. + +For example: npx hardhat verify --network ` + ); + } +} + +export class ChainConfigNotFoundError extends HardhatVerifyError { + constructor(chainId: number) { + super(`Trying to verify a contract in a network with chain id ${chainId}, but the plugin doesn't recognize it as a supported chain. + +You can manually add support for it by following these instructions: https://hardhat.org/verify-custom-networks + +To see the list of supported networks, run this command: + + npx hardhat verify --list-networks`); + } +} + +export class ContractVerificationInvalidStatusCodeError extends HardhatVerifyError { + constructor(url: string, statusCode: number, responseText: string) { + super(`Failed to send contract verification request. +Endpoint URL: ${url} +The HTTP server response is not ok. Status code: ${statusCode} Response text: ${responseText}`); + } +} + +export class ContractVerificationMissingBytecodeError extends HardhatVerifyError { + constructor(url: string, contractAddress: string) { + super(`Failed to send contract verification request. +Endpoint URL: ${url} +Reason: The Etherscan API responded that the address ${contractAddress} does not have bytecode. +This can happen if the contract was recently deployed and this fact hasn't propagated to the backend yet. +Try waiting for a minute before verifying your contract. If you are invoking this from a script, +try to wait for five confirmations of your contract deployment transaction before running the verification subtask.`); + } +} + +export class ContractStatusPollingInvalidStatusCodeError extends HardhatVerifyError { + constructor(statusCode: number, responseText: string) { + super( + `The HTTP server response is not ok. Status code: ${statusCode} Response text: ${responseText}` + ); + } +} + +export class ContractStatusPollingResponseNotOkError extends HardhatVerifyError { + constructor(message: string) { + super(`The Etherscan API responded with a failure status. +The verification may still succeed but should be checked manually. +Reason: ${message}`); + } +} + +export class EtherscanVersionNotSupportedError extends HardhatVerifyError { + constructor() { + super(`Etherscan only supports compiler versions 0.4.11 and higher. +See https://etherscan.io/solcversions for more information.`); + } +} + +export class DeployedBytecodeNotFoundError extends HardhatVerifyError { + constructor(address: string, network: string) { + super(`The address ${address} has no bytecode. Is the contract deployed to this network? +The selected network is ${network}.`); + } +} + +export class CompilerVersionsMismatchError extends HardhatVerifyError { + constructor( + configCompilerVersions: string[], + inferredCompilerVersion: string, + network: string + ) { + const versionDetails = + configCompilerVersions.length > 1 + ? `versions are: ${configCompilerVersions.join(", ")}` + : `version is: ${configCompilerVersions[0]}`; + + super(`The contract you want to verify was compiled with solidity ${inferredCompilerVersion}, but your configured compiler ${versionDetails}. + +Possible causes are: +- You are not in the same commit that was used to deploy the contract. +- Wrong compiler version selected in hardhat config. +- The given address is wrong. +- The selected network (${network}) is wrong.`); + } +} + +export class ContractNotFoundError extends HardhatVerifyError { + constructor(contractFQN: string) { + super(`The contract ${contractFQN} is not present in your project.`); + } +} + +export class BuildInfoNotFoundError extends HardhatVerifyError { + constructor(contractFQN: string) { + super(`The contract ${contractFQN} is present in your project, but we couldn't find its sources. +Please make sure that it has been compiled by Hardhat and that it is written in Solidity.`); + } +} + +export class BuildInfoCompilerVersionMismatchError extends HardhatVerifyError { + constructor( + contractFQN: string, + compilerVersion: string, + isVersionRange: boolean, + buildInfoCompilerVersion: string, + network: string + ) { + const versionDetails = isVersionRange + ? `a solidity version in the range ${compilerVersion}` + : `the solidity version ${compilerVersion}`; + + super(`The contract ${contractFQN} is being compiled with ${buildInfoCompilerVersion}. +However, the contract found in the address provided as argument has its bytecode marked with ${versionDetails}. + +Possible causes are: +- Solidity compiler version settings were modified after the deployment was executed. +- The given address is wrong. +- The selected network (${network}) is wrong.`); + } +} + +export class DeployedBytecodeMismatchError extends HardhatVerifyError { + constructor(network: string, contractFQN?: string) { + const contractDetails = + typeof contractFQN === "string" + ? `the contract ${contractFQN}.` + : `any of your local contracts.`; + super(`The address provided as argument contains a contract, but its bytecode doesn't match ${contractDetails} + +Possible causes are: + - The artifact for that contract is outdated or missing. You can try compiling the project again with the --force flag before re-running the verification. + - The contract's code changed after the deployment was executed. Sometimes this happens by changes in seemingly unrelated contracts. + - The solidity compiler settings were modified after the deployment was executed (like the optimizer, target EVM, etc.) + - The given address is wrong. + - The selected network (${network}) is wrong.`); + } +} + +export class DeployedBytecodeMultipleMatchesError extends HardhatVerifyError { + constructor(fqnMatches: string[]) { + super(`More than one contract was found to match the deployed bytecode. +Please use the contract parameter with one of the following contracts: +${fqnMatches.map((x) => ` * ${x}`).join("\n")} + +For example: + +hardhat verify --contract contracts/Example.sol:ExampleContract + +If you are running the verify subtask from within Hardhat instead: + +await run("${TASK_VERIFY_VERIFY}", { +, +contract: "contracts/Example.sol:ExampleContract" +};`); + } +} + +export class InvalidLibraryAddressError extends HardhatVerifyError { + constructor( + contractName: string, + libraryName: string, + libraryAddress: string + ) { + super( + `You gave a link for the contract ${contractName} with the library ${libraryName}, but provided this invalid address: ${libraryAddress}` + ); + } +} + +export class DuplicatedLibraryError extends HardhatVerifyError { + constructor(libraryName: string, libraryFQN: string) { + super( + `The library names ${libraryName} and ${libraryFQN} refer to the same library and were given as two entries in the libraries dictionary. +Remove one of them and review your libraries dictionary before proceeding.` + ); + } +} + +export class LibraryNotFoundError extends HardhatVerifyError { + constructor( + contractName: string, + libraryName: string, + allLibraries: string[], + detectableLibraries: string[], + undetectableLibraries: string[] + ) { + const contractLibrariesDetails = `This contract uses the following external libraries: +${undetectableLibraries.map((x) => ` * ${x}`).join("\n")} +${detectableLibraries.map((x) => ` * ${x} (optional)`).join("\n")} +${ + detectableLibraries.length > 0 + ? "Libraries marked as optional don't need to be specified since their addresses are autodetected by the plugin." + : "" +}`; + + super(`You gave an address for the library ${libraryName} in the libraries dictionary, which is not one of the libraries of contract ${contractName}. +${ + allLibraries.length > 0 + ? contractLibrariesDetails + : "This contract doesn't use any external libraries." +}`); + } +} + +export class LibraryMultipleMatchesError extends HardhatVerifyError { + constructor(contractName: string, libraryName: string, fqnMatches: string[]) { + super(`The library name ${libraryName} is ambiguous for the contract ${contractName}. +It may resolve to one of the following libraries: +${fqnMatches.map((x) => ` * ${x}`).join("\n")} + +To fix this, choose one of these fully qualified library names and replace it in your libraries dictionary.`); + } +} + +export class MissingLibrariesError extends HardhatVerifyError { + constructor( + contractName: string, + allLibraries: string[], + mergedLibraries: string[], + undetectableLibraries: string[] + ) { + const missingLibraries = allLibraries.filter( + (lib) => !mergedLibraries.some((mergedLib) => lib === mergedLib) + ); + + super(`The contract ${contractName} has one or more library addresses that cannot be detected from deployed bytecode. +This can occur if the library is only called in the contract constructor. The missing libraries are: +${missingLibraries.map((x) => ` * ${x}`).join("\n")} + +${ + missingLibraries.length === undetectableLibraries.length + ? "Visit https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify#libraries-with-undetectable-addresses to learn how to solve this." + : "To solve this, you can add them to your --libraries dictionary with their corresponding addresses." +}`); + } +} + +export class LibraryAddressesMismatchError extends HardhatVerifyError { + constructor( + conflicts: Array<{ + library: string; + detectedAddress: string; + inputAddress: string; + }> + ) { + super(`The following detected library addresses are different from the ones provided: +${conflicts + .map( + ({ library, inputAddress, detectedAddress }) => + ` * ${library} +given address: ${inputAddress} +detected address: ${detectedAddress}` + ) + .join("\n")} + +You can either fix these addresses in your libraries dictionary or simply remove them to let the plugin autodetect them.`); + } +} + +export class UnexpectedNumberOfFilesError extends HardhatVerifyError { + constructor() { + super( + "The plugin found an unexpected number of files for this contract. Please report this issue to the Hardhat team." + ); + } +} + +export class ABIArgumentLengthError extends HardhatVerifyError { + constructor( + sourceName: string, + contractName: string, + error: ABIArgumentLengthErrorType + ) { + const { types: requiredArgs, values: providedArgs } = error.count; + super( + `The constructor for ${sourceName}:${contractName} has ${requiredArgs} parameters +but ${providedArgs} arguments were provided instead.`, + error + ); + } +} + +export class ABIArgumentTypeError extends HardhatVerifyError { + constructor(error: ABIArgumentTypeErrorType) { + const { value: argValue, argument: argName, reason } = error; + super( + `Value ${argValue} cannot be encoded for the parameter ${argName}. +Encoder error reason: ${reason}`, + error + ); + } +} + +export class ABIArgumentOverflowError extends HardhatVerifyError { + constructor(error: ABIArgumentOverflowErrorType) { + const { value: argValue, fault: reason, operation } = error; + super( + `Value ${argValue} is not a safe integer and cannot be encoded. +Use a string instead of a plain number. +Encoder error reason: ${reason} fault in ${operation}`, + error + ); + } +} + +export class VerificationAPIUnexpectedMessageError extends HardhatVerifyError { + constructor(message: string) { + super(`The API responded with an unexpected message. +Please report this issue to the Hardhat team. +Contract verification may have succeeded and should be checked manually. +Message: ${message}`); + } +} + +export class UnexpectedError extends HardhatVerifyError { + constructor(e: unknown, functionName: string) { + const defaultErrorDetails = `Unexpected error in ${functionName}`; + const errorDetails = + e instanceof Error + ? e.message ?? defaultErrorDetails + : defaultErrorDetails; + super(`An unexpected error occurred during the verification process. +Please report this issue to the Hardhat team. +Error Details: ${errorDetails}`); + } +} + +export class ContractVerificationFailedError extends HardhatVerifyError { + constructor(message: string, undetectableLibraries: string[]) { + super(`The contract verification failed. +Reason: ${message} +${ + undetectableLibraries.length > 0 + ? ` +This contract makes use of libraries whose addresses are undetectable by the plugin. +Keep in mind that this verification failure may be due to passing in the wrong +address for one of these libraries: +${undetectableLibraries.map((x) => ` * ${x}`).join("\n")}` + : "" +}`); + } +} diff --git a/packages/hardhat-verify/src/internal/etherscan.ts b/packages/hardhat-verify/src/internal/etherscan.ts new file mode 100644 index 0000000000..25830ecdcc --- /dev/null +++ b/packages/hardhat-verify/src/internal/etherscan.ts @@ -0,0 +1,320 @@ +import type { EthereumProvider } from "hardhat/types"; +import type { ChainConfig, ApiKey } from "../types"; +import type { + EtherscanGetSourceCodeResponse, + EtherscanVerifyResponse, +} from "./etherscan.types"; + +import { HARDHAT_NETWORK_NAME } from "hardhat/plugins"; + +import { + ContractStatusPollingInvalidStatusCodeError, + ContractVerificationMissingBytecodeError, + ContractVerificationInvalidStatusCodeError, + HardhatVerifyError, + MissingApiKeyError, + ContractStatusPollingResponseNotOkError, + ChainConfigNotFoundError, + HardhatNetworkNotSupportedError, + UnexpectedError, +} from "./errors"; +import { isSuccessStatusCode, sendGetRequest, sendPostRequest } from "./undici"; +import { ValidationResponse, sleep } from "./utilities"; +import { builtinChains } from "./chain-config"; + +// Used for polling the result of the contract verification. +const VERIFICATION_STATUS_POLLING_TIME = 3000; + +/** + * Etherscan verification provider for verifying smart contracts. + * It should work with other verification providers as long as the interface + * is compatible with Etherscan's. + */ +export class Etherscan { + /** + * Create a new instance of the Etherscan verification provider. + * @param apiKey - The Etherscan API key. + * @param apiUrl - The Etherscan API URL, e.g. https://api.etherscan.io/api. + * @param browserUrl - The Etherscan browser URL, e.g. https://etherscan.io. + */ + constructor( + public apiKey: string, + public apiUrl: string, + public browserUrl: string + ) {} + + public static async getCurrentChainConfig( + networkName: string, + ethereumProvider: EthereumProvider, + customChains: ChainConfig[] + ): Promise { + const currentChainId = parseInt( + await ethereumProvider.send("eth_chainId"), + 16 + ); + + const currentChainConfig = [ + // custom chains has higher precedence than builtin chains + ...[...customChains].reverse(), // the last entry has higher precedence + ...builtinChains, + ].find(({ chainId }) => chainId === currentChainId); + + if (currentChainConfig === undefined) { + if (networkName === HARDHAT_NETWORK_NAME) { + throw new HardhatNetworkNotSupportedError(); + } + + throw new ChainConfigNotFoundError(currentChainId); + } + + return currentChainConfig; + } + + public static fromChainConfig( + apiKey: ApiKey | undefined, + chainConfig: ChainConfig + ) { + const resolvedApiKey = resolveApiKey(apiKey, chainConfig.network); + const apiUrl = chainConfig.urls.apiURL; + const browserUrl = chainConfig.urls.browserURL.trim().replace(/\/$/, ""); + + return new Etherscan(resolvedApiKey, apiUrl, browserUrl); + } + + /** + * Check if a smart contract is verified on Etherscan. + * @link https://docs.etherscan.io/api-endpoints/contracts#get-contract-source-code-for-verified-contract-source-codes + * @param address - The address of the smart contract. + * @returns True if the contract is verified, false otherwise. + */ + public async isVerified(address: string) { + const parameters = new URLSearchParams({ + apikey: this.apiKey, + module: "contract", + action: "getsourcecode", + address, + }); + + const url = new URL(this.apiUrl); + url.search = parameters.toString(); + + try { + const response = await sendGetRequest(url); + const json = + (await response.body.json()) as EtherscanGetSourceCodeResponse; + + if (!isSuccessStatusCode(response.statusCode)) { + throw new ContractVerificationInvalidStatusCodeError( + url.toString(), + response.statusCode, + JSON.stringify(json) + ); + } + + if (json.message !== "OK") { + return false; + } + + const sourceCode = json.result[0]?.SourceCode; + return ( + sourceCode !== undefined && sourceCode !== null && sourceCode !== "" + ); + } catch (e) { + if (e instanceof ContractVerificationInvalidStatusCodeError) { + throw e; + } + throw new UnexpectedError(e, "Etherscan.isVerified"); + } + } + + /** + * Verify a smart contract on Etherscan. + * @link https://docs.etherscan.io/api-endpoints/contracts#verify-source-code + * @param contractAddress - The address of the smart contract to verify. + * @param sourceCode - The source code of the smart contract. + * @param contractName - The name of the smart contract, e.g. "contracts/Sample.sol:MyContract" + * @param compilerVersion - The version of the Solidity compiler used, e.g. `v0.8.19+commit.7dd6d404` + * @param constructorArguments - The encoded constructor arguments of the smart contract. + * @returns A promise that resolves to an `EtherscanResponse` object. + * @throws {ContractVerificationRequestError} if there is an error on the request. + * @throws {ContractVerificationInvalidStatusCodeError} if the API returns an invalid status code. + * @throws {ContractVerificationMissingBytecodeError} if the bytecode is not found on the block explorer. + * @throws {HardhatVerifyError} if the response status is not OK. + */ + public async verify( + contractAddress: string, + sourceCode: string, + contractName: string, + compilerVersion: string, + constructorArguments: string + ): Promise { + const parameters = new URLSearchParams({ + apikey: this.apiKey, + module: "contract", + action: "verifysourcecode", + contractaddress: contractAddress, + sourceCode, + codeformat: "solidity-standard-json-input", + contractname: contractName, + compilerversion: compilerVersion, + constructorArguements: constructorArguments, + }); + + const url = new URL(this.apiUrl); + try { + const response = await sendPostRequest(url, parameters.toString(), { + "Content-Type": "application/x-www-form-urlencoded", + }); + const json = (await response.body.json()) as EtherscanVerifyResponse; + + if (!isSuccessStatusCode(response.statusCode)) { + throw new ContractVerificationInvalidStatusCodeError( + url.toString(), + response.statusCode, + JSON.stringify(json) + ); + } + + const etherscanResponse = new EtherscanResponse(json); + + if (etherscanResponse.isBytecodeMissingInNetworkError()) { + throw new ContractVerificationMissingBytecodeError( + this.apiUrl, + contractAddress + ); + } + + if (!etherscanResponse.isOk()) { + throw new HardhatVerifyError(etherscanResponse.message); + } + + return etherscanResponse; + } catch (e) { + if ( + e instanceof ContractVerificationInvalidStatusCodeError || + e instanceof ContractVerificationMissingBytecodeError + ) { + throw e; + } + throw new UnexpectedError(e, "Etherscan.verify"); + } + } + + /** + * Get the verification status of a smart contract from Etherscan. + * This method performs polling of the verification status if it's pending. + * @link https://docs.etherscan.io/api-endpoints/contracts#check-source-code-verification-submission-status + * @param guid - The verification GUID to check. + * @returns A promise that resolves to an `EtherscanResponse` object. + * @throws {ContractStatusPollingError} if there is an error on the request. + * @throws {ContractStatusPollingInvalidStatusCodeError} if the API returns an invalid status code. + * @throws {ContractStatusPollingResponseNotOkError} if the response status is not OK. + */ + public async getVerificationStatus(guid: string): Promise { + const parameters = new URLSearchParams({ + apikey: this.apiKey, + module: "contract", + action: "checkverifystatus", + guid, + }); + const url = new URL(this.apiUrl); + url.search = parameters.toString(); + + try { + const response = await sendGetRequest(url); + const json = (await response.body.json()) as EtherscanVerifyResponse; + + if (!isSuccessStatusCode(response.statusCode)) { + throw new ContractStatusPollingInvalidStatusCodeError( + response.statusCode, + JSON.stringify(json) + ); + } + + const etherscanResponse = new EtherscanResponse(json); + + if (etherscanResponse.isPending()) { + await sleep(VERIFICATION_STATUS_POLLING_TIME); + + return await this.getVerificationStatus(guid); + } + + if (etherscanResponse.isFailure()) { + return etherscanResponse; + } + + if (!etherscanResponse.isOk()) { + throw new ContractStatusPollingResponseNotOkError( + etherscanResponse.message + ); + } + + return etherscanResponse; + } catch (e) { + if ( + e instanceof ContractStatusPollingInvalidStatusCodeError || + e instanceof ContractStatusPollingResponseNotOkError + ) { + throw e; + } + throw new UnexpectedError(e, "Etherscan.getVerificationStatus"); + } + } + + /** + * Get the Etherscan URL for viewing a contract's details. + * @param address - The address of the smart contract. + * @returns The URL to view the contract on Etherscan's website. + */ + public getContractUrl(address: string) { + return `${this.browserUrl}/address/${address}#code`; + } +} + +class EtherscanResponse implements ValidationResponse { + public readonly status: number; + public readonly message: string; + + constructor(response: EtherscanVerifyResponse) { + this.status = parseInt(response.status, 10); + this.message = response.result; + } + + public isPending() { + return this.message === "Pending in queue"; + } + + public isFailure() { + return this.message === "Fail - Unable to verify"; + } + + public isSuccess() { + return this.message === "Pass - Verified"; + } + + public isBytecodeMissingInNetworkError() { + return this.message.startsWith("Unable to locate ContractCode at"); + } + + public isOk() { + return this.status === 1; + } +} + +function resolveApiKey(apiKey: ApiKey | undefined, network: string) { + if (apiKey === undefined || apiKey === "") { + throw new MissingApiKeyError(network); + } + + if (typeof apiKey === "string") { + return apiKey; + } + + const key = apiKey[network]; + + if (key === undefined || key === "") { + throw new MissingApiKeyError(network); + } + + return key; +} diff --git a/packages/hardhat-verify/src/internal/etherscan.types.ts b/packages/hardhat-verify/src/internal/etherscan.types.ts new file mode 100644 index 0000000000..b9268f02bb --- /dev/null +++ b/packages/hardhat-verify/src/internal/etherscan.types.ts @@ -0,0 +1,47 @@ +interface EtherscanGetSourceCodeNotOkResponse { + status: "0"; + message: "NOTOK"; + result: string; +} + +interface EtherscanGetSourceCodeOkResponse { + status: "1"; + message: "OK"; + result: EtherscanContract[]; +} + +interface EtherscanContract { + SourceCode: string; + ABI: string; + ContractName: string; + CompilerVersion: string; + OptimizationUsed: string; + Runs: string; + ConstructorArguments: string; + EVMVersion: string; + Library: string; + LicenseType: string; + Proxy: string; + Implementation: string; + SwarmSource: string; +} + +export type EtherscanGetSourceCodeResponse = + | EtherscanGetSourceCodeNotOkResponse + | EtherscanGetSourceCodeOkResponse; + +interface EtherscanVerifyNotOkResponse { + status: "0"; + message: "NOTOK"; + result: string; +} + +interface EtherscanVerifyOkResponse { + status: "1"; + message: "OK"; + result: string; +} + +export type EtherscanVerifyResponse = + | EtherscanVerifyNotOkResponse + | EtherscanVerifyOkResponse; diff --git a/packages/hardhat-verify/src/internal/solc/artifacts.ts b/packages/hardhat-verify/src/internal/solc/artifacts.ts new file mode 100644 index 0000000000..5e6df0225d --- /dev/null +++ b/packages/hardhat-verify/src/internal/solc/artifacts.ts @@ -0,0 +1,405 @@ +import type { + Artifacts, + BuildInfo, + CompilerInput, + CompilerOutputBytecode, + CompilerOutputContract, + Network, +} from "hardhat/types"; + +import { parseFullyQualifiedName } from "hardhat/utils/contract-names"; +import { + DeployedBytecodeMismatchError, + DeployedBytecodeMultipleMatchesError, + DuplicatedLibraryError, + InvalidLibraryAddressError, + LibraryAddressesMismatchError, + LibraryMultipleMatchesError, + LibraryNotFoundError, + MissingLibrariesError, +} from "../errors"; +import { Bytecode } from "./bytecode"; + +export interface ContractInformation { + compilerInput: CompilerInput; + solcLongVersion: string; + sourceName: string; + contractName: string; + contractOutput: CompilerOutputContract; + deployedBytecode: string; +} + +interface LibraryInformation { + libraries: SourceToLibraryToAddress; + undetectableLibraries: string[]; +} + +export type ExtendedContractInformation = ContractInformation & + LibraryInformation; + +export type LibraryToAddress = Record; + +export type SourceToLibraryToAddress = Record; + +export interface ByteOffset { + start: number; + length: number; +} + +export function getLibraryOffsets( + linkReferences: CompilerOutputBytecode["linkReferences"] = {} +): ByteOffset[] { + const offsets: ByteOffset[] = []; + for (const libraries of Object.values(linkReferences)) { + for (const libraryOffset of Object.values(libraries)) { + offsets.push(...libraryOffset); + } + } + return offsets; +} + +export function getImmutableOffsets( + immutableReferences: CompilerOutputBytecode["immutableReferences"] = {} +): ByteOffset[] { + const offsets: ByteOffset[] = []; + for (const immutableOffset of Object.values(immutableReferences)) { + offsets.push(...immutableOffset); + } + return offsets; +} + +/** + * To normalize a library object we need to take into account its call + * protection mechanism. + * See https://solidity.readthedocs.io/en/latest/contracts.html#call-protection-for-libraries + */ +export function getCallProtectionOffsets( + bytecode: string, + referenceBytecode: string +): ByteOffset[] { + const offsets: ByteOffset[] = []; + const addressSize = 20; + const push20OpcodeHex = "73"; + const pushPlaceholder = push20OpcodeHex + "0".repeat(addressSize * 2); + if ( + referenceBytecode.startsWith(pushPlaceholder) && + bytecode.startsWith(push20OpcodeHex) + ) { + offsets.push({ start: 1, length: addressSize }); + } + return offsets; +} + +/** + * Given a contract's fully qualified name, obtains the corresponding contract + * information from the build-info by comparing the provided bytecode with the + * deployed bytecode. If the bytecodes match, the function returns the contract + * information. Otherwise, it returns null. + */ +export function extractMatchingContractInformation( + contractFQN: string, + buildInfo: BuildInfo, + bytecode: Bytecode +): ContractInformation | null { + const { sourceName, contractName } = parseFullyQualifiedName(contractFQN); + const contractOutput = buildInfo.output.contracts[sourceName][contractName]; + // Normalize deployed bytecode according to this object + const compilerOutputDeployedBytecode = contractOutput.evm.deployedBytecode; + + if (bytecode.compare(compilerOutputDeployedBytecode)) { + return { + compilerInput: buildInfo.input, + solcLongVersion: buildInfo.solcLongVersion, + sourceName, + contractName, + contractOutput, + deployedBytecode: bytecode.stringify(), + }; + } + + return null; +} + +/** + * Searches through the artifacts for a contract that matches the given + * deployed bytecode. If it finds a match, the function returns the contract + * information. + */ +export async function extractInferredContractInformation( + artifacts: Artifacts, + network: Network, + matchingCompilerVersions: string[], + bytecode: Bytecode +): Promise { + const contractMatches = await lookupMatchingBytecode( + artifacts, + matchingCompilerVersions, + bytecode + ); + + if (contractMatches.length === 0) { + throw new DeployedBytecodeMismatchError(network.name); + } + + if (contractMatches.length > 1) { + const fqnMatches = contractMatches.map( + ({ sourceName, contractName }) => `${sourceName}:${contractName}` + ); + throw new DeployedBytecodeMultipleMatchesError(fqnMatches); + } + + return contractMatches[0]; +} + +/** + * Retrieves the libraries from the contract information and combines them + * with the libraries provided by the user. Returns a list containing all + * the libraries required by the contract. Additionally, it returns a list of + * undetectable libraries for debugging purposes. + */ +export async function getLibraryInformation( + contractInformation: ContractInformation, + userLibraries: LibraryToAddress +): Promise { + const allLibraries = getLibraryFQNames( + contractInformation.contractOutput.evm.bytecode.linkReferences + ); + const detectableLibraries = getLibraryFQNames( + contractInformation.contractOutput.evm.deployedBytecode.linkReferences + ); + const undetectableLibraries = allLibraries.filter( + (lib) => !detectableLibraries.some((detLib) => detLib === lib) + ); + + // Resolve and normalize library links given by user + const normalizedLibraries = await normalizeLibraries( + allLibraries, + detectableLibraries, + undetectableLibraries, + userLibraries, + contractInformation.contractName + ); + + const libraryAddresses = getLibraryAddressesFromBytecode( + contractInformation.contractOutput.evm.deployedBytecode.linkReferences, + contractInformation.deployedBytecode + ); + + const mergedLibraryLinks = mergeLibraries( + normalizedLibraries, + libraryAddresses + ); + + const mergedLibraries = getLibraryFQNames(mergedLibraryLinks); + if (mergedLibraries.length < allLibraries.length) { + throw new MissingLibrariesError( + `${contractInformation.sourceName}:${contractInformation.contractName}`, + allLibraries, + mergedLibraries, + undetectableLibraries + ); + } + + return { libraries: mergedLibraryLinks, undetectableLibraries }; +} + +async function lookupMatchingBytecode( + artifacts: Artifacts, + matchingCompilerVersions: string[], + bytecode: Bytecode +): Promise { + const contractMatches: ContractInformation[] = []; + const fqNames = await artifacts.getAllFullyQualifiedNames(); + + for (const fqName of fqNames) { + const buildInfo = await artifacts.getBuildInfo(fqName); + + if (buildInfo === undefined) { + continue; + } + + if ( + !matchingCompilerVersions.includes(buildInfo.solcVersion) && + // if OVM, we will not have matching compiler versions because we can't infer a specific OVM solc version from the bytecode + !bytecode.isOvm() + ) { + continue; + } + + const contractInformation = extractMatchingContractInformation( + fqName, + buildInfo, + bytecode + ); + if (contractInformation !== null) { + contractMatches.push(contractInformation); + } + } + + return contractMatches; +} + +function getLibraryFQNames( + libraries: CompilerOutputBytecode["linkReferences"] | SourceToLibraryToAddress +): string[] { + const libraryNames: string[] = []; + for (const [sourceName, sourceLibraries] of Object.entries(libraries)) { + for (const libraryName of Object.keys(sourceLibraries)) { + libraryNames.push(`${sourceName}:${libraryName}`); + } + } + + return libraryNames; +} + +async function normalizeLibraries( + allLibraries: string[], + detectableLibraries: string[], + undetectableLibraries: string[], + userLibraries: LibraryToAddress, + contractName: string +): Promise { + const { isAddress } = await import("@ethersproject/address"); + + const libraryFQNs: Set = new Set(); + const normalizedLibraries: SourceToLibraryToAddress = {}; + for (const [userLibName, userLibAddress] of Object.entries(userLibraries)) { + if (!isAddress(userLibAddress)) { + throw new InvalidLibraryAddressError( + contractName, + userLibName, + userLibAddress + ); + } + + const foundLibraryFQN = lookupLibrary( + allLibraries, + detectableLibraries, + undetectableLibraries, + userLibName, + contractName + ); + const { sourceName: foundLibSource, contractName: foundLibName } = + parseFullyQualifiedName(foundLibraryFQN); + + // The only way for this library to be already mapped is + // for it to be given twice in the libraries user input: + // once as a library name and another as a fully qualified library name. + if (libraryFQNs.has(foundLibraryFQN)) { + throw new DuplicatedLibraryError(foundLibName, foundLibraryFQN); + } + + libraryFQNs.add(foundLibraryFQN); + if (normalizedLibraries[foundLibSource] === undefined) { + normalizedLibraries[foundLibSource] = {}; + } + normalizedLibraries[foundLibSource][foundLibName] = userLibAddress; + } + + return normalizedLibraries; +} + +function lookupLibrary( + allLibraries: string[], + detectableLibraries: string[], + undetectableLibraries: string[], + userLibraryName: string, + contractName: string +): string { + const matchingLibraries = allLibraries.filter( + (lib) => lib === userLibraryName || lib.split(":")[1] === userLibraryName + ); + + if (matchingLibraries.length === 0) { + throw new LibraryNotFoundError( + contractName, + userLibraryName, + allLibraries, + detectableLibraries, + undetectableLibraries + ); + } + + if (matchingLibraries.length > 1) { + throw new LibraryMultipleMatchesError( + contractName, + userLibraryName, + matchingLibraries + ); + } + + const [foundLibraryFQN] = matchingLibraries; + return foundLibraryFQN; +} + +function getLibraryAddressesFromBytecode( + linkReferences: CompilerOutputBytecode["linkReferences"] = {}, + bytecode: string +): SourceToLibraryToAddress { + const sourceToLibraryToAddress: SourceToLibraryToAddress = {}; + for (const [sourceName, libs] of Object.entries(linkReferences)) { + if (sourceToLibraryToAddress[sourceName] === undefined) { + sourceToLibraryToAddress[sourceName] = {}; + } + for (const [libraryName, [{ start, length }]] of Object.entries(libs)) { + sourceToLibraryToAddress[sourceName][libraryName] = `0x${bytecode.slice( + start * 2, + (start + length) * 2 + )}`; + } + } + return sourceToLibraryToAddress; +} + +function mergeLibraries( + normalizedLibraries: SourceToLibraryToAddress, + detectedLibraries: SourceToLibraryToAddress +): SourceToLibraryToAddress { + const conflicts: Array<{ + library: string; + detectedAddress: string; + inputAddress: string; + }> = []; + for (const [sourceName, libraries] of Object.entries(normalizedLibraries)) { + for (const [libraryName, libraryAddress] of Object.entries(libraries)) { + if ( + sourceName in detectedLibraries && + libraryName in detectedLibraries[sourceName] + ) { + const detectedAddress = detectedLibraries[sourceName][libraryName]; + // Our detection logic encodes bytes into lowercase hex. + if (libraryAddress.toLowerCase() !== detectedAddress.toLowerCase()) { + conflicts.push({ + library: `${sourceName}:${libraryName}`, + detectedAddress, + inputAddress: libraryAddress, + }); + } + } + } + } + + if (conflicts.length > 0) { + throw new LibraryAddressesMismatchError(conflicts); + } + + // Actual merge function, used internally + const merge = ( + targetLibraries: SourceToLibraryToAddress, + newLibraries: SourceToLibraryToAddress + ) => { + for (const [sourceName, libraries] of Object.entries(newLibraries)) { + if (targetLibraries[sourceName] === undefined) { + targetLibraries[sourceName] = {}; + } + for (const [libraryName, libraryAddress] of Object.entries(libraries)) { + targetLibraries[sourceName][libraryName] = libraryAddress; + } + } + }; + const mergedLibraries: SourceToLibraryToAddress = {}; + merge(mergedLibraries, normalizedLibraries); + merge(mergedLibraries, detectedLibraries); + + return mergedLibraries; +} diff --git a/packages/hardhat-verify/src/internal/solc/bytecode.ts b/packages/hardhat-verify/src/internal/solc/bytecode.ts new file mode 100644 index 0000000000..6e68faaf35 --- /dev/null +++ b/packages/hardhat-verify/src/internal/solc/bytecode.ts @@ -0,0 +1,214 @@ +import type { CompilerOutputBytecode, EthereumProvider } from "hardhat/types"; + +import { DeployedBytecodeNotFoundError } from "../errors"; +import { + getMetadataSectionLength, + inferCompilerVersion, + METADATA_LENGTH, + MISSING_METADATA_VERSION_RANGE, + SOLC_NOT_FOUND_IN_METADATA_VERSION_RANGE, +} from "./metadata"; +import { + ByteOffset, + getCallProtectionOffsets, + getImmutableOffsets, + getLibraryOffsets, +} from "./artifacts"; + +// If the compiler output bytecode is OVM bytecode, we need to make a fix to account for a bug in some versions of +// the OVM compiler. The artifact’s deployedBytecode is incorrect, but because its bytecode (initcode) is correct, when we +// actually deploy contracts, the code that ends up getting stored on chain is also correct. During verification, +// Etherscan will compile the source code, pull out the artifact’s deployedBytecode, and then perform the +// below find and replace, then check that resulting output against the code retrieved on chain from eth_getCode. +// We define the strings for that find and replace here, and use them later so we can know if the bytecode matches +// before it gets to Etherscan. +// Source: https://github.com/ethereum-optimism/optimism/blob/8d67991aba584c1703692ea46273ea8a1ef45f56/packages/contracts/src/contract-dumps.ts#L195-L204 +const OVM_FIND_OPCODES = + "336000905af158601d01573d60011458600c01573d6000803e3d621234565260ea61109c52"; +const OVM_REPLACE_OPCODES = + "336000905af158600e01573d6000803e3d6000fd5b3d6001141558600a015760016000f35b"; + +export class Bytecode { + private _bytecode: string; + private _version: string; + private _executableSection: ByteOffset; + private _isOvm: boolean; + + constructor(bytecode: string) { + this._bytecode = bytecode; + + const bytecodeBuffer = Buffer.from(bytecode, "hex"); + this._version = inferCompilerVersion(bytecodeBuffer); + this._executableSection = { + start: 0, + length: bytecode.length - getMetadataSectionLength(bytecodeBuffer) * 2, + }; + + // Check if this is OVM bytecode by looking for the concatenation of the two opcodes defined here: + // https://github.com/ethereum-optimism/optimism/blob/33cb9025f5e463525d6abe67c8457f81a87c5a24/packages/contracts/contracts/optimistic-ethereum/OVM/execution/OVM_SafetyChecker.sol#L143 + // - This check would only fail if the EVM solidity compiler didn't use any of the following opcodes: https://github.com/ethereum-optimism/optimism/blob/c42fc0df2790a5319027393cb8fa34e4f7bb520f/packages/contracts/contracts/optimistic-ethereum/iOVM/execution/iOVM_ExecutionManager.sol#L94-L175 + // This is the list of opcodes that calls the OVM execution manager. But the current solidity + // compiler seems to add REVERT in all cases, meaning it currently won't happen and this check + // will always be correct. + // - It is possible, though very unlikely, that this string appears in the bytecode of an EVM + // contract. As a result result, this _isOvm flag should only be used after trying to infer + // the solc version + // - We need this check because OVM bytecode has no metadata, so when verifying + // OVM bytecode the check in `inferSolcVersion` will always return `MISSING_METADATA_VERSION_RANGE`. + this._isOvm = bytecode.includes(OVM_REPLACE_OPCODES); + } + + public static async getDeployedContractBytecode( + address: string, + provider: EthereumProvider, + network: string + ): Promise { + const response: string = await provider.send("eth_getCode", [ + address, + "latest", + ]); + const deployedBytecode = response.replace(/^0x/, ""); + + if (deployedBytecode === "") { + throw new DeployedBytecodeNotFoundError(address, network); + } + + return new Bytecode(deployedBytecode); + } + + public stringify() { + return this._bytecode; + } + + public getVersion() { + return this._version; + } + + public isOvm() { + return this._isOvm; + } + + public hasVersionRange(): boolean { + return ( + this._version === MISSING_METADATA_VERSION_RANGE || + this._version === SOLC_NOT_FOUND_IN_METADATA_VERSION_RANGE + ); + } + + public async getMatchingVersions(versions: string[]): Promise { + const semver = await import("semver"); + + const matchingCompilerVersions = versions.filter((version) => + semver.satisfies(version, this._version) + ); + + return matchingCompilerVersions; + } + + /** + * Compare the bytecode against a compiler's output bytecode, ignoring metadata. + */ + public compare( + compilerOutputDeployedBytecode: CompilerOutputBytecode + ): boolean { + // Ignore metadata since Etherscan performs a partial match. + // See: https://ethereum.org/es/developers/docs/smart-contracts/verifying/#etherscan + const executableSection = this._getExecutableSection(); + let referenceExecutableSection = inferExecutableSection( + compilerOutputDeployedBytecode.object + ); + + // If this is OVM bytecode, do the required find and replace (see above comments for more info) + if (this._isOvm) { + referenceExecutableSection = referenceExecutableSection + .split(OVM_FIND_OPCODES) + .join(OVM_REPLACE_OPCODES); + } + + if ( + executableSection.length !== referenceExecutableSection.length && + // OVM bytecode has no metadata so we ignore this comparison if operating on OVM bytecode + !this._isOvm + ) { + return false; + } + + const normalizedBytecode = nullifyBytecodeOffsets( + executableSection, + compilerOutputDeployedBytecode + ); + + // Library hash placeholders are embedded into the bytes where the library addresses are linked. + // We need to zero them out to compare them. + const normalizedReferenceBytecode = nullifyBytecodeOffsets( + referenceExecutableSection, + compilerOutputDeployedBytecode + ); + + if (normalizedBytecode === normalizedReferenceBytecode) { + return true; + } + + return false; + } + + private _getExecutableSection(): string { + const { start, length } = this._executableSection; + return this._bytecode.slice(start, length); + } +} + +function nullifyBytecodeOffsets( + bytecode: string, + { + object: referenceBytecode, + linkReferences, + immutableReferences, + }: CompilerOutputBytecode +): string { + const offsets = [ + ...getLibraryOffsets(linkReferences), + ...getImmutableOffsets(immutableReferences), + ...getCallProtectionOffsets(bytecode, referenceBytecode), + ]; + + for (const { start, length } of offsets) { + bytecode = [ + bytecode.slice(0, start * 2), + "0".repeat(length * 2), + bytecode.slice((start + length) * 2), + ].join(""); + } + + return bytecode; +} + +/** + * This function returns the executable section without actually + * decoding the whole bytecode string. + * + * This is useful because the runtime object emitted by the compiler + * may contain nonhexadecimal characters due to link placeholders. + */ +function inferExecutableSection(bytecode: string): string { + if (bytecode.startsWith("0x")) { + bytecode = bytecode.slice(2); + } + + // `Buffer.from` will return a buffer that contains bytes up until the last decodable byte. + // To work around this we'll just slice the relevant part of the bytecode. + const metadataLengthSlice = Buffer.from( + bytecode.slice(-METADATA_LENGTH * 2), + "hex" + ); + + // If, for whatever reason, the bytecode is so small that we can't even read two bytes off it, + // return the size of the entire bytecode. + if (metadataLengthSlice.length !== METADATA_LENGTH) { + return bytecode; + } + + const metadataSectionLength = getMetadataSectionLength(metadataLengthSlice); + + return bytecode.slice(0, bytecode.length - metadataSectionLength * 2); +} diff --git a/packages/hardhat-verify/src/internal/solc/metadata.ts b/packages/hardhat-verify/src/internal/solc/metadata.ts new file mode 100644 index 0000000000..445bd096da --- /dev/null +++ b/packages/hardhat-verify/src/internal/solc/metadata.ts @@ -0,0 +1,85 @@ +import type CborT from "cbor"; + +import debug from "debug"; +import util from "util"; + +export const METADATA_LENGTH = 2; +export const SOLC_NOT_FOUND_IN_METADATA_VERSION_RANGE = "0.4.7 - 0.5.8"; +export const MISSING_METADATA_VERSION_RANGE = "<0.4.7"; + +const log = debug("hardhat:hardhat-verify:metadata"); + +/** + * Try to infer the Solidity compiler version from the bytecode metadata. + * + * Not all compiler releases produce the same bytecode: + * Solc v0.4.7 was the first compiler to introduce metadata into the generated bytecode. + * See https://docs.soliditylang.org/en/v0.4.7/miscellaneous.html#contract-metadata + * Solc v0.4.26, the last release for the v0.4 series, does not feature the compiler version in its emitted metadata. + * See https://docs.soliditylang.org/en/v0.4.26/metadata.html#encoding-of-the-metadata-hash-in-the-bytecode + * Solc v0.5.9 was the first compiler to introduce its version into the metadata. + * See https://docs.soliditylang.org/en/v0.5.9/metadata.html#encoding-of-the-metadata-hash-in-the-bytecode + * Solc v0.6.0 features compiler version metadata. + * See https://docs.soliditylang.org/en/v0.6.0/metadata.html#encoding-of-the-metadata-hash-in-the-bytecode + */ +export function inferCompilerVersion(bytecode: Buffer): string { + let solcMetadata; + try { + solcMetadata = decodeSolcMetadata(bytecode); + } catch { + // The decoding failed. Unfortunately, our only option is to assume that this bytecode was emitted by an old version. + // Technically, this bytecode could have been emitted by a compiler for another language altogether. + log("Could not decode metadata."); + return MISSING_METADATA_VERSION_RANGE; + } + + if (solcMetadata instanceof Buffer) { + if (solcMetadata.length === 3) { + const [major, minor, patch] = solcMetadata; + const solcVersion = `${major}.${minor}.${patch}`; + log(`Solc version detected in bytecode: ${solcVersion}`); + return solcVersion; + } + // probably unreachable + log( + `Found solc version field with ${solcMetadata.length} elements instead of three!` + ); + } + + // The embedded metadata was successfully decoded but there was no solc version in it. + log(`Could not detect solidity version in metadata.`); + return SOLC_NOT_FOUND_IN_METADATA_VERSION_RANGE; +} + +export function getMetadataSectionLength(bytecode: Buffer): number { + return bytecode.slice(-METADATA_LENGTH).readUInt16BE(0) + METADATA_LENGTH; +} + +/** + * Decode the bytecode metadata and return the solc version. + */ +function decodeSolcMetadata(bytecode: Buffer): any { + const { decodeFirstSync } = require("cbor") as typeof CborT; + + const metadataSectionLength = getMetadataSectionLength(bytecode); + // The metadata and its length are in the last few bytes of the bytecode. + const metadataPayload = bytecode.slice( + -metadataSectionLength, + -METADATA_LENGTH + ); + + log(`Read metadata length ${metadataSectionLength}`); + + const lastMetadataBytes = metadataPayload.slice(-100); + log( + `Last ${ + lastMetadataBytes.length + } bytes of metadata: ${lastMetadataBytes.toString("hex")}` + ); + + const decodedMetadata = decodeFirstSync(metadataPayload, { required: true }); + + log(`Metadata decoded: ${util.inspect(decodedMetadata)}`); + + return decodedMetadata.solc; +} diff --git a/packages/hardhat-verify/src/internal/sourcify.ts b/packages/hardhat-verify/src/internal/sourcify.ts new file mode 100644 index 0000000000..1e9e75dc2f --- /dev/null +++ b/packages/hardhat-verify/src/internal/sourcify.ts @@ -0,0 +1,175 @@ +import type { + SourcifyIsVerifiedResponse, + SourcifyVerifyResponse, +} from "./sourcify.types"; + +import { + ContractVerificationInvalidStatusCodeError, + UnexpectedError, +} from "./errors"; +import { isSuccessStatusCode, sendGetRequest, sendPostRequest } from "./undici"; +import { ContractStatus } from "./sourcify.types"; +import { ValidationResponse } from "./utilities"; + +export class Sourcify { + constructor( + public chainId: number, + public apiUrl: string, + public browserUrl: string + ) {} + + // https://sourcify.dev/server/api-docs/#/Repository/get_check_all_by_addresses + public async isVerified(address: string) { + const parameters = new URLSearchParams({ + addresses: address, + chainIds: `${this.chainId}`, + }); + + const url = new URL(`${this.apiUrl}/check-all-by-addresses`); + url.search = parameters.toString(); + + try { + const response = await sendGetRequest(url); + const json = (await response.body.json()) as SourcifyIsVerifiedResponse[]; + + if (!isSuccessStatusCode(response.statusCode)) { + throw new ContractVerificationInvalidStatusCodeError( + url.toString(), + response.statusCode, + JSON.stringify(json) + ); + } + + if (!Array.isArray(json)) { + throw new Error(`Unexpected response body: ${JSON.stringify(json)}`); + } + + const contract = json.find( + (match) => match.address.toLowerCase() === address.toLowerCase() + ); + if (contract === undefined) { + return false; + } + + if ( + "status" in contract && + contract.status === ContractStatus.NOT_FOUND + ) { + return false; + } + + if ("chainIds" in contract && contract.chainIds.length === 1) { + const { status } = contract.chainIds[0]; + if ( + status === ContractStatus.PERFECT || + status === ContractStatus.PARTIAL + ) { + return status; + } + } + + throw new Error(`Unexpected response body: ${JSON.stringify(json)}`); + } catch (e) { + if (e instanceof ContractVerificationInvalidStatusCodeError) { + throw e; + } + throw new UnexpectedError(e, "Sourcify.isVerified"); + } + } + + // https://sourcify.dev/server/api-docs/#/Stateless%20Verification/post_verify + public async verify( + address: string, + files: Record, + chosenContract?: number + ): Promise { + const parameters: any = { + address, + files, + chain: `${this.chainId}`, + }; + + if (chosenContract !== undefined) { + parameters.chosenContract = `${chosenContract}`; + } + + const url = new URL(this.apiUrl); + try { + const response = await sendPostRequest(url, JSON.stringify(parameters), { + "Content-Type": "application/json", + }); + const json = (await response.body.json()) as SourcifyVerifyResponse; + + if (!isSuccessStatusCode(response.statusCode)) { + throw new ContractVerificationInvalidStatusCodeError( + url.toString(), + response.statusCode, + JSON.stringify(json) + ); + } + + const sourcifyResponse = new SourcifyResponse(json); + + if (!sourcifyResponse.isOk()) { + throw new Error(`Verify response is not ok: ${JSON.stringify(json)}`); + } + + return sourcifyResponse; + } catch (e) { + if (e instanceof ContractVerificationInvalidStatusCodeError) { + throw e; + } + throw new UnexpectedError(e, "Sourcify.verify"); + } + } + + public getContractUrl( + address: string, + contractStatus: ContractStatus.PERFECT | ContractStatus.PARTIAL + ) { + const matchType = + contractStatus === ContractStatus.PERFECT + ? "full_match" + : "partial_match"; + return `${this.browserUrl}/contracts/${matchType}/${this.chainId}/${address}/`; + } +} + +class SourcifyResponse implements ValidationResponse { + public readonly error: string | undefined; + public readonly status: + | ContractStatus.PERFECT + | ContractStatus.PARTIAL + | undefined; + + constructor(response: SourcifyVerifyResponse) { + if ("error" in response) { + this.error = response.error; + } else if (response.result[0].status === ContractStatus.PERFECT) { + this.status = ContractStatus.PERFECT; + } else if (response.result[0].status === ContractStatus.PARTIAL) { + this.status = ContractStatus.PARTIAL; + } + } + + public isPending() { + return false; + } + + public isFailure() { + return this.error !== undefined; + } + + public isSuccess() { + return this.error === undefined; + } + + public isOk(): this is { + status: ContractStatus.PERFECT | ContractStatus.PARTIAL; + } { + return ( + this.status === ContractStatus.PERFECT || + this.status === ContractStatus.PARTIAL + ); + } +} diff --git a/packages/hardhat-verify/src/internal/sourcify.types.ts b/packages/hardhat-verify/src/internal/sourcify.types.ts new file mode 100644 index 0000000000..acf09387b3 --- /dev/null +++ b/packages/hardhat-verify/src/internal/sourcify.types.ts @@ -0,0 +1,40 @@ +export enum ContractStatus { + PERFECT = "perfect", + PARTIAL = "partial", + NOT_FOUND = "false", +} + +interface SourcifyIsVerifiedNotOkResponse { + address: string; + status: ContractStatus.NOT_FOUND; +} + +interface SourcifyIsVerifiedOkResponse { + address: string; + chainIds: Array<{ + chainId: string; + status: ContractStatus.PERFECT | ContractStatus.PARTIAL; + }>; +} + +export type SourcifyIsVerifiedResponse = + | SourcifyIsVerifiedNotOkResponse + | SourcifyIsVerifiedOkResponse; + +interface SourcifyVerifyNotOkResponse { + error: string; +} + +interface SourcifyVerifyOkResponse { + result: Array<{ + address: string; + chainId: string; + status: string; + message?: string; + libraryMap?: Record; + }>; +} + +export type SourcifyVerifyResponse = + | SourcifyVerifyNotOkResponse + | SourcifyVerifyOkResponse; diff --git a/packages/hardhat-verify/src/internal/task-names.ts b/packages/hardhat-verify/src/internal/task-names.ts new file mode 100644 index 0000000000..5557ffc1df --- /dev/null +++ b/packages/hardhat-verify/src/internal/task-names.ts @@ -0,0 +1,26 @@ +export const TASK_VERIFY = "verify"; +export const TASK_VERIFY_GET_VERIFICATION_SUBTASKS = + "verify:get-verification-subtasks"; +export const TASK_VERIFY_VERIFY = "verify:verify"; +export const TASK_VERIFY_PRINT_SUPPORTED_NETWORKS = + "verify:print-supported-networks"; +export const TASK_VERIFY_GET_CONTRACT_INFORMATION = + "verify:get-contract-information"; + +// Etherscan +export const TASK_VERIFY_ETHERSCAN = "verify:etherscan"; +export const TASK_VERIFY_ETHERSCAN_RESOLVE_ARGUMENTS = + "verify:etherscan-resolve-arguments"; +export const TASK_VERIFY_ETHERSCAN_GET_MINIMAL_INPUT = + "verify:etherscan-get-minimal-input"; +export const TASK_VERIFY_ETHERSCAN_ATTEMPT_VERIFICATION = + "verify:etherscan-attempt-verification"; + +// Sourcify +export const TASK_VERIFY_SOURCIFY = "verify:sourcify"; +export const TASK_VERIFY_SOURCIFY_RESOLVE_ARGUMENTS = + "verify:sourcify-resolve-arguments"; +export const TASK_VERIFY_SOURCIFY_ATTEMPT_VERIFICATION = + "verify:sourcify-attempt-verification"; +export const TASK_VERIFY_SOURCIFY_DISABLED_WARNING = + "verify:sourcify-disabled-warning"; diff --git a/packages/hardhat-verify/src/internal/tasks/etherscan.ts b/packages/hardhat-verify/src/internal/tasks/etherscan.ts new file mode 100644 index 0000000000..99448ff01d --- /dev/null +++ b/packages/hardhat-verify/src/internal/tasks/etherscan.ts @@ -0,0 +1,336 @@ +import type LodashCloneDeepT from "lodash.clonedeep"; +import type { + CompilerInput, + DependencyGraph, + CompilationJob, +} from "hardhat/types"; +import type { VerificationResponse, VerifyTaskArgs } from "../.."; +import type { + LibraryToAddress, + ExtendedContractInformation, +} from "../solc/artifacts"; + +import { subtask, types } from "hardhat/config"; +import { + TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, + TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE, + TASK_COMPILE_SOLIDITY_GET_COMPILER_INPUT, +} from "hardhat/builtin-tasks/task-names"; +import { isFullyQualifiedName } from "hardhat/utils/contract-names"; + +import { + CompilerVersionsMismatchError, + ContractVerificationFailedError, + MissingAddressError, + InvalidAddressError, + InvalidContractNameError, + UnexpectedNumberOfFilesError, + VerificationAPIUnexpectedMessageError, +} from "../errors"; +import { Etherscan } from "../etherscan"; +import { Bytecode } from "../solc/bytecode"; +import { + TASK_VERIFY_ETHERSCAN, + TASK_VERIFY_ETHERSCAN_RESOLVE_ARGUMENTS, + TASK_VERIFY_ETHERSCAN_GET_MINIMAL_INPUT, + TASK_VERIFY_ETHERSCAN_ATTEMPT_VERIFICATION, + TASK_VERIFY_GET_CONTRACT_INFORMATION, +} from "../task-names"; +import { + getCompilerVersions, + encodeArguments, + resolveConstructorArguments, + resolveLibraries, + sleep, +} from "../utilities"; + +// parsed verification args +interface VerificationArgs { + address: string; + constructorArgs: string[]; + libraries: LibraryToAddress; + contractFQN?: string; +} + +interface GetMinimalInputArgs { + sourceName: string; +} + +interface AttemptVerificationArgs { + address: string; + compilerInput: CompilerInput; + contractInformation: ExtendedContractInformation; + verificationInterface: Etherscan; + encodedConstructorArguments: string; +} + +/** + * Main Etherscan verification subtask. + * + * Verifies a contract in Etherscan by coordinating various subtasks related + * to contract verification. + */ +subtask(TASK_VERIFY_ETHERSCAN) + .addParam("address") + .addOptionalParam("constructorArgsParams", undefined, undefined, types.any) + .addOptionalParam("constructorArgs") + // TODO: [remove-verify-subtask] change to types.inputFile + .addOptionalParam("libraries", undefined, undefined, types.any) + .addOptionalParam("contract") + .setAction(async (taskArgs: VerifyTaskArgs, { config, network, run }) => { + const { + address, + constructorArgs, + libraries, + contractFQN, + }: VerificationArgs = await run( + TASK_VERIFY_ETHERSCAN_RESOLVE_ARGUMENTS, + taskArgs + ); + + const chainConfig = await Etherscan.getCurrentChainConfig( + network.name, + network.provider, + config.etherscan.customChains + ); + + const etherscan = Etherscan.fromChainConfig( + config.etherscan.apiKey, + chainConfig + ); + + const isVerified = await etherscan.isVerified(address); + if (isVerified) { + const contractURL = etherscan.getContractUrl(address); + console.log(`The contract ${address} has already been verified on Etherscan. +${contractURL}`); + return; + } + + const configCompilerVersions = await getCompilerVersions(config.solidity); + + const deployedBytecode = await Bytecode.getDeployedContractBytecode( + address, + network.provider, + network.name + ); + + const matchingCompilerVersions = await deployedBytecode.getMatchingVersions( + configCompilerVersions + ); + // don't error if the bytecode appears to be OVM bytecode, because we can't infer a specific OVM solc version from the bytecode + if (matchingCompilerVersions.length === 0 && !deployedBytecode.isOvm()) { + throw new CompilerVersionsMismatchError( + configCompilerVersions, + deployedBytecode.getVersion(), + network.name + ); + } + + const contractInformation: ExtendedContractInformation = await run( + TASK_VERIFY_GET_CONTRACT_INFORMATION, + { + contractFQN, + deployedBytecode, + matchingCompilerVersions, + libraries, + } + ); + + const minimalInput: CompilerInput = await run( + TASK_VERIFY_ETHERSCAN_GET_MINIMAL_INPUT, + { + sourceName: contractInformation.sourceName, + } + ); + + const encodedConstructorArguments = await encodeArguments( + contractInformation.contractOutput.abi, + contractInformation.sourceName, + contractInformation.contractName, + constructorArgs + ); + + // First, try to verify the contract using the minimal input + const { success: minimalInputVerificationSuccess }: VerificationResponse = + await run(TASK_VERIFY_ETHERSCAN_ATTEMPT_VERIFICATION, { + address, + compilerInput: minimalInput, + contractInformation, + verificationInterface: etherscan, + encodedConstructorArguments, + }); + + if (minimalInputVerificationSuccess) { + return; + } + + console.log(`We tried verifying your contract ${contractInformation.contractName} without including any unrelated one, but it failed. +Trying again with the full solc input used to compile and deploy it. +This means that unrelated contracts may be displayed on Etherscan... +`); + + // If verifying with the minimal input failed, try again with the full compiler input + const { + success: fullCompilerInputVerificationSuccess, + message: verificationMessage, + }: VerificationResponse = await run( + TASK_VERIFY_ETHERSCAN_ATTEMPT_VERIFICATION, + { + address, + compilerInput: contractInformation.compilerInput, + contractInformation, + verificationInterface: etherscan, + encodedConstructorArguments, + } + ); + + if (fullCompilerInputVerificationSuccess) { + return; + } + + throw new ContractVerificationFailedError( + verificationMessage, + contractInformation.undetectableLibraries + ); + }); + +subtask(TASK_VERIFY_ETHERSCAN_RESOLVE_ARGUMENTS) + .addOptionalParam("address") + .addOptionalParam("constructorArgsParams", undefined, [], types.any) + .addOptionalParam("constructorArgs", undefined, undefined, types.inputFile) + // TODO: [remove-verify-subtask] change to types.inputFile + .addOptionalParam("libraries", undefined, undefined, types.any) + .addOptionalParam("contract") + .setAction( + async ({ + address, + constructorArgsParams, + constructorArgs: constructorArgsModule, + contract, + libraries: librariesModule, + }: VerifyTaskArgs): Promise => { + if (address === undefined) { + throw new MissingAddressError(); + } + + const { isAddress } = await import("@ethersproject/address"); + if (!isAddress(address)) { + throw new InvalidAddressError(address); + } + + if (contract !== undefined && !isFullyQualifiedName(contract)) { + throw new InvalidContractNameError(contract); + } + + const constructorArgs = await resolveConstructorArguments( + constructorArgsParams, + constructorArgsModule + ); + + // TODO: [remove-verify-subtask] librariesModule should always be string + let libraries; + if (typeof librariesModule === "object") { + libraries = librariesModule; + } else { + libraries = await resolveLibraries(librariesModule); + } + + return { + address, + constructorArgs, + libraries, + contractFQN: contract, + }; + } + ); + +subtask(TASK_VERIFY_ETHERSCAN_GET_MINIMAL_INPUT) + .addParam("sourceName") + .setAction(async ({ sourceName }: GetMinimalInputArgs, { run }) => { + const cloneDeep = require("lodash.clonedeep") as typeof LodashCloneDeepT; + const dependencyGraph: DependencyGraph = await run( + TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, + { sourceNames: [sourceName] } + ); + + const resolvedFiles = dependencyGraph + .getResolvedFiles() + .filter((resolvedFile) => resolvedFile.sourceName === sourceName); + + if (resolvedFiles.length !== 1) { + throw new UnexpectedNumberOfFilesError(); + } + + const compilationJob: CompilationJob = await run( + TASK_COMPILE_SOLIDITY_GET_COMPILATION_JOB_FOR_FILE, + { + dependencyGraph, + file: resolvedFiles[0], + } + ); + + const minimalInput: CompilerInput = await run( + TASK_COMPILE_SOLIDITY_GET_COMPILER_INPUT, + { + compilationJob, + } + ); + + return cloneDeep(minimalInput); + }); + +subtask(TASK_VERIFY_ETHERSCAN_ATTEMPT_VERIFICATION) + .addParam("address") + .addParam("compilerInput", undefined, undefined, types.any) + .addParam("contractInformation", undefined, undefined, types.any) + .addParam("verificationInterface", undefined, undefined, types.any) + .addParam("encodedConstructorArguments") + .setAction( + async ({ + address, + compilerInput, + contractInformation, + verificationInterface, + encodedConstructorArguments, + }: AttemptVerificationArgs): Promise => { + // Ensure the linking information is present in the compiler input; + compilerInput.settings.libraries = contractInformation.libraries; + + const { message: guid } = await verificationInterface.verify( + address, + JSON.stringify(compilerInput), + `${contractInformation.sourceName}:${contractInformation.contractName}`, + `v${contractInformation.solcLongVersion}`, + encodedConstructorArguments + ); + + console.log(`Successfully submitted source code for contract +${contractInformation.sourceName}:${contractInformation.contractName} at ${address} +for verification on the block explorer. Waiting for verification result... +`); + + // Compilation is bound to take some time so there's no sense in requesting status immediately. + await sleep(700); + const verificationStatus = + await verificationInterface.getVerificationStatus(guid); + + if (!(verificationStatus.isFailure() || verificationStatus.isSuccess())) { + // Reaching this point shouldn't be possible unless the API is behaving in a new way. + throw new VerificationAPIUnexpectedMessageError( + verificationStatus.message + ); + } + + if (verificationStatus.isSuccess()) { + const contractURL = verificationInterface.getContractUrl(address); + console.log(`Successfully verified contract ${contractInformation.contractName} on the block explorer. +${contractURL}\n`); + } + + return { + success: verificationStatus.isSuccess(), + message: verificationStatus.message, + }; + } + ); diff --git a/packages/hardhat-verify/src/internal/tasks/sourcify.ts b/packages/hardhat-verify/src/internal/tasks/sourcify.ts new file mode 100644 index 0000000000..93f9d8632b --- /dev/null +++ b/packages/hardhat-verify/src/internal/tasks/sourcify.ts @@ -0,0 +1,240 @@ +import type { VerificationResponse, VerifyTaskArgs } from "../.."; +import type { + ExtendedContractInformation, + LibraryToAddress, +} from "../solc/artifacts"; + +import chalk from "chalk"; +import { subtask, types } from "hardhat/config"; +import { isFullyQualifiedName } from "hardhat/utils/contract-names"; +import { HARDHAT_NETWORK_NAME } from "hardhat/plugins"; + +import { Sourcify } from "../sourcify"; +import { + CompilerVersionsMismatchError, + ContractVerificationFailedError, + HardhatNetworkNotSupportedError, + HardhatVerifyError, + InvalidAddressError, + InvalidContractNameError, + MissingAddressError, +} from "../errors"; +import { + TASK_VERIFY_SOURCIFY, + TASK_VERIFY_SOURCIFY_RESOLVE_ARGUMENTS, + TASK_VERIFY_GET_CONTRACT_INFORMATION, + TASK_VERIFY_SOURCIFY_ATTEMPT_VERIFICATION, + TASK_VERIFY_SOURCIFY_DISABLED_WARNING, +} from "../task-names"; +import { getCompilerVersions, resolveLibraries } from "../utilities"; +import { Bytecode } from "../solc/bytecode"; + +// parsed verification args +interface VerificationArgs { + address: string; + libraries: LibraryToAddress; + contractFQN?: string; +} + +interface AttemptVerificationArgs { + address: string; + verificationInterface: Sourcify; + contractInformation: ExtendedContractInformation; +} + +/** + * Main Sourcify verification subtask. + * + * Verifies a contract in Sourcify by coordinating various subtasks related + * to contract verification. + */ +subtask(TASK_VERIFY_SOURCIFY) + .addParam("address") + .addOptionalParam("contract") + // TODO: [remove-verify-subtask] change to types.inputFile + .addOptionalParam("libraries", undefined, undefined, types.any) + .setAction(async (taskArgs: VerifyTaskArgs, { config, network, run }) => { + const { address, libraries, contractFQN }: VerificationArgs = await run( + TASK_VERIFY_SOURCIFY_RESOLVE_ARGUMENTS, + taskArgs + ); + + if (network.name === HARDHAT_NETWORK_NAME) { + throw new HardhatNetworkNotSupportedError(); + } + + const currentChainId = parseInt( + await network.provider.send("eth_chainId"), + 16 + ); + + const { apiUrl, browserUrl } = config.sourcify; + + if (apiUrl === undefined) { + throw new HardhatVerifyError("Sourcify `apiUrl` is not defined"); + } + + if (browserUrl === undefined) { + throw new HardhatVerifyError("Sourcify `browserUrl` is not defined"); + } + + const sourcify = new Sourcify(currentChainId, apiUrl, browserUrl); + + const status = await sourcify.isVerified(address); + if (status !== false) { + const contractURL = sourcify.getContractUrl(address, status); + console.log(`The contract ${address} has already been verified on Sourcify. +${contractURL}`); + return; + } + + const configCompilerVersions = await getCompilerVersions(config.solidity); + + const deployedBytecode = await Bytecode.getDeployedContractBytecode( + address, + network.provider, + network.name + ); + + const matchingCompilerVersions = await deployedBytecode.getMatchingVersions( + configCompilerVersions + ); + // don't error if the bytecode appears to be OVM bytecode, because we can't infer a specific OVM solc version from the bytecode + if (matchingCompilerVersions.length === 0 && !deployedBytecode.isOvm()) { + throw new CompilerVersionsMismatchError( + configCompilerVersions, + deployedBytecode.getVersion(), + network.name + ); + } + + const contractInformation: ExtendedContractInformation = await run( + TASK_VERIFY_GET_CONTRACT_INFORMATION, + { + contractFQN, + deployedBytecode, + matchingCompilerVersions, + libraries, + } + ); + + const { + success: verificationSuccess, + message: verificationMessage, + }: VerificationResponse = await run( + TASK_VERIFY_SOURCIFY_ATTEMPT_VERIFICATION, + { + address, + verificationInterface: sourcify, + contractInformation, + } + ); + + if (verificationSuccess) { + return; + } + + throw new ContractVerificationFailedError( + verificationMessage, + contractInformation.undetectableLibraries + ); + }); + +subtask(TASK_VERIFY_SOURCIFY_RESOLVE_ARGUMENTS) + .addOptionalParam("address") + .addOptionalParam("contract") + // TODO: [remove-verify-subtask] change to types.inputFile + .addOptionalParam("libraries", undefined, undefined, types.any) + .setAction( + async ({ + address, + contract, + libraries: librariesModule, + }: VerifyTaskArgs): Promise => { + if (address === undefined) { + throw new MissingAddressError(); + } + + const { isAddress } = await import("@ethersproject/address"); + if (!isAddress(address)) { + throw new InvalidAddressError(address); + } + + if (contract !== undefined && !isFullyQualifiedName(contract)) { + throw new InvalidContractNameError(contract); + } + + // TODO: [remove-verify-subtask] librariesModule should always be string + let libraries; + if (typeof librariesModule === "object") { + libraries = librariesModule; + } else { + libraries = await resolveLibraries(librariesModule); + } + + return { + address, + libraries, + contractFQN: contract, + }; + } + ); + +subtask(TASK_VERIFY_SOURCIFY_ATTEMPT_VERIFICATION) + .addParam("address") + .addParam("contractInformation", undefined, undefined, types.any) + .addParam("verificationInterface", undefined, undefined, types.any) + .setAction( + async ({ + address, + verificationInterface, + contractInformation, + }: AttemptVerificationArgs): Promise => { + const { sourceName, contractName, contractOutput, compilerInput } = + contractInformation; + + const librarySourcesToContent = Object.keys( + contractInformation.libraries + ).reduce((acc: Record, libSourceName) => { + const libContent = compilerInput.sources[libSourceName].content; + acc[libSourceName] = libContent; + return acc; + }, {}); + + const response = await verificationInterface.verify(address, { + "metadata.json": (contractOutput as any).metadata, + [sourceName]: compilerInput.sources[sourceName].content, + ...librarySourcesToContent, + }); + + if (response.isOk()) { + const contractURL = verificationInterface.getContractUrl( + address, + response.status + ); + console.log(`Successfully verified contract ${contractName} on Sourcify. +${contractURL}`); + } + + return { + success: response.isSuccess(), + message: "Contract successfuly verified on Sourcify", + }; + } + ); + +subtask(TASK_VERIFY_SOURCIFY_DISABLED_WARNING, async () => { + console.info( + chalk.cyan( + `[INFO] Sourcify Verification Skipped: Sourcify verification is currently disabled. To enable it, add the following entry to your Hardhat configuration: + +sourcify: { + enabled: true +} + +Or set 'enabled' to false to hide this message. + +For more information, visit https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify#verifying-on-sourcify` + ) + ); +}); diff --git a/packages/hardhat-verify/src/internal/type-extensions.ts b/packages/hardhat-verify/src/internal/type-extensions.ts new file mode 100644 index 0000000000..df43cdd28d --- /dev/null +++ b/packages/hardhat-verify/src/internal/type-extensions.ts @@ -0,0 +1,15 @@ +import type { EtherscanConfig, SourcifyConfig } from "../types"; + +import "hardhat/types/config"; + +declare module "hardhat/types/config" { + interface HardhatUserConfig { + etherscan?: Partial; + sourcify?: Partial; + } + + interface HardhatConfig { + etherscan: EtherscanConfig; + sourcify: SourcifyConfig; + } +} diff --git a/packages/hardhat-verify/src/internal/undici.ts b/packages/hardhat-verify/src/internal/undici.ts new file mode 100644 index 0000000000..a25acc8966 --- /dev/null +++ b/packages/hardhat-verify/src/internal/undici.ts @@ -0,0 +1,43 @@ +import type * as Undici from "undici"; + +export async function sendGetRequest( + url: URL +): Promise { + const { request } = await import("undici"); + const dispatcher = getDispatcher(); + + return request(url, { + dispatcher, + method: "GET", + }); +} + +export async function sendPostRequest( + url: URL, + body: string, + headers: Record = {} +): Promise { + const { request } = await import("undici"); + const dispatcher = getDispatcher(); + + return request(url, { + dispatcher, + method: "POST", + headers, + body, + }); +} + +function getDispatcher(): Undici.Dispatcher { + const { ProxyAgent, getGlobalDispatcher } = + require("undici") as typeof Undici; + if (process.env.http_proxy !== undefined) { + return new ProxyAgent(process.env.http_proxy); + } + + return getGlobalDispatcher(); +} + +export function isSuccessStatusCode(statusCode: number): boolean { + return statusCode >= 200 && statusCode <= 299; +} diff --git a/packages/hardhat-verify/src/internal/utilities.ts b/packages/hardhat-verify/src/internal/utilities.ts new file mode 100644 index 0000000000..24ee02edf4 --- /dev/null +++ b/packages/hardhat-verify/src/internal/utilities.ts @@ -0,0 +1,257 @@ +import type { JsonFragment } from "@ethersproject/abi"; +import type { SolidityConfig } from "hardhat/types"; +import type { ChainConfig } from "../types"; + +import chalk from "chalk"; +import path from "path"; +import { builtinChains } from "./chain-config"; +import { + ABIArgumentLengthError, + ABIArgumentOverflowError, + ABIArgumentTypeError, + EtherscanVersionNotSupportedError, + ExclusiveConstructorArgumentsError, + HardhatVerifyError, + ImportingModuleError, + InvalidConstructorArgumentsModuleError, + InvalidLibrariesModuleError, +} from "./errors"; + +import { LibraryToAddress } from "./solc/artifacts"; +import { + isABIArgumentLengthError, + isABIArgumentOverflowError, + isABIArgumentTypeError, +} from "./abi-validation-extras"; + +export async function sleep(ms: number): Promise { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +/** + * Prints a table of networks supported by hardhat-verify, including both + * built-in and custom networks. + */ +export async function printSupportedNetworks( + customChains: ChainConfig[] +): Promise { + const { table } = await import("table"); + + // supported networks + const supportedNetworks = builtinChains.map(({ network, chainId }) => [ + network, + chainId, + ]); + + const supportedNetworksTable = table([ + [chalk.bold("network"), chalk.bold("chain id")], + ...supportedNetworks, + ]); + + // custom networks + const customNetworks = customChains.map(({ network, chainId }) => [ + network, + chainId, + ]); + + const customNetworksTable = + customNetworks.length > 0 + ? table([ + [chalk.bold("network"), chalk.bold("chain id")], + ...customNetworks, + ]) + : table([["No custom networks were added"]]); + + // print message + console.log( + ` +Networks supported by hardhat-verify: + +${supportedNetworksTable} + +Custom networks added by you or by plugins: + +${customNetworksTable} + +To learn how to add custom networks, follow these instructions: https://hardhat.org/verify-custom-networks +`.trimStart() + ); +} + +/** + * Prints verification errors to the console. + * @param errors - An object containing verification errors, where the keys + * are the names of verification subtasks and the values are HardhatVerifyError + * objects describing the specific errors. + * @remarks This function formats and logs the verification errors to the + * console with a red color using chalk. Each error is displayed along with the + * name of the verification provider it belongs to. + * @example + * const errors: Record = { + * verify:etherscan: { message: 'Error message for Etherscan' }, + * verify:sourcify: { message: 'Error message for Sourcify' }, + * // Add more errors here... + * }; + * printVerificationErrors(errors); + * // Output: + * // hardhat-verify found one or more errors during the verification process: + * // + * // Etherscan: + * // Error message for Etherscan + * // + * // Sourcify: + * // Error message for Sourcify + * // + * // ... (more errors if present) + */ +export function printVerificationErrors( + errors: Record +) { + let errorMessage = + "hardhat-verify found one or more errors during the verification process:\n\n"; + + for (const [subtaskLabel, error] of Object.entries(errors)) { + errorMessage += `${subtaskLabel}:\n${error.message}\n\n`; + } + + console.error(chalk.red(errorMessage)); +} + +/** + * Returns the list of constructor arguments from the constructorArgsModule + * or the constructorArgsParams if the first is not defined. + */ +export async function resolveConstructorArguments( + constructorArgsParams: string[], + constructorArgsModule?: string +): Promise { + if (constructorArgsModule === undefined) { + return constructorArgsParams; + } + + if (constructorArgsParams.length > 0) { + throw new ExclusiveConstructorArgumentsError(); + } + + const constructorArgsModulePath = path.resolve( + process.cwd(), + constructorArgsModule + ); + + try { + const constructorArguments = (await import(constructorArgsModulePath)) + .default; + + if (!Array.isArray(constructorArguments)) { + throw new InvalidConstructorArgumentsModuleError( + constructorArgsModulePath + ); + } + + return constructorArguments; + } catch (error: any) { + throw new ImportingModuleError("constructor arguments list", error); + } +} + +/** + * Returns a dictionary of library addresses from the librariesModule or + * an empty object if not defined. + */ +export async function resolveLibraries( + librariesModule?: string +): Promise { + if (librariesModule === undefined) { + return {}; + } + + const librariesModulePath = path.resolve(process.cwd(), librariesModule); + + try { + const libraries = (await import(librariesModulePath)).default; + + if (typeof libraries !== "object" || Array.isArray(libraries)) { + throw new InvalidLibrariesModuleError(librariesModulePath); + } + + return libraries; + } catch (error: any) { + throw new ImportingModuleError("libraries dictionary", error); + } +} + +/** + * Retrieves the list of Solidity compiler versions for a given Solidity + * configuration. + * It checks that the versions are supported by Etherscan, and throws an + * error if any are not. + */ +export async function getCompilerVersions({ + compilers, + overrides, +}: SolidityConfig): Promise { + { + const compilerVersions = compilers.map(({ version }) => version); + if (overrides !== undefined) { + for (const { version } of Object.values(overrides)) { + compilerVersions.push(version); + } + } + + // Etherscan only supports solidity versions higher than or equal to v0.4.11. + // See https://etherscan.io/solcversions + const supportedSolcVersionRange = ">=0.4.11"; + const semver = await import("semver"); + if ( + compilerVersions.some( + (version) => !semver.satisfies(version, supportedSolcVersionRange) + ) + ) { + throw new EtherscanVersionNotSupportedError(); + } + + return compilerVersions; + } +} + +/** + * Encodes the constructor arguments for a given contract. + */ +export async function encodeArguments( + abi: JsonFragment[], + sourceName: string, + contractName: string, + constructorArguments: any[] +): Promise { + const { Interface } = await import("@ethersproject/abi"); + + const contractInterface = new Interface(abi); + let encodedConstructorArguments; + try { + encodedConstructorArguments = contractInterface + .encodeDeploy(constructorArguments) + .replace("0x", ""); + } catch (error) { + if (isABIArgumentLengthError(error)) { + throw new ABIArgumentLengthError(sourceName, contractName, error); + } + if (isABIArgumentTypeError(error)) { + throw new ABIArgumentTypeError(error); + } + if (isABIArgumentOverflowError(error)) { + throw new ABIArgumentOverflowError(error); + } + + // Should be unreachable. + throw error; + } + + return encodedConstructorArguments; +} + +export interface ValidationResponse { + isPending(): void; + isFailure(): void; + isSuccess(): void; + isOk(): void; +} diff --git a/packages/hardhat-verify/src/sourcify.ts b/packages/hardhat-verify/src/sourcify.ts new file mode 100644 index 0000000000..7e146ea86f --- /dev/null +++ b/packages/hardhat-verify/src/sourcify.ts @@ -0,0 +1 @@ +export { Sourcify } from "./internal/sourcify"; diff --git a/packages/hardhat-verify/src/tsconfig.json b/packages/hardhat-verify/src/tsconfig.json new file mode 100644 index 0000000000..550a953bb3 --- /dev/null +++ b/packages/hardhat-verify/src/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../../config/typescript/tsconfig.json", + "compilerOptions": { + "outDir": "../", + "rootDirs": ["."], + "composite": true + }, + "include": ["./**/*.ts"], + "exclude": [], + "references": [ + { + "path": "../../hardhat-core/src" + }, + { + "path": "../../hardhat-ethers/src" + } + ] +} diff --git a/packages/hardhat-verify/src/types.ts b/packages/hardhat-verify/src/types.ts index 566084b86e..ffa395e876 100644 --- a/packages/hardhat-verify/src/types.ts +++ b/packages/hardhat-verify/src/types.ts @@ -10,6 +10,13 @@ export interface ChainConfig { export interface EtherscanConfig { apiKey: ApiKey; customChains: ChainConfig[]; + enabled: boolean; +} + +export interface SourcifyConfig { + enabled: boolean; + apiUrl?: string; + browserUrl?: string; } export type ApiKey = string | Record; diff --git a/packages/hardhat-verify/test/.eslintrc.js b/packages/hardhat-verify/test/.eslintrc.js index 12ee5882f1..757fe8a3ca 100644 --- a/packages/hardhat-verify/test/.eslintrc.js +++ b/packages/hardhat-verify/test/.eslintrc.js @@ -1,5 +1,9 @@ module.exports = { extends: [`${__dirname}/../.eslintrc.js`], + parserOptions: { + project: `${__dirname}/../tsconfig.json`, + sourceType: "module", + }, rules: { "import/no-extraneous-dependencies": [ "error", diff --git a/packages/hardhat-verify/test/fixture-projects/hardhat-project/hardhat.config.js b/packages/hardhat-verify/test/fixture-projects/hardhat-project/hardhat.config.js index 1904ad4739..cc01486a97 100644 --- a/packages/hardhat-verify/test/fixture-projects/hardhat-project/hardhat.config.js +++ b/packages/hardhat-verify/test/fixture-projects/hardhat-project/hardhat.config.js @@ -1,4 +1,4 @@ -require("@nomiclabs/hardhat-ethers"); +require("@nomicfoundation/hardhat-ethers"); require("../../../src/index"); @@ -28,4 +28,13 @@ module.exports = { }, ], }, + sourcify: { + enabled: false, + customChains: [ + { + network: "hardhat", + chainId: 31337, + }, + ], + }, }; diff --git a/packages/hardhat-verify/test/helpers.ts b/packages/hardhat-verify/test/helpers.ts index 34b0a46032..24802875be 100644 --- a/packages/hardhat-verify/test/helpers.ts +++ b/packages/hardhat-verify/test/helpers.ts @@ -1,15 +1,18 @@ +import type {} from "@nomicfoundation/hardhat-ethers"; +import type { FactoryOptions, HardhatRuntimeEnvironment } from "hardhat/types"; + import path from "path"; +import debug from "debug"; import { resetHardhatContext } from "hardhat/plugins-testing"; -import type {} from "@nomiclabs/hardhat-ethers"; -import { FactoryOptions, HardhatRuntimeEnvironment } from "hardhat/types"; - declare module "mocha" { interface Context { hre: HardhatRuntimeEnvironment; } } +const log = debug("hardhat:hardhat-verify:tests"); + export const useEnvironment = (fixtureProjectName: string): void => { before("Loading hardhat environment", function () { process.chdir(path.join(__dirname, "fixture-projects", fixtureProjectName)); @@ -34,9 +37,10 @@ export const deployContract = async ( ): Promise => { const factory = await ethers.getContractFactory(contractName, options); const contract = await factory.deploy(...constructorArguments); - await contract.deployTransaction.wait(confirmations); - console.log(`Deployed ${contractName} at ${contract.address}`); - return contract.address; + await contract.deploymentTransaction()?.wait(confirmations); + const contractAddress = await contract.getAddress(); + log(`Deployed ${contractName} at ${contractAddress}`); + return contractAddress; }; export const getRandomAddress = (hre: HardhatRuntimeEnvironment): string => diff --git a/packages/hardhat-verify/test/integration/index.ts b/packages/hardhat-verify/test/integration/index.ts index 1ff457aa67..e259df75b4 100644 --- a/packages/hardhat-verify/test/integration/index.ts +++ b/packages/hardhat-verify/test/integration/index.ts @@ -1,10 +1,15 @@ import fs from "fs"; import path from "path"; -import sinon from "sinon"; +import sinon, { SinonStub } from "sinon"; import { assert, expect } from "chai"; import { TASK_CLEAN, TASK_COMPILE } from "hardhat/builtin-tasks/task-names"; import { SolcConfig } from "hardhat/types/config"; -import { TASK_VERIFY, TASK_VERIFY_VERIFY } from "../../src/task-names"; +import { + TASK_VERIFY, + TASK_VERIFY_ETHERSCAN, + TASK_VERIFY_VERIFY, + TASK_VERIFY_SOURCIFY, +} from "../../src/internal/task-names"; import { deployContract, getRandomAddress, useEnvironment } from "../helpers"; import { interceptGetStatus, @@ -12,23 +17,37 @@ import { interceptVerify, mockEnvironment, } from "./mocks/etherscan"; +import { + interceptSourcifyIsVerified, + interceptSourcifyVerify, + mockEnvironmentSourcify, +} from "./mocks/sourcify"; -import "../../src/type-extensions"; +import "../../src/internal/type-extensions"; describe("verify task integration tests", () => { useEnvironment("hardhat-project"); mockEnvironment(); + // suppress sourcify info message + let consoleInfoStub: SinonStub; + before(() => { + consoleInfoStub = sinon.stub(console, "info"); + }); + + // suppress warnings + after(() => { + consoleInfoStub.restore(); + }); + it("should return after printing the supported networks", async function () { const logStub = sinon.stub(console, "log"); const taskResponse = await this.hre.run(TASK_VERIFY, { - address: getRandomAddress(this.hre), - constructorArgsParams: [], listNetworks: true, }); expect(logStub).to.be.calledOnceWith( - sinon.match(/Networks supported by hardhat-etherscan/) + sinon.match(/Networks supported by hardhat-verify/) ); logStub.restore(); assert.isUndefined(taskResponse); @@ -40,17 +59,18 @@ describe("verify task integration tests", () => { // cleanup the etherscan config since we have hardhat defined as custom chain const originalConfig = this.hre.config.etherscan; this.hre.config.etherscan = { + enabled: true, apiKey: "", customChains: [], }; await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address, constructorArgsParams: [], }) ).to.be.rejectedWith( - "The selected network is hardhat. Please select a network supported by Etherscan." + /The selected network is "hardhat", which is not supported for contract verification./ ); this.hre.config.etherscan = originalConfig; @@ -65,13 +85,13 @@ describe("verify task integration tests", () => { const logStub = sinon.stub(console, "log"); const address = getRandomAddress(this.hre); - const taskResponse = await this.hre.run(TASK_VERIFY, { + const taskResponse = await this.hre.run(TASK_VERIFY_ETHERSCAN, { address, constructorArgsParams: [], }); expect(logStub).to.be.calledOnceWith( - `The contract ${address} has already been verified. + `The contract ${address} has already been verified on Etherscan. https://hardhat.etherscan.io/address/${address}#code` ); logStub.restore(); @@ -134,7 +154,7 @@ https://hardhat.etherscan.io/address/${address}#code` const address = getRandomAddress(this.hre); await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address, constructorArgsParams: [], }) @@ -153,7 +173,7 @@ https://hardhat.etherscan.io/address/${address}#code` ]; await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: simpleContractAddress, constructorArgsParams: [], }) @@ -168,15 +188,14 @@ https://hardhat.etherscan.io/address/${address}#code` }); describe("with deleted artifacts", () => { - it("should not compile the project when the noCompile is provided", async function () { + it("should throw if the artifacts are missing", async function () { await this.hre.run(TASK_CLEAN); // task will fail since we deleted all the artifacts await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: simpleContractAddress, constructorArgsParams: [], - noCompile: true, }) ).to.be.rejectedWith( /The address provided as argument contains a contract, but its bytecode doesn't match any of your local contracts./ @@ -192,7 +211,7 @@ https://hardhat.etherscan.io/address/${address}#code` it("should throw if the deployed bytecode matches more than one contract", async function () { await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: duplicatedContractAddress, constructorArgsParams: [], }) @@ -205,7 +224,7 @@ https://hardhat.etherscan.io/address/${address}#code` const contractFQN = "contracts/SimpleContract.sol:NotFound"; await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: simpleContractAddress, constructorArgsParams: [], contract: contractFQN, @@ -219,7 +238,7 @@ https://hardhat.etherscan.io/address/${address}#code` it("should throw if there is an invalid address in the libraries parameter", async function () { await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: simpleContractAddress, constructorArgsParams: [], libraries: "invalid-libraries.js", @@ -231,7 +250,7 @@ https://hardhat.etherscan.io/address/${address}#code` it("should throw if the specified library is not used by the contract", async function () { await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: bothLibsContractAddress, constructorArgsParams: [], libraries: "not-used-libraries.js", @@ -243,7 +262,7 @@ https://hardhat.etherscan.io/address/${address}#code` it("should throw if the specified library is listed more than once in the libraries parameter", async function () { await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: onlyNormalLibContractAddress, constructorArgsParams: [], libraries: "duplicated-libraries.js", @@ -255,7 +274,7 @@ https://hardhat.etherscan.io/address/${address}#code` it("should throw if deployed library address does not match the address defined in the libraries parameter", async function () { await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: onlyNormalLibContractAddress, constructorArgsParams: [], libraries: "mismatched-address-libraries.js", @@ -269,7 +288,7 @@ https://hardhat.etherscan.io/address/${address}#code` it("should throw if there are undetectable libraries not specified by the libraries parameter", async function () { await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: bothLibsContractAddress, constructorArgsParams: [], libraries: "missing-undetectable-libraries.js", @@ -284,12 +303,12 @@ This can occur if the library is only called in the contract constructor. The mi it("should throw if the verification request fails", async function () { // do not intercept the verifysourcecode request so it throws an error await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: simpleContractAddress, constructorArgsParams: [], }) ).to.be.rejectedWith( - /Failed to send contract verification request.\nEndpoint URL: https:\/\/api-hardhat.etherscan.io\/api\nReason: getaddrinfo ENOTFOUND api-hardhat.etherscan.io/ + /An unexpected error occurred during the verification process\.\nPlease report this issue to the Hardhat team\.\nError Details: getaddrinfo ENOTFOUND api-hardhat\.etherscan\.io/ ); }); @@ -297,13 +316,13 @@ This can occur if the library is only called in the contract constructor. The mi interceptVerify({ error: "error verifying contract" }, 500); await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: simpleContractAddress, constructorArgsParams: [], }) - ).to.be.rejectedWith(`Failed to send contract verification request. -Endpoint URL: https://api-hardhat.etherscan.io/api -The HTTP server response is not ok. Status code: 500 Response text: {"error":"error verifying contract"}`); + ).to.be.rejectedWith( + /Failed to send contract verification request\.\nEndpoint URL: https:\/\/api-hardhat\.etherscan\.io\/api\n/s + ); }); it("should throw if the etherscan api can't find the bytecode at the contract address", async function () { @@ -313,7 +332,7 @@ The HTTP server response is not ok. Status code: 500 Response text: {"error":"er }); await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: simpleContractAddress, constructorArgsParams: [], }) @@ -331,7 +350,7 @@ The HTTP server response is not ok. Status code: 500 Response text: {"error":"er }); await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: simpleContractAddress, constructorArgsParams: [], }) @@ -347,11 +366,13 @@ The HTTP server response is not ok. Status code: 500 Response text: {"error":"er const logStub = sinon.stub(console, "log"); await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: simpleContractAddress, constructorArgsParams: [], }) - ).to.be.rejectedWith(/Failure during etherscan status polling./); + ).to.be.rejectedWith( + /An unexpected error occurred during the verification process\.\nPlease report this issue to the Hardhat team\.\nError Details: getaddrinfo ENOTFOUND api-hardhat\.etherscan\.io/ + ); expect(logStub).to.be .calledOnceWith(`Successfully submitted source code for contract @@ -370,7 +391,7 @@ for verification on the block explorer. Waiting for verification result... const logStub = sinon.stub(console, "log"); await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: simpleContractAddress, constructorArgsParams: [], }) @@ -398,7 +419,7 @@ for verification on the block explorer. Waiting for verification result... const logStub = sinon.stub(console, "log"); await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: simpleContractAddress, constructorArgsParams: [], }) @@ -426,7 +447,7 @@ for verification on the block explorer. Waiting for verification result... const logStub = sinon.stub(console, "log"); await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: simpleContractAddress, constructorArgsParams: [], }) @@ -465,8 +486,8 @@ contracts/SimpleContract.sol:SimpleContract at ${simpleContractAddress} for verification on the block explorer. Waiting for verification result... `); expect(logStub.getCall(1)).to.be - .calledWith(`Successfully verified contract SimpleContract on Etherscan. -https://hardhat.etherscan.io/address/${simpleContractAddress}#code`); + .calledWith(`Successfully verified contract SimpleContract on the block explorer. +https://hardhat.etherscan.io/address/${simpleContractAddress}#code\n`); logStub.restore(); assert.isUndefined(taskResponse); }); @@ -515,8 +536,8 @@ contracts/SimpleContract.sol:SimpleContract at ${simpleContractAddress} for verification on the block explorer. Waiting for verification result... `); expect(logStub.getCall(3)).to.be - .calledWith(`Successfully verified contract SimpleContract on Etherscan. -https://hardhat.etherscan.io/address/${simpleContractAddress}#code`); + .calledWith(`Successfully verified contract SimpleContract on the block explorer. +https://hardhat.etherscan.io/address/${simpleContractAddress}#code\n`); logStub.restore(); assert.equal(verifyCallCount, 2); assert.equal(getStatusCallCount, 2); @@ -543,7 +564,7 @@ https://hardhat.etherscan.io/address/${simpleContractAddress}#code`); const logStub = sinon.stub(console, "log"); await expect( - this.hre.run(TASK_VERIFY, { + this.hre.run(TASK_VERIFY_ETHERSCAN, { address: bothLibsContractAddress, constructorArgsParams: ["50"], libraries: "libraries.js", @@ -589,7 +610,6 @@ for verification on the block explorer. Waiting for verification result... NormalLib: normalLibAddress, ConstructorLib: constructorLibAddress, }, - // noCompile: true, }); assert.equal(logStub.callCount, 2); @@ -599,8 +619,59 @@ contracts/WithLibs.sol:BothLibs at ${bothLibsContractAddress} for verification on the block explorer. Waiting for verification result... `); expect(logStub.getCall(1)).to.be - .calledWith(`Successfully verified contract BothLibs on Etherscan. -https://hardhat.etherscan.io/address/${bothLibsContractAddress}#code`); + .calledWith(`Successfully verified contract BothLibs on the block explorer. +https://hardhat.etherscan.io/address/${bothLibsContractAddress}#code\n`); + logStub.restore(); + assert.isUndefined(taskResponse); + }); + + after(async function () { + await this.hre.run(TASK_CLEAN); + }); + }); +}); + +describe("verify task Sourcify's integration tests", () => { + useEnvironment("hardhat-project"); + mockEnvironmentSourcify(); + + describe("with a non-verified contract", () => { + let simpleContractAddress: string; + + before(async function () { + await this.hre.run(TASK_COMPILE, { force: true, quiet: true }); + simpleContractAddress = await deployContract( + "SimpleContract", + [], + this.hre + ); + }); + + it("should verify a contract on Sourcify", async function () { + interceptSourcifyIsVerified([ + { address: simpleContractAddress, status: "false" }, + ]); + interceptSourcifyVerify({ + result: [ + { + address: simpleContractAddress, + status: "perfect", + }, + ], + }); + const logStub = sinon.stub(console, "log"); + // set network name to localhost to avoid the "hardhat is not supported" error + this.hre.network.name = "localhost"; + + const taskResponse = await this.hre.run(TASK_VERIFY_SOURCIFY, { + address: simpleContractAddress, + contract: "contracts/SimpleContract.sol:SimpleContract", + }); + + assert.equal(logStub.callCount, 1); + (expect(logStub.getCall(0)).to.be as any) + .calledWith(`Successfully verified contract SimpleContract on Sourcify. +https://repo.sourcify.dev/contracts/full_match/31337/${simpleContractAddress}/`); logStub.restore(); assert.isUndefined(taskResponse); }); diff --git a/packages/hardhat-verify/test/integration/mocks/sourcify.ts b/packages/hardhat-verify/test/integration/mocks/sourcify.ts new file mode 100644 index 0000000000..e38308b938 --- /dev/null +++ b/packages/hardhat-verify/test/integration/mocks/sourcify.ts @@ -0,0 +1,47 @@ +import { + Dispatcher, + getGlobalDispatcher, + MockAgent, + setGlobalDispatcher, +} from "undici"; + +const mockAgent = new MockAgent({ + keepAliveTimeout: 10, + keepAliveMaxTimeout: 10, +}); + +const client = mockAgent.get("https://sourcify.dev"); + +export const mockEnvironmentSourcify = () => { + let globalDispatcher: Dispatcher; + // enable network connections for everything but etherscan API + mockAgent.enableNetConnect(/^(?!https:\/\/sourcify\.dev)/); + + before(() => { + globalDispatcher = getGlobalDispatcher(); + setGlobalDispatcher(mockAgent); + }); + + after(() => { + setGlobalDispatcher(globalDispatcher); + }); +}; + +export const interceptSourcifyIsVerified = (response: any) => + client + .intercept({ + method: "GET", + path: /\/server\/check-all-by-addresses\?addresses=0x[a-fA-F0-9]{40}&chainIds=[0-9]+/, + }) + .reply(200, response); + +export const interceptSourcifyVerify = ( + response: any, + statusCode: number = 200 +) => + client + .intercept({ + path: "/server", + method: "POST", + }) + .reply(statusCode, response); diff --git a/packages/hardhat-verify/test/unit/chain-config.ts b/packages/hardhat-verify/test/unit/chain-config.ts index 0cebea66d5..075476891f 100644 --- a/packages/hardhat-verify/test/unit/chain-config.ts +++ b/packages/hardhat-verify/test/unit/chain-config.ts @@ -1,128 +1,7 @@ -import type { Network } from "hardhat/types"; -import type { ChainConfig } from "../../src/types"; -import { assert, expect } from "chai"; -import { builtinChains, getCurrentChainConfig } from "../../src/chain-config"; +import { assert } from "chai"; +import { builtinChains } from "../../src/internal/chain-config"; describe("Chain Config", () => { - describe("getCurrentChainConfig", () => { - const customChains: ChainConfig[] = [ - { - network: "customChain1", - chainId: 5000, - urls: { - apiURL: "", - browserURL: "", - }, - }, - { - network: "customChain2", - chainId: 5000, - urls: { - apiURL: "", - browserURL: "", - }, - }, - { - network: "customChain3", - chainId: 4999, - urls: { - apiURL: "", - browserURL: "", - }, - }, - ]; - - it("should return the last matching custom chain defined by the user", async function () { - const network = { - name: "customChain2", - provider: { - async send() { - return (5000).toString(16); - }, - }, - } as unknown as Network; - const chainConfig = await getCurrentChainConfig(network, customChains); - - assert.equal(chainConfig.network, "customChain2"); - assert.equal(chainConfig.chainId, 5000); - }); - - it("should return a built-in chain if no custom chain matches", async function () { - const network = { - name: "goerli", - provider: { - async send() { - return (5).toString(16); - }, - }, - } as unknown as Network; - const chainConfig = await getCurrentChainConfig(network, customChains); - - assert.equal(chainConfig.network, "goerli"); - assert.equal(chainConfig.chainId, 5); - }); - - it("should throw if the selected network is hardhat and it's not a added to custom chains", async () => { - const network = { - name: "hardhat", - provider: { - async send() { - return (31337).toString(16); - }, - }, - } as unknown as Network; - - await expect( - getCurrentChainConfig(network, customChains) - ).to.be.rejectedWith( - "The selected network is hardhat. Please select a network supported by Etherscan." - ); - }); - - it("should return hardhat if the selected network is hardhat and it was added as a custom chain", async () => { - const network = { - name: "hardhat", - provider: { - async send() { - return (31337).toString(16); - }, - }, - } as unknown as Network; - - const chainConfig = await getCurrentChainConfig(network, [ - ...customChains, - { - network: "hardhat", - chainId: 31337, - urls: { - apiURL: "", - browserURL: "", - }, - }, - ]); - - assert.equal(chainConfig.network, "hardhat"); - assert.equal(chainConfig.chainId, 31337); - }); - - it("should throw if there are no matches at all", async () => { - const network = { - name: "someNetwork", - provider: { - async send() { - return (21343214123).toString(16); - }, - }, - } as unknown as Network; - - await expect( - getCurrentChainConfig(network, customChains) - ).to.be.rejectedWith( - /Trying to verify a contract in a network with chain id 21343214123, but the plugin doesn't recognize it as a supported chain./ - ); - }); - }); - describe("builtinChains", () => { it("should have no duplicate chain ids", () => { // check that xdai/gnosis is the only duplicate diff --git a/packages/hardhat-verify/test/unit/config.ts b/packages/hardhat-verify/test/unit/config.ts index 210c2a976d..030d2c4f7c 100644 --- a/packages/hardhat-verify/test/unit/config.ts +++ b/packages/hardhat-verify/test/unit/config.ts @@ -1,14 +1,37 @@ +import type { HardhatConfig, HardhatUserConfig } from "hardhat/types"; +import type { EtherscanConfig, SourcifyConfig } from "../../src/types"; + import sinon from "sinon"; import { assert, expect } from "chai"; -import { HardhatConfig, HardhatUserConfig } from "hardhat/types"; -import { etherscanConfigExtender } from "../../src/config"; -import { EtherscanConfig } from "../../src/types"; -describe("Chain Config", () => { - it("should extend the hardhat config with the user config", async () => { - const hardhatConfig = {} as HardhatConfig; - const userConfig: HardhatUserConfig = { - etherscan: { +import { + etherscanConfigExtender, + sourcifyConfigExtender, +} from "../../src/internal/config"; + +describe("Extend config", () => { + describe("Etherscan config extender", () => { + it("should extend the hardhat config with the user config", async () => { + const hardhatConfig = {} as HardhatConfig; + const userConfig: HardhatUserConfig = { + etherscan: { + apiKey: { + goerli: "", + }, + customChains: [ + { + network: "goerli", + chainId: 5, + urls: { + apiURL: "https://api-goerli.etherscan.io/api", + browserURL: "https://goerli.etherscan.io", + }, + }, + ], + }, + }; + const expected: EtherscanConfig = { + enabled: true, apiKey: { goerli: "", }, @@ -22,58 +45,69 @@ describe("Chain Config", () => { }, }, ], - }, - }; - const expected: EtherscanConfig = { - apiKey: { - goerli: "", - }, - customChains: [ - { - network: "goerli", - chainId: 5, - urls: { - apiURL: "https://api-goerli.etherscan.io/api", - browserURL: "https://goerli.etherscan.io", - }, - }, - ], - }; - etherscanConfigExtender(hardhatConfig, userConfig); + }; + etherscanConfigExtender(hardhatConfig, userConfig); - assert.deepEqual(hardhatConfig.etherscan, expected); - }); + assert.deepEqual(hardhatConfig.etherscan, expected); + }); - it("should override the hardhat config with the user config", async () => { - const hardhatConfig = {} as HardhatConfig; - hardhatConfig.etherscan = { - apiKey: { - goerli: "", - }, - customChains: [ - { - network: "goerli", - chainId: 5, - urls: { - apiURL: "https://api-goerli.etherscan.io/api", - browserURL: "https://goerli.etherscan.io", + it("should override the hardhat config with the user config", async () => { + const hardhatConfig = {} as HardhatConfig; + hardhatConfig.etherscan = { + enabled: true, + apiKey: { + goerli: "", + }, + customChains: [ + { + network: "goerli", + chainId: 5, + urls: { + apiURL: "https://api-goerli.etherscan.io/api", + browserURL: "https://goerli.etherscan.io", + }, + }, + ], + }; + const userConfig: HardhatUserConfig = { + etherscan: { + apiKey: { + mainnet: "", + sepolia: "", }, + customChains: [ + { + network: "mainnet", + chainId: 1, + urls: { + apiURL: "https://api.etherscan.io/api", + browserURL: "https://etherscan.io", + }, + }, + { + network: "sepolia", + chainId: 11155111, + urls: { + apiURL: "https://api-sepolia.etherscan.io/api", + browserURL: "https://sepolia.etherscan.io", + }, + }, + ], }, - ], - }; - const userConfig: HardhatUserConfig = { - etherscan: { + }; + const expected: EtherscanConfig = { + enabled: true, apiKey: { - ropsten: "", + mainnet: "", sepolia: "", }, customChains: [ { - network: "ropsten", - chainId: 3, + network: "mainnet", + chainId: 1, urls: { - apiURL: "https://api-ropsten.etherscan.io/api", - browserURL: "https://ropsten.etherscan.io", + apiURL: "https://api.etherscan.io/api", + browserURL: "https://etherscan.io", }, }, { @@ -85,69 +119,61 @@ describe("Chain Config", () => { }, }, ], - }, - }; - const expected: EtherscanConfig = { - apiKey: { - ropsten: "", - sepolia: "", - }, - customChains: [ - { - network: "ropsten", - chainId: 3, - urls: { - apiURL: "https://api-ropsten.etherscan.io/api", - browserURL: "https://ropsten.etherscan.io", - }, - }, - { - network: "sepolia", - chainId: 11155111, - urls: { - apiURL: "https://api-sepolia.etherscan.io/api", - browserURL: "https://sepolia.etherscan.io", - }, - }, - ], - }; - etherscanConfigExtender(hardhatConfig, userConfig); + }; + etherscanConfigExtender(hardhatConfig, userConfig); - assert.deepEqual(hardhatConfig.etherscan, expected); - }); + assert.deepEqual(hardhatConfig.etherscan, expected); + }); - it("should set default values when user config is not provided", async () => { - const hardhatConfig = {} as HardhatConfig; - const userConfig: HardhatUserConfig = {}; - const expected: EtherscanConfig = { - apiKey: "", - customChains: [], - }; - etherscanConfigExtender(hardhatConfig, userConfig); + it("should set default values when user config is not provided", async () => { + const hardhatConfig = {} as HardhatConfig; + const userConfig: HardhatUserConfig = {}; + const expected: EtherscanConfig = { + enabled: true, + apiKey: "", + customChains: [], + }; + etherscanConfigExtender(hardhatConfig, userConfig); - assert.deepEqual(hardhatConfig.etherscan, expected); - }); + assert.deepEqual(hardhatConfig.etherscan, expected); + }); - it("should display a warning message if there is an etherscan entry in the networks object", async () => { - const warnStub = sinon.stub(console, "warn"); - const hardhatConfig = { - networks: { - etherscan: { - apiKey: { - goerli: "", + it("should display a warning message if there is an etherscan entry in the networks object", async () => { + const warnStub = sinon.stub(console, "warn"); + const hardhatConfig = { + networks: { + etherscan: { + apiKey: { + goerli: "", + }, }, }, - }, - }; - const userConfig: HardhatUserConfig = {}; + }; + const userConfig: HardhatUserConfig = {}; + + // @ts-expect-error + etherscanConfigExtender(hardhatConfig, userConfig); + expect(warnStub).to.be.calledOnceWith( + sinon.match( + /WARNING: you have an 'etherscan' entry in your networks configuration./ + ) + ); + warnStub.restore(); + }); + }); + + describe("Sourcify config extender", () => { + it("should set default values when user config is not provided", async () => { + const hardhatConfig = {} as HardhatConfig; + const userConfig: HardhatUserConfig = {}; + const expected: SourcifyConfig = { + enabled: false, + apiUrl: "https://sourcify.dev/server", + browserUrl: "https://repo.sourcify.dev", + }; + sourcifyConfigExtender(hardhatConfig, userConfig); - // @ts-expect-error - etherscanConfigExtender(hardhatConfig, userConfig); - expect(warnStub).to.be.calledOnceWith( - sinon.match( - /WARNING: you have an 'etherscan' entry in your networks configuration./ - ) - ); - warnStub.restore(); + assert.deepEqual(hardhatConfig.sourcify, expected); + }); }); }); diff --git a/packages/hardhat-verify/test/unit/etherscan.ts b/packages/hardhat-verify/test/unit/etherscan.ts index 0bcdd816c4..d1198e54c8 100644 --- a/packages/hardhat-verify/test/unit/etherscan.ts +++ b/packages/hardhat-verify/test/unit/etherscan.ts @@ -1,5 +1,8 @@ +import type { EthereumProvider } from "hardhat/types"; +import type { ChainConfig } from "../../src/types"; + import { assert, expect } from "chai"; -import { Etherscan } from "../../src/etherscan"; +import { Etherscan } from "../../src/internal/etherscan"; describe("Etherscan", () => { const chainConfig = { @@ -13,34 +16,166 @@ describe("Etherscan", () => { describe("constructor", () => { it("should throw if the apiKey is undefined or empty", () => { - expect(() => new Etherscan(undefined, chainConfig)).to.throw( + expect(() => Etherscan.fromChainConfig(undefined, chainConfig)).to.throw( /You are trying to verify a contract in 'goerli', but no API token was found for this network./ ); - expect(() => new Etherscan("", chainConfig)).to.throw( + expect(() => Etherscan.fromChainConfig("", chainConfig)).to.throw( /You are trying to verify a contract in 'goerli', but no API token was found for this network./ ); }); it("should throw if the apiKey is an object but apiKey[network] is undefined or empty", () => { - expect(() => new Etherscan({}, chainConfig)).to.throw( + expect(() => Etherscan.fromChainConfig({}, chainConfig)).to.throw( /You are trying to verify a contract in 'goerli', but no API token was found for this network./ ); - expect(() => new Etherscan({ goerli: "" }, chainConfig)).to.throw( + expect(() => + Etherscan.fromChainConfig({ goerli: "" }, chainConfig) + ).to.throw( /You are trying to verify a contract in 'goerli', but no API token was found for this network./ ); }); }); + describe("getCurrentChainConfig", () => { + const customChains: ChainConfig[] = [ + { + network: "customChain1", + chainId: 5000, + urls: { + apiURL: "", + browserURL: "", + }, + }, + { + network: "customChain2", + chainId: 5000, + urls: { + apiURL: "", + browserURL: "", + }, + }, + { + network: "customChain3", + chainId: 4999, + urls: { + apiURL: "", + browserURL: "", + }, + }, + ]; + + it("should return the last matching custom chain defined by the user", async function () { + const networkName = "customChain2"; + const ethereumProvider = { + async send() { + return (5000).toString(16); + }, + } as unknown as EthereumProvider; + + const currentChainConfig = await Etherscan.getCurrentChainConfig( + networkName, + ethereumProvider, + customChains + ); + + assert.equal(currentChainConfig.network, networkName); + assert.equal(currentChainConfig.chainId, 5000); + }); + + it("should return a built-in chain if no custom chain matches", async function () { + const networkName = "goerli"; + const ethereumProvider = { + async send() { + return (5).toString(16); + }, + } as unknown as EthereumProvider; + const currentChainConfig = await Etherscan.getCurrentChainConfig( + networkName, + ethereumProvider, + customChains + ); + + assert.equal(currentChainConfig.network, networkName); + assert.equal(currentChainConfig.chainId, 5); + }); + + it("should throw if the selected network is hardhat and it's not a added to custom chains", async () => { + const networkName = "hardhat"; + const ethereumProvider = { + async send() { + return (31337).toString(16); + }, + } as unknown as EthereumProvider; + + await expect( + Etherscan.getCurrentChainConfig( + networkName, + ethereumProvider, + customChains + ) + ).to.be.rejectedWith( + /The selected network is "hardhat", which is not supported for contract verification./ + ); + }); + + it("should return hardhat if the selected network is hardhat and it was added as a custom chain", async () => { + const networkName = "hardhat"; + const ethereumProvider = { + async send() { + return (31337).toString(16); + }, + } as unknown as EthereumProvider; + + const currentChainConfig = await Etherscan.getCurrentChainConfig( + networkName, + ethereumProvider, + [ + ...customChains, + { + network: "hardhat", + chainId: 31337, + urls: { + apiURL: "", + browserURL: "", + }, + }, + ] + ); + + assert.equal(currentChainConfig.network, networkName); + assert.equal(currentChainConfig.chainId, 31337); + }); + + it("should throw if there are no matches at all", async () => { + const networkName = "someNetwork"; + const ethereumProvider = { + async send() { + return (21343214123).toString(16); + }, + } as unknown as EthereumProvider; + + await expect( + Etherscan.getCurrentChainConfig( + networkName, + ethereumProvider, + customChains + ) + ).to.be.rejectedWith( + /Trying to verify a contract in a network with chain id 21343214123, but the plugin doesn't recognize it as a supported chain./ + ); + }); + }); + describe("getContractUrl", () => { it("should return the contract url", () => { const expectedContractAddress = "https://goerli.etherscan.io/address/someAddress#code"; - let etherscan = new Etherscan("someApiKey", chainConfig); + let etherscan = Etherscan.fromChainConfig("someApiKey", chainConfig); let contractUrl = etherscan.getContractUrl("someAddress"); assert.equal(contractUrl, expectedContractAddress); - etherscan = new Etherscan("someApiKey", { + etherscan = Etherscan.fromChainConfig("someApiKey", { network: "goerli", chainId: 5, urls: { diff --git a/packages/hardhat-verify/test/unit/index.ts b/packages/hardhat-verify/test/unit/index.ts index 46ec2fe913..3febcfa71f 100644 --- a/packages/hardhat-verify/test/unit/index.ts +++ b/packages/hardhat-verify/test/unit/index.ts @@ -1,17 +1,24 @@ +import type { VerificationSubtask } from "../.."; import { assert, expect } from "chai"; +import sinon, { SinonStub } from "sinon"; + import { - TASK_VERIFY_RESOLVE_ARGUMENTS, + TASK_VERIFY_ETHERSCAN, + TASK_VERIFY_GET_VERIFICATION_SUBTASKS, + TASK_VERIFY_ETHERSCAN_RESOLVE_ARGUMENTS, + TASK_VERIFY_SOURCIFY, + TASK_VERIFY_SOURCIFY_DISABLED_WARNING, TASK_VERIFY_VERIFY, -} from "../../src/task-names"; +} from "../../src/internal/task-names"; import { getRandomAddress, useEnvironment } from "../helpers"; describe("verify task", () => { useEnvironment("hardhat-project"); - describe("verify:resolve-arguments", () => { + describe(TASK_VERIFY_ETHERSCAN_RESOLVE_ARGUMENTS, () => { it("should throw if address is not provided", async function () { await expect( - this.hre.run(TASK_VERIFY_RESOLVE_ARGUMENTS, { + this.hre.run(TASK_VERIFY_ETHERSCAN_RESOLVE_ARGUMENTS, { constructorArgsParams: [], constructorArgs: "constructor-args.js", libraries: "libraries.js", @@ -21,7 +28,7 @@ describe("verify task", () => { it("should throw if address is invalid", async function () { await expect( - this.hre.run(TASK_VERIFY_RESOLVE_ARGUMENTS, { + this.hre.run(TASK_VERIFY_ETHERSCAN_RESOLVE_ARGUMENTS, { address: "invalidAddress", constructorArgsParams: [], constructorArgs: "constructor-args.js", @@ -32,7 +39,7 @@ describe("verify task", () => { it("should throw if contract is not a fully qualified name", async function () { await expect( - this.hre.run(TASK_VERIFY_RESOLVE_ARGUMENTS, { + this.hre.run(TASK_VERIFY_ETHERSCAN_RESOLVE_ARGUMENTS, { address: getRandomAddress(this.hre), constructorArgsParams: [], constructorArgs: "constructor-args.js", @@ -42,7 +49,7 @@ describe("verify task", () => { ).to.be.rejectedWith(/A valid fully qualified name was expected./); }); - it("should return the proccesed arguments", async function () { + it("should return the processed arguments", async function () { const address = getRandomAddress(this.hre); const expectedArgs = { address, @@ -60,54 +67,23 @@ describe("verify task", () => { ConstructorLib: "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", }, contractFQN: "contracts/TestContract.sol:TestContract", - listNetworks: true, - noCompile: true, }; - const proccesedArgs = await this.hre.run(TASK_VERIFY_RESOLVE_ARGUMENTS, { - address, - constructorArgsParams: [], - constructorArgs: "constructor-args.js", - libraries: "libraries.js", - contract: "contracts/TestContract.sol:TestContract", - listNetworks: true, - noCompile: true, - }); - - assert.deepEqual(proccesedArgs, expectedArgs); - }); - }); - - describe("verify:verify", () => { - it("should throw if address is not provided", async function () { - await expect( - this.hre.run(TASK_VERIFY_VERIFY, { - constructorArguments: [], - libraries: {}, - }) - ).to.be.rejectedWith(/You didn’t provide any address./); - }); - - it("should throw if address is invalid", async function () { - await expect( - this.hre.run(TASK_VERIFY_VERIFY, { - address: "invalidAddress", - constructorArguments: [], - libraries: {}, - }) - ).to.be.rejectedWith(/invalidAddress is an invalid address./); - }); + const processedArgs = await this.hre.run( + TASK_VERIFY_ETHERSCAN_RESOLVE_ARGUMENTS, + { + address, + constructorArgsParams: [], + constructorArgs: "constructor-args.js", + libraries: "libraries.js", + contract: "contracts/TestContract.sol:TestContract", + } + ); - it("should throw if contract is not a fully qualified name", async function () { - await expect( - this.hre.run(TASK_VERIFY_VERIFY, { - address: getRandomAddress(this.hre), - constructorArguments: [], - libraries: {}, - contract: "not-a-fully-qualified-name", - }) - ).to.be.rejectedWith(/A valid fully qualified name was expected./); + assert.deepEqual(processedArgs, expectedArgs); }); + }); + describe(TASK_VERIFY_VERIFY, () => { it("should throw if constructorArguments is not an array", async function () { await expect( this.hre.run(TASK_VERIFY_VERIFY, { @@ -130,4 +106,129 @@ describe("verify task", () => { ).to.be.rejectedWith(/The libraries parameter should be a dictionary./); }); }); + + describe(TASK_VERIFY_GET_VERIFICATION_SUBTASKS, () => { + // suppress warnings + let warnStub: SinonStub; + beforeEach(() => { + warnStub = sinon.stub(console, "warn"); + }); + afterEach(() => { + warnStub.restore(); + }); + + it("should return the etherscan subtask by default", async function () { + const verificationSubtasks: VerificationSubtask[] = await this.hre.run( + TASK_VERIFY_GET_VERIFICATION_SUBTASKS + ); + + assert.isTrue( + verificationSubtasks.some( + ({ subtaskName }) => subtaskName === TASK_VERIFY_ETHERSCAN + ) + ); + }); + + it("should return the etherscan subtask if it is enabled", async function () { + const originalConfig = this.hre.config.etherscan; + this.hre.config.etherscan = { + enabled: true, + apiKey: "", + customChains: [], + }; + + const verificationSubtasks: VerificationSubtask[] = await this.hre.run( + TASK_VERIFY_GET_VERIFICATION_SUBTASKS + ); + + this.hre.config.etherscan = originalConfig; + + assert.isTrue( + verificationSubtasks.some( + ({ subtaskName }) => subtaskName === TASK_VERIFY_ETHERSCAN + ) + ); + }); + + it("should ignore the etherscan subtask if it is disabled", async function () { + const originalConfig = this.hre.config.etherscan; + this.hre.config.etherscan = { + enabled: false, + apiKey: "", + customChains: [], + }; + + const verificationSubtasks: VerificationSubtask[] = await this.hre.run( + TASK_VERIFY_GET_VERIFICATION_SUBTASKS + ); + + this.hre.config.etherscan = originalConfig; + + assert.isFalse( + verificationSubtasks.some( + ({ subtaskName }) => subtaskName === TASK_VERIFY_ETHERSCAN + ) + ); + }); + + it("should ignore the sourcify subtask by default", async function () { + const verificationSubtasks: VerificationSubtask[] = await this.hre.run( + TASK_VERIFY_GET_VERIFICATION_SUBTASKS + ); + + assert.isFalse( + verificationSubtasks.some( + ({ subtaskName }) => subtaskName === TASK_VERIFY_SOURCIFY + ) + ); + }); + + it("should return the sourcify subtask if it is enabled", async function () { + const originalConfig = this.hre.config.sourcify; + this.hre.config.sourcify = { + enabled: true, + }; + + const verificationSubtasks: VerificationSubtask[] = await this.hre.run( + TASK_VERIFY_GET_VERIFICATION_SUBTASKS + ); + + this.hre.config.sourcify = originalConfig; + + assert.isTrue( + verificationSubtasks.some( + ({ subtaskName }) => subtaskName === TASK_VERIFY_SOURCIFY + ) + ); + assert.isFalse( + verificationSubtasks.some( + ({ subtaskName }) => + subtaskName === TASK_VERIFY_SOURCIFY_DISABLED_WARNING + ) + ); + }); + + it("should provide a warning message if both etherscan and sourcify are disabled", async function () { + const originalEtherscanConfig = this.hre.config.etherscan; + this.hre.config.etherscan = { + enabled: false, + apiKey: "", + customChains: [], + }; + const originalSourcifyConfig = this.hre.config.etherscan; + this.hre.config.sourcify = { + enabled: false, + }; + + await this.hre.run(TASK_VERIFY_GET_VERIFICATION_SUBTASKS); + + this.hre.config.etherscan = originalEtherscanConfig; + this.hre.config.sourcify = originalSourcifyConfig; + + assert.isTrue(warnStub.calledOnce); + expect(warnStub).to.be.calledWith( + sinon.match(/\[WARNING\] No verification services are enabled./) + ); + }); + }); }); diff --git a/packages/hardhat-verify/test/unit/solc/artifacts.ts b/packages/hardhat-verify/test/unit/solc/artifacts.ts index ebef87e0f3..ac9fa2a007 100644 --- a/packages/hardhat-verify/test/unit/solc/artifacts.ts +++ b/packages/hardhat-verify/test/unit/solc/artifacts.ts @@ -1,11 +1,13 @@ +import type { CompilerOutputBytecode } from "hardhat/types"; + import { assert } from "chai"; -import { CompilerOutputBytecode } from "hardhat/types"; + import { ByteOffset, getCallProtectionOffsets, getImmutableOffsets, getLibraryOffsets, -} from "../../../src/solc/artifacts"; +} from "../../../src/internal/solc/artifacts"; describe("artifacts", () => { describe("getLibraryOffsets", () => { diff --git a/packages/hardhat-verify/test/unit/solc/metadata.ts b/packages/hardhat-verify/test/unit/solc/metadata.ts index b7adeea603..ed4a0e6b22 100644 --- a/packages/hardhat-verify/test/unit/solc/metadata.ts +++ b/packages/hardhat-verify/test/unit/solc/metadata.ts @@ -2,7 +2,7 @@ import { assert } from "chai"; import { getMetadataSectionLength, inferCompilerVersion, -} from "../../../src/solc/metadata"; +} from "../../../src/internal/solc/metadata"; describe("Metadata Decoder", () => { describe("inferCompilerVersion", () => { diff --git a/packages/hardhat-verify/test/unit/sourcify.ts b/packages/hardhat-verify/test/unit/sourcify.ts new file mode 100644 index 0000000000..87d288e41f --- /dev/null +++ b/packages/hardhat-verify/test/unit/sourcify.ts @@ -0,0 +1,25 @@ +import { assert } from "chai"; +import { Sourcify } from "../../src/sourcify"; +import { ContractStatus } from "../../src/internal/sourcify.types"; + +describe("Sourcify", () => { + const chainId = 100; + + describe("getContractUrl", () => { + it("should return the contract url", () => { + const expectedContractAddress = + "https://repo.sourcify.dev/contracts/full_match/100/0xC4c622862a8F548997699bE24EA4bc504e5cA865/"; + const sourcify = new Sourcify( + chainId, + "https://sourcify.dev/server", + "https://repo.sourcify.dev" + ); + const contractUrl = sourcify.getContractUrl( + "0xC4c622862a8F548997699bE24EA4bc504e5cA865", + ContractStatus.PERFECT + ); + + assert.equal(contractUrl, expectedContractAddress); + }); + }); +}); diff --git a/packages/hardhat-verify/test/unit/utilities.ts b/packages/hardhat-verify/test/unit/utilities.ts index 88ac13067f..55a0e2cfad 100644 --- a/packages/hardhat-verify/test/unit/utilities.ts +++ b/packages/hardhat-verify/test/unit/utilities.ts @@ -1,15 +1,85 @@ +import type { JsonFragment } from "@ethersproject/abi"; +import type { SolidityConfig } from "hardhat/types"; +import type { ChainConfig } from "../../src/types"; + import path from "path"; import { assert, expect } from "chai"; -import { SolidityConfig } from "hardhat/types"; -import { JsonFragment } from "@ethersproject/abi"; +import sinon from "sinon"; +import chalk from "chalk"; + import { encodeArguments, getCompilerVersions, + printSupportedNetworks, + printVerificationErrors, resolveConstructorArguments, resolveLibraries, -} from "../../src/utilities"; +} from "../../src/internal/utilities"; +import { HardhatVerifyError } from "../../src/internal/errors"; +import { builtinChains } from "../../src/internal/chain-config"; describe("Utilities", () => { + describe("printSupportedNetworks", () => { + it("should print supported and custom networks", async () => { + const customChains: ChainConfig[] = [ + { + network: "MyNetwork", + chainId: 1337, + urls: { + apiURL: "https://api.mynetwork.io/api", + browserURL: "https://mynetwork.io", + }, + }, + ]; + + const logStub = sinon.stub(console, "log"); + + await printSupportedNetworks(customChains); + + sinon.restore(); + + assert.isTrue(logStub.calledOnce); + const actualTableOutput = logStub.getCall(0).args[0]; + const allChains = [...builtinChains, ...customChains]; + allChains.forEach(({ network, chainId }) => { + const regex = new RegExp(`║\\s*${network}\\s*│\\s*${chainId}\\s*║`); + assert.isTrue(regex.test(actualTableOutput)); + }); + }); + }); + + describe("printVerificationErrors", () => { + it("should print verification errors", () => { + const errors: Record = { + Etherscan: new HardhatVerifyError("Etherscan error message"), + Sourcify: new HardhatVerifyError("Sourcify error message"), + }; + + const errorStub = sinon.stub(console, "error"); + + printVerificationErrors(errors); + + sinon.restore(); + + assert.isTrue(errorStub.calledOnce); + const errorMessage = errorStub.getCall(0).args[0]; + assert.equal( + errorMessage, + chalk.red( + `hardhat-verify found one or more errors during the verification process: + +Etherscan: +Etherscan error message + +Sourcify: +Sourcify error message + +` + ) + ); + }); + }); + describe("resolveConstructorArguments", () => { it("should return the constructorArgsParams if constructorArgsModule is not defined", async () => { const constructorArgsParams = ["1", "arg2", "false"]; diff --git a/packages/hardhat-verify/tsconfig.json b/packages/hardhat-verify/tsconfig.json index 1bf285e948..65ecfc33b9 100644 --- a/packages/hardhat-verify/tsconfig.json +++ b/packages/hardhat-verify/tsconfig.json @@ -1,16 +1,15 @@ { "extends": "../../config/typescript/tsconfig.json", "compilerOptions": { - "outDir": "./dist", + "outDir": "./build-test", + "rootDirs": ["./test"], "composite": true }, - "exclude": ["./dist", "./node_modules", "./test/**/hardhat.config.ts"], + "include": ["./test/**/*.ts"], + "exclude": ["./node_modules", "./test/**/hardhat.config.ts"], "references": [ { - "path": "../hardhat-core/src" - }, - { - "path": "../hardhat-ethers/src" + "path": "./src" } ] } diff --git a/packages/hardhat-viem/.eslintignore b/packages/hardhat-viem/.eslintignore new file mode 100644 index 0000000000..54bbdb1232 --- /dev/null +++ b/packages/hardhat-viem/.eslintignore @@ -0,0 +1,8 @@ +.eslintrc.js + +*.d.ts +index.js + +/build-test +/internal +/test/fixture-projects diff --git a/packages/hardhat-viem/.eslintrc.js b/packages/hardhat-viem/.eslintrc.js new file mode 100644 index 0000000000..13139c79c6 --- /dev/null +++ b/packages/hardhat-viem/.eslintrc.js @@ -0,0 +1,24 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + +module.exports = { + extends: [`${__dirname}/../../config/eslint/eslintrc.js`], + parserOptions: { + project: `${__dirname}/src/tsconfig.json`, + sourceType: "module", + }, + overrides: [ + { + files: ["src/index.ts"], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [...slowImportsCommonIgnoredModules], + }, + ], + }, + }, + ], +}; diff --git a/packages/hardhat-viem/.gitignore b/packages/hardhat-viem/.gitignore new file mode 100644 index 0000000000..8e1785ba1e --- /dev/null +++ b/packages/hardhat-viem/.gitignore @@ -0,0 +1,98 @@ +# Node modules +/node_modules + +# Compilation output +/build-test/ +/dist + +# Code coverage artifacts +/coverage +/.nyc_output + +/*.js +!/.eslintrc.js +/*.js.map +/*.d.ts +/*.d.ts.map +/builtin-tasks +/common +/internal +/types +/utils + +# Below is Github's node gitignore template, +# ignoring the node_modules part, as it'd ignore every node_modules, and we have some for testing + +# Logs +logs +*.log + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +#node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'pnpm pack' +*.tgz + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +test/fixture-projects/*/artifacts +test/fixture-projects/*/cache diff --git a/packages/hardhat-viem/.mocharc.json b/packages/hardhat-viem/.mocharc.json new file mode 100644 index 0000000000..cc5f5768f7 --- /dev/null +++ b/packages/hardhat-viem/.mocharc.json @@ -0,0 +1,6 @@ +{ + "require": "ts-node/register/files", + "file": "./test/setup.ts", + "ignore": ["test/fixture-projects/**/*", "test/update-snapshots.ts"], + "timeout": 10000 +} diff --git a/packages/hardhat-viem/.prettierignore b/packages/hardhat-viem/.prettierignore new file mode 100644 index 0000000000..4c9a81a3da --- /dev/null +++ b/packages/hardhat-viem/.prettierignore @@ -0,0 +1,12 @@ +/node_modules +/internal +/*.d.ts +/*.d.ts.map +/*.js +/*.js.map +/build-test +/test/fixture-projects/**/artifacts +/test/fixture-projects/**/cache +/test/fixture-projects/**/snapshots +CHANGELOG.md +.nyc_output diff --git a/packages/hardhat-viem/CHANGELOG.md b/packages/hardhat-viem/CHANGELOG.md new file mode 100644 index 0000000000..504852f8f6 --- /dev/null +++ b/packages/hardhat-viem/CHANGELOG.md @@ -0,0 +1,13 @@ +# @nomicfoundation/hardhat-viem + +## 1.0.2 + +### Patch Changes + +- b521c2a05: Add configurable public client to getContractAt, deployContract and sendDeploymentTransaction + +## 1.0.1 + +### Patch Changes + +- 4943519d0: Fixed an issue with development networks using custom chain ids diff --git a/packages/hardhat-viem/LICENSE b/packages/hardhat-viem/LICENSE new file mode 100644 index 0000000000..3b7e8c7eab --- /dev/null +++ b/packages/hardhat-viem/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Nomic Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/hardhat-viem/README.md b/packages/hardhat-viem/README.md new file mode 100644 index 0000000000..f2bfc30d51 --- /dev/null +++ b/packages/hardhat-viem/README.md @@ -0,0 +1,237 @@ +[![npm](https://img.shields.io/npm/v/@nomicfoundation/hardhat-viem.svg)](https://www.npmjs.com/package/@nomicfoundation/hardhat-viem) [![hardhat](https://hardhat.org/buidler-plugin-badge.svg?1)](https://hardhat.org) + +# hardhat-viem + +[Hardhat](https://hardhat.org) plugin for integration with [Viem](https://github.com/wagmi-dev/viem), a lightweight, composable, and type-safe Ethereum library. + +## What + +This plugin integrates the Viem Ethereum library into your Hardhat development environment. Viem is an alternative to [ethers.js](https://docs.ethers.io/) that offers developers a different way to interact with the Ethereum blockchain. + +By installing and configuring `hardhat-viem`, you gain access to the capabilities of the Viem library directly within your Hardhat projects. This integration enables you to perform various Ethereum-related tasks using Viem's features and functionalities. + +Note: This plugin relies on the Viem library, so familiarity with [Viem's documentation](https://viem.sh/docs/getting-started.html) can enhance your experience when working with `hardhat-viem`. + +## Installation + +```bash +npm install --save-dev @nomicfoundation/hardhat-viem viem +``` + +And add the following statement to your `hardhat.config.js`: + +```js +require("@nomicfoundation/hardhat-viem"); +``` + +Or, if you are using TypeScript, add this to your `hardhat.config.ts`: + +```js +import "@nomicfoundation/hardhat-viem"; +``` + +**Note:** you might want to pin Viem-related dependencies because Viem does not strictly follow semantic versioning for type changes. You can read more [here](https://hardhat.org/hardhat-runner/docs/advanced/using-viem#managing-types-and-version-stability). + +## Required plugins + +No plugins dependencies. + +## Tasks + +This plugin creates no additional tasks. + +## Environment extensions + +This plugins adds a `viem` object to the Hardhat Runtime Environment which provides a minimal set of capabilities for interacting with the blockchain. + +### Clients + +Viem supports three types of clients: + +#### Public client + +A Public Client is an interface to "public" JSON-RPC API methods such as retrieving block numbers, transactions, reading from smart contracts, etc through [Public Actions](https://viem.sh/docs/actions/public/introduction.html). + +```typescript +import hre from "hardhat"; + +const publicClient = await hre.viem.getPublicClient(); + +const blockNumber = await publicClient.getBlockNumber(); + +const balance = await publicClient.getBalance({ + address: "0xA0Cf798816D4b9b9866b5330EEa46a18382f251e", +}); +``` + +#### Wallet client + +A Wallet Client is an interface to interact with Ethereum Accounts and provides the ability to retrieve accounts, execute transactions, sign messages, etc. through [Wallet Actions](https://viem.sh/docs/actions/wallet/introduction.html). + +```typescript +import hre from "hardhat"; + +const [fromWalletClient, toWalletClient] = await hre.viem.getWalletClients(); + +const hash = await fromWalletClient.sendTransaction({ + to: toWalletClient.account.address, + value: parseEther("0.0001"), +}); +``` + +```typescript +import hre from "hardhat"; + +const walletClient = await hre.viem.getWalletClient( + "0xA0Cf798816D4b9b9866b5330EEa46a18382f251e" +); + +const signature = await walletClient.signMessage({ + account, + message: "hello world", +}); +``` + +#### Test client + +A Test Client is an interface to "test" JSON-RPC API methods such as mining blocks, impersonating accounts, setting fees, etc. through [Test Actions](https://viem.sh/docs/actions/test/introduction.html). + +```typescript +import hre from "hardhat"; + +const testClient = await hre.viem.getTestClient(); + +await testClient.mine({ + blocks: 1000000, +}); +``` + +#### Client options + +You can pass options to the `getPublicClient`, `getWalletClient`, and `getTestClient` methods to customize the client's behavior. + +```typescript +import hre from "hardhat"; + +const publicClient = await hre.viem.getPublicClient({ + pollingInterval: 1000, + cacheTime: 2000, +}); +``` + +For a complete list of options, see: + +- [Public client parameters](https://viem.sh/docs/clients/public.html#parameters) +- [Wallet client parameters](https://viem.sh/docs/clients/wallet.html#parameters) +- [Test client parameters](https://viem.sh/docs/clients/test.html#parameters) + +### Contracts + +The `viem` object provides convenient methods for deploying and interacting with smart contracts on the blockchain. + +#### Deploying a Contract + +To deploy a contract to the blockchain, use the `deployContract` method: + +```typescript +import hre from "hardhat"; + +const contract = await hre.viem.deployContract("contractName", [ + "arg1", + 50, + "arg3", +]); +``` + +By default, the first wallet client retrieved by `hre.viem.getWalletClients()` is used to deploy the contract. You can also specify a different wallet client by passing a third parameter, along with other properties, such as `gas` and `value`: + +```typescript +import hre from "hardhat"; + +const [_, secondWalletClient] = await hre.viem.getWalletClients(); + +const contractA = await hre.viem.deployContract( + "contractName", + ["arg1", 50, "arg3"], + { + walletClient: secondWalletClient, + gas: 1000000, + value: parseEther("0.0001"), + confirmations: 5, // 1 by default + } +); +``` + +#### Retrieving an Existing Contract + +If the contract is already deployed, you can retrieve an instance of it using the `getContractAt` method: + +```typescript +import hre from "hardhat"; + +const contract = await hre.viem.getContractAt( + "contractName", + "0x1234567890123456789012345678901234567890" +); +``` + +By default, the first wallet client retrieved by `hre.viem.getWalletClients()` will be used for interacting with the contract. If you want to specify a different wallet client, you can do so by passing it as a third parameter, just like when deploying a contract: + +```typescript +import hre from "hardhat"; + +const [_, secondWalletClient] = await hre.viem.getWalletClients(); + +const contract = await hre.viem.getContractAt( + "contractName", + "0x1234567890123456789012345678901234567890", + { walletClient: secondWalletClient } +); +``` + +#### Interacting with Contracts + +Once you have an instance of a contract, you can interact with it by calling its methods: + +```typescript +let response = await contract.read.method1(); +await contract.write.method2([10, "arg2"]); +``` + +##### Send deployment transaction + +By default, the `deployContract` method sends a deployment transaction to the blockchain and waits for the transaction to be mined. If you want to send the transaction without waiting for it to be mined, you can do so by using `sendDeploymentTransaction`: + +```typescript +import hre from "hardhat"; + +const { contract: contractName, deploymentTransaction } = + await hre.viem.sendDeploymentTransaction( + "contractName", + ["arg1", 50, "arg3"], + { + walletClient: secondWalletClient, + gas: 1000000, + value: parseEther("0.0001"), + } + ); +``` + +Then, if you want to wait for the transaction to be mined, you can do: + +```typescript +import hre from "hardhat"; + +const publicClient = await hre.viem.getPublicClient(); +const { contractAddress } = await publicClient.waitForTransactionReceipt({ + hash: deploymentTransaction.hash, +}); +``` + +## Usage + +There are no additional steps you need to take for this plugin to work. + +Install it and access Viem through the Hardhat Runtime Environment anywhere you need it (tasks, scripts, tests, etc). + +Read the documentation on the [Hardhat Runtime Environment](https://hardhat.org/hardhat-runner/docs/advanced/hardhat-runtime-environment) to learn how to access the HRE in different ways to use Viem from anywhere the HRE is accessible. diff --git a/packages/hardhat-viem/package.json b/packages/hardhat-viem/package.json new file mode 100644 index 0000000000..63267bcd01 --- /dev/null +++ b/packages/hardhat-viem/package.json @@ -0,0 +1,80 @@ +{ + "name": "@nomicfoundation/hardhat-viem", + "version": "1.0.2", + "description": "Hardhat plugin for viem", + "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-viem", + "repository": "github:nomicfoundation/hardhat", + "author": "Nomic Foundation", + "license": "MIT", + "main": "index.js", + "types": "index.d.ts", + "keywords": [ + "ethereum", + "smart-contracts", + "hardhat", + "hardhat-plugin", + "viem" + ], + "scripts": { + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", + "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", + "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", + "test": "mocha --recursive \"test/**/*.ts\" -c --exit", + "snapshots:update": "ts-node test/update-snapshots.ts", + "coverage": "nyc pnpm test -- --reporter min", + "build": "tsc --build .", + "prepublishOnly": "pnpm build", + "clean": "rimraf internal *.{d.ts,js}{,.map} build-test tsconfig.tsbuildinfo" + }, + "files": [ + "src/", + "internal/", + "*.d.ts", + "*.d.ts.map", + "*.js", + "*.js.map", + "LICENSE", + "README.md" + ], + "devDependencies": { + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", + "@types/chai": "^4.2.0", + "@types/chai-as-promised": "^7.1.3", + "@types/lodash": "^4.14.123", + "@types/lodash.memoize": "^4.1.7", + "@types/mocha": ">=9.1.0", + "@types/node": "^16.0.0", + "@types/sinon": "^9.0.8", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", + "eslint": "^8.44.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "hardhat": "workspace:^2.17.0", + "jest-diff": "^29.7.0", + "mocha": "^10.0.0", + "nyc": "^15.1.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "sinon": "^9.0.0", + "ts-node": "^10.8.0", + "typescript": "~5.0.0", + "viem": "^1.15.1" + }, + "peerDependencies": { + "hardhat": "^2.17.0", + "typescript": "~5.0.0", + "viem": "^1.15.1" + }, + "dependencies": { + "abitype": "^0.9.8", + "lodash.memoize": "^4.1.2" + } +} diff --git a/packages/hardhat-viem/src/index.ts b/packages/hardhat-viem/src/index.ts new file mode 100644 index 0000000000..d7b1f9f45f --- /dev/null +++ b/packages/hardhat-viem/src/index.ts @@ -0,0 +1,42 @@ +import { extendEnvironment } from "hardhat/config"; + +import { + getPublicClient, + getWalletClients, + getWalletClient, + getTestClient, +} from "./internal/clients"; +import { + deployContract, + sendDeploymentTransaction, + getContractAt, +} from "./internal/contracts"; +import "./internal/type-extensions"; +import "./internal/tasks"; + +extendEnvironment((hre) => { + const { provider } = hre.network; + + hre.viem = { + getPublicClient: (publicClientConfig) => + getPublicClient(provider, publicClientConfig), + + getWalletClients: (walletClientConfig) => + getWalletClients(provider, walletClientConfig), + + getWalletClient: (address, walletClientConfig) => + getWalletClient(provider, address, walletClientConfig), + + getTestClient: (testClientConfig) => + getTestClient(provider, testClientConfig), + + deployContract: (contractName, constructorArgs, config) => + deployContract(hre, contractName, constructorArgs, config), + + sendDeploymentTransaction: (contractName, constructorArgs, config) => + sendDeploymentTransaction(hre, contractName, constructorArgs, config), + + getContractAt: (contractName, address, config) => + getContractAt(hre, contractName, address, config), + }; +}); diff --git a/packages/hardhat-viem/src/internal/accounts.ts b/packages/hardhat-viem/src/internal/accounts.ts new file mode 100644 index 0000000000..479cd4942e --- /dev/null +++ b/packages/hardhat-viem/src/internal/accounts.ts @@ -0,0 +1,9 @@ +import type { EthereumProvider } from "hardhat/types"; +import type { Address } from "viem"; + +import memoize from "lodash.memoize"; + +export const getAccounts = memoize( + async (provider: EthereumProvider): Promise => + provider.send("eth_accounts") +); diff --git a/packages/hardhat-viem/src/internal/chains.ts b/packages/hardhat-viem/src/internal/chains.ts new file mode 100644 index 0000000000..013f62b9ae --- /dev/null +++ b/packages/hardhat-viem/src/internal/chains.ts @@ -0,0 +1,97 @@ +import type { EthereumProvider } from "hardhat/types"; +import type { Chain } from "viem"; +import type { TestClientMode } from "../types"; + +import memoize from "lodash.memoize"; + +import { + UnknownDevelopmentNetworkError, + NetworkNotFoundError, + MultipleMatchingNetworksError, +} from "./errors"; + +export async function getChain(provider: EthereumProvider): Promise { + const chains: Record = require("viem/chains"); + const chainId = await getChainId(provider); + + if (isDevelopmentNetwork(chainId)) { + if (await isHardhatNetwork(provider)) { + return chains.hardhat; + } else if (await isFoundryNetwork(provider)) { + return chains.foundry; + } else { + throw new UnknownDevelopmentNetworkError(); + } + } + + const matchingChains = Object.values(chains).filter( + ({ id }) => id === chainId + ); + + if (matchingChains.length === 0) { + if (await isHardhatNetwork(provider)) { + return { + ...chains.hardhat, + id: chainId, + }; + } else if (await isFoundryNetwork(provider)) { + return { + ...chains.foundry, + id: chainId, + }; + } else { + throw new NetworkNotFoundError(chainId); + } + } + + if (matchingChains.length > 1) { + throw new MultipleMatchingNetworksError(chainId); + } + + return matchingChains[0]; +} + +export function isDevelopmentNetwork(chainId: number) { + return chainId === 31337; +} + +export async function getMode( + provider: EthereumProvider +): Promise { + if (await isHardhatNetwork(provider)) { + return "hardhat"; + } else if (await isFoundryNetwork(provider)) { + return "anvil"; + } else { + throw new UnknownDevelopmentNetworkError(); + } +} + +const getChainId = memoize(async (provider: EthereumProvider) => + Number(await provider.send("eth_chainId")) +); + +const isHardhatNetwork = memoize(async (provider: EthereumProvider) => + detectNetworkByMethodName(provider, NetworkMethod.HARDHAT_METADATA) +); + +const isFoundryNetwork = memoize(async (provider: EthereumProvider) => + detectNetworkByMethodName(provider, NetworkMethod.ANVIL_NODE_INFO) +); + +enum NetworkMethod { + HARDHAT_METADATA = "hardhat_metadata", + ANVIL_NODE_INFO = "anvil_nodeInfo", +} + +async function detectNetworkByMethodName( + provider: EthereumProvider, + methodName: string +) { + try { + await provider.send(methodName); + return true; + } catch { + return false; + } +} diff --git a/packages/hardhat-viem/src/internal/clients.ts b/packages/hardhat-viem/src/internal/clients.ts new file mode 100644 index 0000000000..2fef4a7fcb --- /dev/null +++ b/packages/hardhat-viem/src/internal/clients.ts @@ -0,0 +1,152 @@ +import type { EthereumProvider } from "hardhat/types"; +import type { + Address, + Chain, + PublicClientConfig, + WalletClientConfig, + TestClientConfig, +} from "viem"; +import type { + PublicClient, + TestClient, + TestClientMode, + WalletClient, +} from "../types"; + +import { getChain, getMode, isDevelopmentNetwork } from "./chains"; +import { getAccounts } from "./accounts"; + +/** + * Get a PublicClient instance. This is a read-only client that can be used to + * query the blockchain. + * + * @param provider The Ethereum provider used to connect to the blockchain. + * @param publicClientConfig Optional configuration for the PublicClient instance. See the viem documentation for more information. + * @returns A PublicClient instance. + */ +export async function getPublicClient( + provider: EthereumProvider, + publicClientConfig?: Partial +): Promise { + const chain = publicClientConfig?.chain ?? (await getChain(provider)); + return innerGetPublicClient(provider, chain, publicClientConfig); +} + +export async function innerGetPublicClient( + provider: EthereumProvider, + chain: Chain, + publicClientConfig?: Partial +): Promise { + const viem = await import("viem"); + const defaultParameters = isDevelopmentNetwork(chain.id) + ? { pollingInterval: 50, cacheTime: 0 } + : {}; + const parameters = { ...defaultParameters, ...publicClientConfig }; + + const publicClient = viem.createPublicClient({ + chain, + transport: viem.custom(provider), + ...parameters, + }); + + return publicClient; +} + +/** + * Get a list of WalletClient instances. These are read-write clients that can + * be used to send transactions to the blockchain. Each client is associated + * with a an account obtained from the provider using `eth_accounts`. + * + * @param provider The Ethereum provider used to connect to the blockchain. + * @param walletClientConfig Optional configuration for the WalletClient instances. See the viem documentation for more information. + * @returns A list of WalletClient instances. + */ +export async function getWalletClients( + provider: EthereumProvider, + walletClientConfig?: Partial +): Promise { + const chain = walletClientConfig?.chain ?? (await getChain(provider)); + const accounts = await getAccounts(provider); + return innerGetWalletClients(provider, chain, accounts, walletClientConfig); +} + +export async function innerGetWalletClients( + provider: EthereumProvider, + chain: Chain, + accounts: Address[], + walletClientConfig?: Partial +): Promise { + const viem = await import("viem"); + const defaultParameters = isDevelopmentNetwork(chain.id) + ? { pollingInterval: 50, cacheTime: 0 } + : {}; + const parameters = { ...defaultParameters, ...walletClientConfig }; + + const walletClients = accounts.map((account) => + viem.createWalletClient({ + chain, + account, + transport: viem.custom(provider), + ...parameters, + }) + ); + + return walletClients; +} + +/** + * Get a WalletClient instance for a specific address. This is a read-write + * client that can be used to send transactions to the blockchain. + * + * @param provider The Ethereum provider used to connect to the blockchain. + * @param address The public address of the account to use. + * @param walletClientConfig Optional configuration for the WalletClient instance. See the viem documentation for more information. + * @returns A WalletClient instance. + */ +export async function getWalletClient( + provider: EthereumProvider, + address: Address, + walletClientConfig?: Partial +): Promise { + const chain = walletClientConfig?.chain ?? (await getChain(provider)); + return ( + await innerGetWalletClients(provider, chain, [address], walletClientConfig) + )[0]; +} + +/** + * Get a TestClient instance. This is a read-write client that can be used to + * perform actions only available on test nodes such as hardhat or anvil. + * + * @param provider The Ethereum provider used to connect to the blockchain. + * @param testClientConfig Optional configuration for the TestClient instance. See the viem documentation for more information. + * @returns A TestClient instance. + */ +export async function getTestClient( + provider: EthereumProvider, + testClientConfig?: Partial +): Promise { + const chain = testClientConfig?.chain ?? (await getChain(provider)); + const mode = await getMode(provider); + return innerGetTestClient(provider, chain, mode, testClientConfig); +} + +export async function innerGetTestClient( + provider: EthereumProvider, + chain: Chain, + mode: TestClientMode, + testClientConfig?: Partial +): Promise { + const viem = await import("viem"); + const defaultParameters = { pollingInterval: 50, cacheTime: 0 }; + const parameters = { ...defaultParameters, ...testClientConfig }; + + const testClient = viem.createTestClient({ + mode, + chain, + transport: viem.custom(provider), + ...parameters, + }); + + return testClient; +} diff --git a/packages/hardhat-viem/src/internal/contracts.ts b/packages/hardhat-viem/src/internal/contracts.ts new file mode 100644 index 0000000000..a5c8b1359f --- /dev/null +++ b/packages/hardhat-viem/src/internal/contracts.ts @@ -0,0 +1,247 @@ +import type { + EthereumProvider, + HardhatRuntimeEnvironment, +} from "hardhat/types"; +import type { Abi, Address, Hex } from "viem"; +import type { + DeployContractConfig, + GetContractAtConfig, + GetContractReturnType, + GetTransactionReturnType, + PublicClient, + SendDeploymentTransactionConfig, + WalletClient, +} from "../types"; + +import { getPublicClient, getWalletClients } from "./clients"; +import { + DefaultWalletClientNotFoundError, + DeployContractError, + HardhatViemError, + InvalidConfirmationsError, +} from "./errors"; + +export async function deployContract( + { artifacts, network }: HardhatRuntimeEnvironment, + contractName: string, + constructorArgs: any[] = [], + config: DeployContractConfig = {} +): Promise { + const { + walletClient: configWalletClient, + publicClient: configPublicClient, + confirmations, + ...deployContractParameters + } = config; + const [publicClient, walletClient, contractArtifact] = await Promise.all([ + configPublicClient ?? getPublicClient(network.provider), + configWalletClient ?? + getDefaultWalletClient(network.provider, network.name), + artifacts.readArtifact(contractName), + ]); + + return innerDeployContract( + publicClient, + walletClient, + contractArtifact.abi, + contractArtifact.bytecode as Hex, + constructorArgs, + deployContractParameters, + confirmations + ); +} + +export async function innerDeployContract( + publicClient: PublicClient, + walletClient: WalletClient, + contractAbi: Abi, + contractBytecode: Hex, + constructorArgs: any[], + deployContractParameters: DeployContractConfig = {}, + confirmations: number = 1 +): Promise { + let deploymentTxHash: Hex; + // If gasPrice is defined, then maxFeePerGas and maxPriorityFeePerGas + // must be undefined because it's a legaxy tx. + if (deployContractParameters.gasPrice !== undefined) { + deploymentTxHash = await walletClient.deployContract({ + abi: contractAbi, + bytecode: contractBytecode, + args: constructorArgs, + ...deployContractParameters, + maxFeePerGas: undefined, + maxPriorityFeePerGas: undefined, + }); + } else { + deploymentTxHash = await walletClient.deployContract({ + abi: contractAbi, + bytecode: contractBytecode, + args: constructorArgs, + ...deployContractParameters, + gasPrice: undefined, + }); + } + + if (confirmations < 0) { + throw new HardhatViemError("Confirmations must be greater than 0."); + } + if (confirmations === 0) { + throw new InvalidConfirmationsError(); + } + + const { contractAddress } = await publicClient.waitForTransactionReceipt({ + hash: deploymentTxHash, + confirmations, + }); + + if (contractAddress === null) { + const transaction = await publicClient.getTransaction({ + hash: deploymentTxHash, + }); + throw new DeployContractError(deploymentTxHash, transaction.blockNumber); + } + + const contract = await innerGetContractAt( + publicClient, + walletClient, + contractAbi, + contractAddress + ); + + return contract; +} + +export async function sendDeploymentTransaction( + { artifacts, network }: HardhatRuntimeEnvironment, + contractName: string, + constructorArgs: any[] = [], + config: SendDeploymentTransactionConfig = {} +): Promise<{ + contract: GetContractReturnType; + deploymentTransaction: GetTransactionReturnType; +}> { + const { + walletClient: configWalletClient, + publicClient: configPublicClient, + ...deployContractParameters + } = config; + const [publicClient, walletClient, contractArtifact] = await Promise.all([ + configPublicClient ?? getPublicClient(network.provider), + configWalletClient ?? + getDefaultWalletClient(network.provider, network.name), + artifacts.readArtifact(contractName), + ]); + + return innerSendDeploymentTransaction( + publicClient, + walletClient, + contractArtifact.abi, + contractArtifact.bytecode as Hex, + constructorArgs, + deployContractParameters + ); +} + +async function innerSendDeploymentTransaction( + publicClient: PublicClient, + walletClient: WalletClient, + contractAbi: Abi, + contractBytecode: Hex, + constructorArgs: any[], + deployContractParameters: SendDeploymentTransactionConfig = {} +): Promise<{ + contract: GetContractReturnType; + deploymentTransaction: GetTransactionReturnType; +}> { + let deploymentTxHash: Hex; + // If gasPrice is defined, then maxFeePerGas and maxPriorityFeePerGas + // must be undefined because it's a legaxy tx. + if (deployContractParameters.gasPrice !== undefined) { + deploymentTxHash = await walletClient.deployContract({ + abi: contractAbi, + bytecode: contractBytecode, + args: constructorArgs, + ...deployContractParameters, + maxFeePerGas: undefined, + maxPriorityFeePerGas: undefined, + }); + } else { + deploymentTxHash = await walletClient.deployContract({ + abi: contractAbi, + bytecode: contractBytecode, + args: constructorArgs, + ...deployContractParameters, + gasPrice: undefined, + }); + } + + const deploymentTx = await publicClient.getTransaction({ + hash: deploymentTxHash, + }); + + const { getContractAddress } = await import("viem"); + const contractAddress = getContractAddress({ + from: walletClient.account.address, + nonce: BigInt(deploymentTx.nonce), + }); + + const contract = await innerGetContractAt( + publicClient, + walletClient, + contractAbi, + contractAddress + ); + + return { contract, deploymentTransaction: deploymentTx }; +} + +export async function getContractAt( + { artifacts, network }: HardhatRuntimeEnvironment, + contractName: string, + address: Address, + config: GetContractAtConfig = {} +): Promise { + const [publicClient, walletClient, contractArtifact] = await Promise.all([ + config.publicClient ?? getPublicClient(network.provider), + config.walletClient ?? + getDefaultWalletClient(network.provider, network.name), + artifacts.readArtifact(contractName), + ]); + + return innerGetContractAt( + publicClient, + walletClient, + contractArtifact.abi, + address + ); +} + +async function innerGetContractAt( + publicClient: PublicClient, + walletClient: WalletClient, + contractAbi: Abi, + address: Address +): Promise { + const viem = await import("viem"); + const contract = viem.getContract({ + address, + publicClient, + walletClient, + abi: contractAbi, + }); + + return contract; +} + +async function getDefaultWalletClient( + provider: EthereumProvider, + networkName: string +): Promise { + const [defaultWalletClient] = await getWalletClients(provider); + + if (defaultWalletClient === undefined) { + throw new DefaultWalletClientNotFoundError(networkName); + } + + return defaultWalletClient; +} diff --git a/packages/hardhat-viem/src/internal/errors.ts b/packages/hardhat-viem/src/internal/errors.ts new file mode 100644 index 0000000000..324c6a8b53 --- /dev/null +++ b/packages/hardhat-viem/src/internal/errors.ts @@ -0,0 +1,76 @@ +import { NomicLabsHardhatPluginError } from "hardhat/plugins"; + +export class HardhatViemError extends NomicLabsHardhatPluginError { + constructor(message: string, parent?: Error) { + super("@nomicfoundation/hardhat-viem", message, parent); + } +} + +export class UnknownDevelopmentNetworkError extends HardhatViemError { + constructor() { + super(`The chain id corresponds to a development network but we couldn't detect which one. +Please report this issue if you're using Hardhat or Foundry.`); + } +} + +export class NetworkNotFoundError extends HardhatViemError { + constructor(chainId: number) { + super( + `No network with chain id ${chainId} found. You can override the chain by passing it as a parameter to the client getter: + +import { someChain } from "viem/chains"; +const client = await hre.viem.getPublicClient({ + chain: someChain, + ... +}); + +You can find a list of supported networks here: https://viem.sh/docs/clients/chains.html` + ); + } +} + +export class MultipleMatchingNetworksError extends HardhatViemError { + constructor(chainId: number) { + super( + `Multiple networks with chain id ${chainId} found. You can override the chain by passing it as a parameter to the client getter: + +import { someChain } from "viem/chains"; +const client = await hre.viem.getPublicClient({ + chain: someChain, + ... +}); + +You can find a list of supported networks here: https://viem.sh/docs/clients/chains.html` + ); + } +} + +export class DefaultWalletClientNotFoundError extends HardhatViemError { + constructor(networkName: string) { + super( + `Default wallet client not found. This can happen if no accounts were configured for this network (network: '${networkName}'). + +Alternatively, you can set a custom wallet client by passing it as a parameter in the deployContract function: + +const walletClient = await hre.viem.getWalletClient(address); +const contractA = await hre.viem.deployContract("A", [], { walletClient }); +const contractB = await hre.viem.getContractAt("B", address, { walletClient });` + ); + } +} + +export class InvalidConfirmationsError extends HardhatViemError { + constructor() { + super( + "deployContract does not support 0 confirmations. Use sendDeploymentTransaction if you want to handle the deployment transaction yourself." + ); + } +} + +export class DeployContractError extends HardhatViemError { + constructor(txHash: string, blockNumber: bigint) { + super( + `The deployment transaction '${txHash}' was mined in block '${blockNumber}' but its receipt doesn't contain a contract address` + ); + } +} diff --git a/packages/hardhat-viem/src/internal/tasks.ts b/packages/hardhat-viem/src/internal/tasks.ts new file mode 100644 index 0000000000..7e053a051b --- /dev/null +++ b/packages/hardhat-viem/src/internal/tasks.ts @@ -0,0 +1,319 @@ +import type { Artifact, Artifacts } from "hardhat/types"; +import type { ArtifactsEmittedPerFile } from "hardhat/types/builtin-tasks"; + +import { join, dirname, relative } from "path"; +import { mkdir, writeFile, rm } from "fs/promises"; + +import { subtask } from "hardhat/config"; +import { + TASK_COMPILE_SOLIDITY_EMIT_ARTIFACTS, + TASK_COMPILE_SOLIDITY, + TASK_COMPILE_REMOVE_OBSOLETE_ARTIFACTS, +} from "hardhat/builtin-tasks/task-names"; +import { + getFullyQualifiedName, + parseFullyQualifiedName, +} from "hardhat/utils/contract-names"; +import { getAllFilesMatching } from "hardhat/internal/util/fs-utils"; +import { replaceBackslashes } from "hardhat/utils/source-names"; + +interface EmittedArtifacts { + artifactsEmittedPerFile: ArtifactsEmittedPerFile; +} + +/** + * Override task that generates an `artifacts.d.ts` file with `never` + * types for duplicate contract names. This file is used in conjunction with + * the `artifacts.d.ts` file inside each contract directory to type + * `hre.artifacts`. + */ +subtask(TASK_COMPILE_SOLIDITY).setAction( + async (_, { config, artifacts }, runSuper) => { + const superRes = await runSuper(); + + const duplicateContractNames = await findDuplicateContractNames(artifacts); + + const duplicateArtifactsDTs = generateDuplicateArtifactsDefinition( + duplicateContractNames + ); + + try { + await writeFile( + join(config.paths.artifacts, "artifacts.d.ts"), + duplicateArtifactsDTs + ); + } catch (error) { + console.error("Error writing artifacts definition:", error); + } + + return superRes; + } +); + +/** + * Override task to emit TypeScript and definition files for each contract. + * Generates a `.d.ts` file per contract, and a `artifacts.d.ts` per solidity + * file, which is used in conjunction to the root `artifacts.d.ts` + * to type `hre.artifacts`. + */ +subtask(TASK_COMPILE_SOLIDITY_EMIT_ARTIFACTS).setAction( + async (_, { artifacts, config }, runSuper): Promise => { + const { artifactsEmittedPerFile }: EmittedArtifacts = await runSuper(); + const duplicateContractNames = await findDuplicateContractNames(artifacts); + + await Promise.all( + artifactsEmittedPerFile.map(async ({ file, artifactsEmitted }) => { + const srcDir = join(config.paths.artifacts, file.sourceName); + await mkdir(srcDir, { + recursive: true, + }); + + const contractTypeData = await Promise.all( + artifactsEmitted.map(async (contractName) => { + const fqn = getFullyQualifiedName(file.sourceName, contractName); + const artifact = await artifacts.readArtifact(fqn); + const isDuplicate = duplicateContractNames.has(contractName); + const declaration = generateContractDeclaration( + artifact, + isDuplicate + ); + + const typeName = `${contractName}$Type`; + + return { contractName, fqn, typeName, declaration }; + }) + ); + + const fp: Array> = []; + for (const { contractName, declaration } of contractTypeData) { + fp.push(writeFile(join(srcDir, `${contractName}.d.ts`), declaration)); + } + + const dTs = generateArtifactsDefinition(contractTypeData); + fp.push(writeFile(join(srcDir, "artifacts.d.ts"), dTs)); + + try { + await Promise.all(fp); + } catch (error) { + console.error("Error writing artifacts definition:", error); + } + }) + ); + + return { artifactsEmittedPerFile }; + } +); + +/** + * Override task for cleaning up outdated artifacts. + * Deletes directories with stale `artifacts.d.ts` files that no longer have + * a matching `.sol` file. + */ +subtask(TASK_COMPILE_REMOVE_OBSOLETE_ARTIFACTS).setAction( + async (_, { config, artifacts }, runSuper) => { + const superRes = await runSuper(); + + const fqns = await artifacts.getAllFullyQualifiedNames(); + const existingSourceNames = new Set( + fqns.map((fqn) => parseFullyQualifiedName(fqn).sourceName) + ); + const allArtifactsDTs = await getAllFilesMatching( + config.paths.artifacts, + (f) => f.endsWith("artifacts.d.ts") + ); + + for (const artifactDTs of allArtifactsDTs) { + const dir = dirname(artifactDTs); + const sourceName = replaceBackslashes( + relative(config.paths.artifacts, dir) + ); + // If sourceName is empty, it means that the artifacts.d.ts file is in the + // root of the artifacts directory, and we shouldn't delete it. + if (sourceName === "") { + continue; + } + + if (!existingSourceNames.has(sourceName)) { + await rm(dir, { force: true, recursive: true }); + } + } + + return superRes; + } +); + +const AUTOGENERATED_FILE_PREFACE = `// This file was autogenerated by hardhat-viem, do not edit it. +// prettier-ignore +// tslint:disable +// eslint-disable`; + +/** + * Generates TypeScript code that extends the `ArtifactsMap` with `never` types + * for duplicate contract names. + */ +function generateDuplicateArtifactsDefinition( + duplicateContractNames: Set +) { + return `${AUTOGENERATED_FILE_PREFACE} + +import "hardhat/types/artifacts"; + +declare module "hardhat/types/artifacts" { + interface ArtifactsMap { + ${Array.from(duplicateContractNames) + .map((name) => `${name}: never;`) + .join("\n ")} + } +} +`; +} + +/** + * Generates TypeScript code to declare a contract and its associated + * TypeScript types. + */ +function generateContractDeclaration(artifact: Artifact, isDuplicate: boolean) { + const { contractName, sourceName } = artifact; + const fqn = getFullyQualifiedName(sourceName, contractName); + const validNames = isDuplicate ? [fqn] : [contractName, fqn]; + const json = JSON.stringify(artifact, undefined, 2); + const contractTypeName = `${contractName}$Type`; + + const constructorAbi = artifact.abi.find( + ({ type }) => type === "constructor" + ); + + const inputs: Array<{ + internalType: string; + name: string; + type: string; + }> = constructorAbi !== undefined ? constructorAbi.inputs : []; + + const constructorArgs = + inputs.length > 0 + ? `constructorArgs: [${inputs + .map(({ name, type }) => getArgType(name, type)) + .join(", ")}]` + : `constructorArgs?: []`; + + return `${AUTOGENERATED_FILE_PREFACE} + +import type { Address } from "viem"; +${ + inputs.length > 0 + ? `import type { AbiParameterToPrimitiveType, GetContractReturnType } from "@nomicfoundation/hardhat-viem/types";` + : `import type { GetContractReturnType } from "@nomicfoundation/hardhat-viem/types";` +} +import "@nomicfoundation/hardhat-viem/types"; + +export interface ${contractTypeName} ${json} + +declare module "@nomicfoundation/hardhat-viem/types" { + ${validNames + .map( + (name) => `export function deployContract( + contractName: "${name}", + ${constructorArgs}, + config?: DeployContractConfig + ): Promise>;` + ) + .join("\n ")} + + ${validNames + .map( + (name) => `export function sendDeploymentTransaction( + contractName: "${name}", + ${constructorArgs}, + config?: SendDeploymentTransactionConfig + ): Promise<{ + contract: GetContractReturnType<${contractTypeName}["abi"]>; + deploymentTransaction: GetTransactionReturnType; + }>;` + ) + .join("\n ")} + + ${validNames + .map( + (name) => `export function getContractAt( + contractName: "${name}", + address: Address, + config?: GetContractAtConfig + ): Promise>;` + ) + .join("\n ")} +} +`; +} + +/** + * Generates TypeScript code to extend the `ArtifactsMap` interface with + * contract types. + */ +function generateArtifactsDefinition( + contractTypeData: Array<{ + contractName: string; + fqn: string; + typeName: string; + declaration: string; + }> +) { + return `${AUTOGENERATED_FILE_PREFACE} + +import "hardhat/types/artifacts"; + +${contractTypeData + .map((ctd) => `import { ${ctd.typeName} } from "./${ctd.contractName}";`) + .join("\n")} + +declare module "hardhat/types/artifacts" { + interface ArtifactsMap { + ${contractTypeData + .map((ctd) => `["${ctd.contractName}"]: ${ctd.typeName};`) + .join("\n ")} + ${contractTypeData + .map((ctd) => `["${ctd.fqn}"]: ${ctd.typeName};`) + .join("\n ")} + } +} +`; +} + +/** + * Returns the type of a function argument in one of the following formats: + * - If the 'name' is provided: + * "name: AbiParameterToPrimitiveType<{ name: string; type: string; }>" + * + * - If the 'name' is empty: + * "AbiParameterToPrimitiveType<{ name: string; type: string; }>" + */ +function getArgType(name: string | undefined, type: string) { + const argType = `AbiParameterToPrimitiveType<${JSON.stringify({ + name, + type, + })}>`; + + return name !== "" && name !== undefined ? `${name}: ${argType}` : argType; +} + +/** + * Returns a set of duplicate contract names. + */ +async function findDuplicateContractNames(artifacts: Artifacts) { + const fqns = await artifacts.getAllFullyQualifiedNames(); + const contractNames = fqns.map( + (fqn) => parseFullyQualifiedName(fqn).contractName + ); + + const duplicates = new Set(); + const existing = new Set(); + + for (const name of contractNames) { + if (existing.has(name)) { + duplicates.add(name); + } + + existing.add(name); + } + + return duplicates; +} diff --git a/packages/hardhat-viem/src/internal/type-extensions.ts b/packages/hardhat-viem/src/internal/type-extensions.ts new file mode 100644 index 0000000000..8310439a2e --- /dev/null +++ b/packages/hardhat-viem/src/internal/type-extensions.ts @@ -0,0 +1,54 @@ +import type { + Address, + PublicClientConfig, + WalletClientConfig, + TestClientConfig, +} from "viem"; +import type { + PublicClient, + TestClient, + WalletClient, + deployContract, + sendDeploymentTransaction, + getContractAt, +} from "../types"; +import "hardhat/types/runtime"; +import "hardhat/types/artifacts"; + +declare module "hardhat/types/runtime" { + interface HardhatRuntimeEnvironment { + viem: { + getPublicClient( + publicClientConfig?: Partial + ): Promise; + getWalletClients( + walletClientConfig?: Partial + ): Promise; + getWalletClient( + address: Address, + walletClientConfig?: Partial + ): Promise; + getTestClient( + testClientConfig?: Partial + ): Promise; + deployContract: typeof deployContract; + sendDeploymentTransaction: typeof sendDeploymentTransaction; + getContractAt: typeof getContractAt; + }; + } +} + +declare module "hardhat/types/artifacts" { + // eslint-disable-next-line @typescript-eslint/no-empty-interface + interface ArtifactsMap {} + + interface Artifacts { + readArtifact( + contractNameOrFullyQualifiedName: ArgT + ): Promise; + + readArtifactSync( + contractNameOrFullyQualifiedName: ArgT + ): ArtifactsMap[ArgT]; + } +} diff --git a/packages/hardhat-viem/src/tsconfig.json b/packages/hardhat-viem/src/tsconfig.json new file mode 100644 index 0000000000..aa452dcdf7 --- /dev/null +++ b/packages/hardhat-viem/src/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../../config/typescript/tsconfig.json", + "compilerOptions": { + "outDir": "../", + "rootDirs": ["."], + "composite": true + }, + "include": ["./**/*.ts"], + "exclude": [], + "references": [ + { + "path": "../../hardhat-core/src" + } + ] +} diff --git a/packages/hardhat-viem/src/types.ts b/packages/hardhat-viem/src/types.ts new file mode 100644 index 0000000000..39071d2e6c --- /dev/null +++ b/packages/hardhat-viem/src/types.ts @@ -0,0 +1,79 @@ +import type * as viemT from "viem"; +import type { ArtifactsMap } from "hardhat/types/artifacts"; + +export type PublicClient = viemT.PublicClient; +export type WalletClient = viemT.WalletClient< + viemT.Transport, + viemT.Chain, + viemT.Account +>; +export type TestClient = viemT.TestClient< + TestClientMode, + viemT.Transport, + viemT.Chain +>; + +export type TestClientMode = Parameters< + typeof viemT.createTestClient +>[0]["mode"]; + +export interface SendTransactionConfig { + walletClient?: WalletClient; + publicClient?: PublicClient; + gas?: bigint; + gasPrice?: bigint; + maxFeePerGas?: bigint; + maxPriorityFeePerGas?: bigint; + value?: bigint; +} + +export interface DeployContractConfig extends SendTransactionConfig { + confirmations?: number; +} + +export type SendDeploymentTransactionConfig = SendTransactionConfig; + +export interface GetContractAtConfig { + walletClient?: WalletClient; + publicClient?: PublicClient; +} + +export type GetContractReturnType< + TAbi extends viemT.Abi | readonly unknown[] = viemT.Abi +> = viemT.GetContractReturnType< + TAbi, + PublicClient, + WalletClient, + viemT.Address +>; + +export type GetTransactionReturnType = viemT.GetTransactionReturnType< + viemT.Chain, + "latest" +>; + +export type ContractName = + StringT extends keyof ArtifactsMap ? never : StringT; + +export declare function deployContract( + contractName: ContractName, + constructorArgs?: any[], + config?: DeployContractConfig +): Promise; + +export declare function sendDeploymentTransaction( + contractName: ContractName, + constructorArgs?: any[], + config?: SendDeploymentTransactionConfig +): Promise<{ + contract: GetContractReturnType; + deploymentTransaction: GetTransactionReturnType; +}>; + +export declare function getContractAt( + contractName: ContractName, + address: viemT.Address, + config?: GetContractAtConfig +): Promise; + +export type { AbiParameterToPrimitiveType } from "abitype"; diff --git a/packages/hardhat-viem/test/.eslintrc.js b/packages/hardhat-viem/test/.eslintrc.js new file mode 100644 index 0000000000..757fe8a3ca --- /dev/null +++ b/packages/hardhat-viem/test/.eslintrc.js @@ -0,0 +1,15 @@ +module.exports = { + extends: [`${__dirname}/../.eslintrc.js`], + parserOptions: { + project: `${__dirname}/../tsconfig.json`, + sourceType: "module", + }, + rules: { + "import/no-extraneous-dependencies": [ + "error", + { + devDependencies: true, + }, + ], + }, +}; diff --git a/packages/hardhat-viem/test/chains.ts b/packages/hardhat-viem/test/chains.ts new file mode 100644 index 0000000000..bee7e82679 --- /dev/null +++ b/packages/hardhat-viem/test/chains.ts @@ -0,0 +1,165 @@ +import type { EthereumProvider } from "hardhat/types"; + +import { expect, assert } from "chai"; +import sinon from "sinon"; +import * as chains from "viem/chains"; + +import { + getChain, + getMode, + isDevelopmentNetwork, +} from "../src/internal/chains"; +import { EthereumMockedProvider } from "./mocks/provider"; + +describe("chains", () => { + describe("getChain", () => { + afterEach(sinon.restore); + + it("should return the chain corresponding to the chain id", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + const sendStub = sinon.stub(provider, "send"); + sendStub.withArgs("eth_chainId").returns(Promise.resolve("0x1")); // mainnet chain id + sendStub.withArgs("hardhat_metadata").throws(); + sendStub.withArgs("anvil_nodeInfo").throws(); + + const chain = await getChain(provider); + + expect(chain).to.deep.equal(chains.mainnet); + assert.equal(sendStub.callCount, 1); + }); + + it("should return the hardhat chain if the chain id is 31337 and the network is hardhat", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + const sendStub = sinon.stub(provider, "send"); + sendStub.withArgs("eth_chainId").returns(Promise.resolve("0x7a69")); // 31337 in hex + sendStub.withArgs("hardhat_metadata").returns(Promise.resolve({})); + sendStub.withArgs("anvil_nodeInfo").throws(); + + const chain = await getChain(provider); + + expect(chain).to.deep.equal(chains.hardhat); + }); + + it("should return the foundry chain if the chain id is 31337 and the network is foundry", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + const sendStub = sinon.stub(provider, "send"); + sendStub.withArgs("eth_chainId").returns(Promise.resolve("0x7a69")); // 31337 in hex + sendStub.withArgs("hardhat_metadata").throws(); + sendStub.withArgs("anvil_nodeInfo").returns(Promise.resolve({})); + + const chain = await getChain(provider); + + expect(chain).to.deep.equal(chains.foundry); + }); + + it("should throw if the chain id is 31337 and the network is neither hardhat nor foundry", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + const sendStub = sinon.stub(provider, "send"); + sendStub.withArgs("eth_chainId").returns(Promise.resolve("0x7a69")); // 31337 in hex + sendStub.withArgs("hardhat_metadata").throws(); + sendStub.withArgs("anvil_nodeInfo").throws(); + + await expect(getChain(provider)).to.be.rejectedWith( + `The chain id corresponds to a development network but we couldn't detect which one. +Please report this issue if you're using Hardhat or Foundry.` + ); + }); + + it("should throw if the chain id is not 31337 and there is no chain with that id", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + const sendStub = sinon.stub(provider, "send"); + sendStub.withArgs("eth_chainId").returns(Promise.resolve("0x0")); // fake chain id 0 + sendStub.withArgs("hardhat_metadata").throws(); + sendStub.withArgs("anvil_nodeInfo").throws(); + + await expect(getChain(provider)).to.be.rejectedWith( + /No network with chain id 0 found/ + ); + }); + + it("should throw if the chain id is not 31337 and there are multiple chains with that id", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + const sendStub = sinon.stub(provider, "send"); + // chain id 999 corresponds to Wanchain Testnet but also Zora Goerli Testnet + sendStub.withArgs("eth_chainId").returns(Promise.resolve("0x3e7")); + sendStub.withArgs("hardhat_metadata").throws(); + sendStub.withArgs("anvil_nodeInfo").throws(); + + await expect(getChain(provider)).to.be.rejectedWith( + /Multiple networks with chain id 999 found./ + ); + }); + }); + + describe("isDevelopmentNetwork", () => { + it("should return true if the chain id is 31337", () => { + assert.ok(isDevelopmentNetwork(31337)); + }); + + it("should return false if the chain id is not 31337", () => { + assert.notOk(isDevelopmentNetwork(1)); + }); + }); + + describe("getMode", () => { + it("should return hardhat if the network is hardhat", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + const sendStub = sinon.stub(provider, "send"); + sendStub.withArgs("hardhat_metadata").returns(Promise.resolve({})); + sendStub.withArgs("anvil_nodeInfo").throws(); + + const mode = await getMode(provider); + + expect(mode).to.equal("hardhat"); + }); + + it("should return anvil if the network is foundry", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + const sendStub = sinon.stub(provider, "send"); + sendStub.withArgs("hardhat_metadata").throws(); + sendStub.withArgs("anvil_nodeInfo").returns(Promise.resolve({})); + + const mode = await getMode(provider); + + expect(mode).to.equal("anvil"); + }); + + it("should throw if the network is neither hardhat nor foundry", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + const sendStub = sinon.stub(provider, "send"); + sendStub.withArgs("hardhat_metadata").throws(); + sendStub.withArgs("anvil_nodeInfo").throws(); + + await expect(getMode(provider)).to.be.rejectedWith( + `The chain id corresponds to a development network but we couldn't detect which one. +Please report this issue if you're using Hardhat or Foundry.` + ); + }); + + it("should return a hardhat chain with the custom chainId", async function () { + const provider: EthereumProvider = new EthereumMockedProvider(); + const sendStub = sinon.stub(provider, "send"); + sendStub.withArgs("eth_chainId").returns(Promise.resolve("0x3039")); // 12345 in hex + sendStub.withArgs("hardhat_metadata").returns(Promise.resolve({})); + sendStub.withArgs("anvil_nodeInfo").throws(); + + const chain = await getChain(provider); + + expect(chain.id).to.equal(12345); + expect(chain.name).to.equal("Hardhat"); + }); + + it("should return a foundry chain with the custom chainId", async function () { + const provider: EthereumProvider = new EthereumMockedProvider(); + const sendStub = sinon.stub(provider, "send"); + sendStub.withArgs("eth_chainId").returns(Promise.resolve("0x3039")); // 12345 in hex + sendStub.withArgs("anvil_nodeInfo").returns(Promise.resolve({})); + sendStub.withArgs("hardhat_metadata").throws(); + + const chain = await getChain(provider); + + expect(chain.id).to.equal(12345); + expect(chain.name).to.equal("Foundry"); + }); + }); +}); diff --git a/packages/hardhat-viem/test/clients.ts b/packages/hardhat-viem/test/clients.ts new file mode 100644 index 0000000000..399f8d0b82 --- /dev/null +++ b/packages/hardhat-viem/test/clients.ts @@ -0,0 +1,174 @@ +import type { EthereumProvider } from "hardhat/types"; + +import { assert } from "chai"; +import * as chains from "viem/chains"; + +import { + innerGetPublicClient, + innerGetWalletClients, + innerGetTestClient, +} from "../src/internal/clients"; +import { EthereumMockedProvider } from "./mocks/provider"; + +describe("clients", () => { + describe("innerGetPublicClient", () => { + it("should return a public client", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + + const client = await innerGetPublicClient(provider, chains.mainnet); + + assert.isDefined(client); + assert.equal(client.type, "publicClient"); + assert.equal(client.chain.id, chains.mainnet.id); + }); + + it("should return a public client with custom parameters", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + + const client = await innerGetPublicClient(provider, chains.mainnet, { + pollingInterval: 1000, + cacheTime: 2000, + }); + + assert.equal(client.pollingInterval, 1000); + assert.equal(client.cacheTime, 2000); + }); + + it("should return a public client with default parameters for development networks", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + + const client = await innerGetPublicClient(provider, chains.hardhat); + + assert.equal(client.pollingInterval, 50); + assert.equal(client.cacheTime, 0); + }); + }); + + describe("innerGetWalletClients", () => { + it("should return a list of wallet clients", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + + const clients = await innerGetWalletClients(provider, chains.mainnet, [ + "0x1", + "0x2", + ]); + + assert.isArray(clients); + assert.isNotEmpty(clients); + clients.forEach((client) => { + assert.equal(client.type, "walletClient"); + assert.equal(client.chain.id, chains.mainnet.id); + }); + assert.equal(clients[0].account.address, "0x1"); + assert.equal(clients[1].account.address, "0x2"); + }); + + it("should return a list of wallet clients with custom parameters", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + + const clients = await innerGetWalletClients( + provider, + chains.mainnet, + ["0x1", "0x2"], + { + pollingInterval: 1000, + cacheTime: 2000, + } + ); + + assert.isArray(clients); + assert.isNotEmpty(clients); + clients.forEach((client) => { + assert.equal(client.pollingInterval, 1000); + assert.equal(client.cacheTime, 2000); + }); + }); + + it("should return a list of wallet clients with default parameters for development networks", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + + const clients = await innerGetWalletClients(provider, chains.hardhat, [ + "0x1", + "0x2", + ]); + + assert.isArray(clients); + assert.isNotEmpty(clients); + clients.forEach((client) => { + assert.equal(client.pollingInterval, 50); + assert.equal(client.cacheTime, 0); + }); + }); + + it("should return an empty array if there are no accounts owned by the user", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + + const clients = await innerGetWalletClients(provider, chains.mainnet, []); + + assert.isArray(clients); + assert.isEmpty(clients); + }); + }); + + describe("innerGetTestClient", () => { + it("should return a test client with hardhat mode", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + + const client = await innerGetTestClient( + provider, + chains.hardhat, + "hardhat" + ); + + assert.isDefined(client); + assert.equal(client.type, "testClient"); + assert.equal(client.chain.id, chains.hardhat.id); + assert.equal(client.mode, "hardhat"); + }); + + it("should return a test client with anvil mode", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + + const client = await innerGetTestClient( + provider, + chains.foundry, + "anvil" + ); + + assert.isDefined(client); + assert.equal(client.type, "testClient"); + assert.equal(client.chain.id, chains.foundry.id); + assert.equal(client.mode, "anvil"); + }); + + it("should return a test client with custom parameters", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + + const client = await innerGetTestClient( + provider, + chains.hardhat, + "hardhat", + { + pollingInterval: 1000, + cacheTime: 2000, + } + ); + + assert.equal(client.pollingInterval, 1000); + assert.equal(client.cacheTime, 2000); + }); + + it("should return a test client with default parameters for development networks", async () => { + const provider: EthereumProvider = new EthereumMockedProvider(); + + const client = await innerGetTestClient( + provider, + chains.hardhat, + "hardhat" + ); + + assert.equal(client.pollingInterval, 50); + assert.equal(client.cacheTime, 0); + }); + }); +}); diff --git a/packages/hardhat-viem/test/fixture-projects/hardhat-project/contracts/WithConstructorArgs.sol b/packages/hardhat-viem/test/fixture-projects/hardhat-project/contracts/WithConstructorArgs.sol new file mode 100644 index 0000000000..3352d4fad5 --- /dev/null +++ b/packages/hardhat-viem/test/fixture-projects/hardhat-project/contracts/WithConstructorArgs.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.19; + +contract WithConstructorArgs { + uint256 public data; + address public owner; + + constructor(uint256 _data) { + data = _data; + owner = msg.sender; + } + + function setData(uint256 _newValue) external { + data = _newValue; + } + + function getData() external view returns (uint256) { + return data; + } + + function getOwner() external view returns (address) { + return owner; + } +} diff --git a/packages/hardhat-viem/test/fixture-projects/hardhat-project/contracts/WithoutConstructorArgs.sol b/packages/hardhat-viem/test/fixture-projects/hardhat-project/contracts/WithoutConstructorArgs.sol new file mode 100644 index 0000000000..80d165a039 --- /dev/null +++ b/packages/hardhat-viem/test/fixture-projects/hardhat-project/contracts/WithoutConstructorArgs.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.19; + +contract WithoutConstructorArgs { + uint256 public data; + address public owner; + + constructor() payable { + owner = msg.sender; + } + + function setData(uint256 _newValue) external { + data = _newValue; + } + + function getData() external view returns (uint256) { + return data; + } + + function getOwner() external view returns (address) { + return owner; + } +} diff --git a/packages/hardhat-viem/test/fixture-projects/hardhat-project/hardhat.config.js b/packages/hardhat-viem/test/fixture-projects/hardhat-project/hardhat.config.js new file mode 100644 index 0000000000..a59d1ed4d8 --- /dev/null +++ b/packages/hardhat-viem/test/fixture-projects/hardhat-project/hardhat.config.js @@ -0,0 +1,5 @@ +require("../../../src/index"); + +module.exports = { + solidity: "0.8.19", +}; diff --git a/packages/hardhat-viem/test/fixture-projects/type-generation/contracts/A.sol b/packages/hardhat-viem/test/fixture-projects/type-generation/contracts/A.sol new file mode 100644 index 0000000000..ad028f8b3a --- /dev/null +++ b/packages/hardhat-viem/test/fixture-projects/type-generation/contracts/A.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.19; + +contract A { + address owner; + string name; + + constructor(address _owner, uint256, string memory _name) { + owner = _owner; + name = _name; + } + + function getA() public pure returns (uint256) { + return 1; + } + + function getOwner() public view returns (address) { + return owner; + } +} + +contract B { + function getB() public pure returns (uint256) { + return 2; + } +} diff --git a/packages/hardhat-viem/test/fixture-projects/type-generation/contracts/C.sol b/packages/hardhat-viem/test/fixture-projects/type-generation/contracts/C.sol new file mode 100644 index 0000000000..9bac18334d --- /dev/null +++ b/packages/hardhat-viem/test/fixture-projects/type-generation/contracts/C.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.19; + +contract C { + function getC() public pure returns (uint256) { + return 3; + } +} + +contract B { + uint256 b; + string s; + + constructor(uint256 _b, string memory _s) { + b = _b; + s = _s; + } + + function getB() public view returns (uint256) { + return b; + } +} diff --git a/packages/hardhat-viem/test/fixture-projects/type-generation/hardhat.config.js b/packages/hardhat-viem/test/fixture-projects/type-generation/hardhat.config.js new file mode 100644 index 0000000000..a59d1ed4d8 --- /dev/null +++ b/packages/hardhat-viem/test/fixture-projects/type-generation/hardhat.config.js @@ -0,0 +1,5 @@ +require("../../../src/index"); + +module.exports = { + solidity: "0.8.19", +}; diff --git a/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/artifacts.d.ts b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/artifacts.d.ts new file mode 100644 index 0000000000..eeda088124 --- /dev/null +++ b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/artifacts.d.ts @@ -0,0 +1,12 @@ +// This file was autogenerated by hardhat-viem, do not edit it. +// prettier-ignore +// tslint:disable +// eslint-disable + +import "hardhat/types/artifacts"; + +declare module "hardhat/types/artifacts" { + interface ArtifactsMap { + B: never; + } +} diff --git a/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/A.sol/A.d.ts b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/A.sol/A.d.ts new file mode 100644 index 0000000000..912e6385cd --- /dev/null +++ b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/A.sol/A.d.ts @@ -0,0 +1,108 @@ +// This file was autogenerated by hardhat-viem, do not edit it. +// prettier-ignore +// tslint:disable +// eslint-disable + +import type { Address } from "viem"; +import type { AbiParameterToPrimitiveType, GetContractReturnType } from "@nomicfoundation/hardhat-viem/types"; +import "@nomicfoundation/hardhat-viem/types"; + +export interface A$Type { + "_format": "hh-sol-artifact-1", + "contractName": "A", + "sourceName": "contracts/A.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "getA", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161076938038061076983398181016040528101906100329190610293565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600190816100819190610519565b505050506105eb565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100c98261009e565b9050919050565b6100d9816100be565b81146100e457600080fd5b50565b6000815190506100f6816100d0565b92915050565b6000819050919050565b61010f816100fc565b811461011a57600080fd5b50565b60008151905061012c81610106565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6101858261013c565b810181811067ffffffffffffffff821117156101a4576101a361014d565b5b80604052505050565b60006101b761008a565b90506101c3828261017c565b919050565b600067ffffffffffffffff8211156101e3576101e261014d565b5b6101ec8261013c565b9050602081019050919050565b60005b838110156102175780820151818401526020810190506101fc565b60008484015250505050565b6000610236610231846101c8565b6101ad565b90508281526020810184848401111561025257610251610137565b5b61025d8482856101f9565b509392505050565b600082601f83011261027a57610279610132565b5b815161028a848260208601610223565b91505092915050565b6000806000606084860312156102ac576102ab610094565b5b60006102ba868287016100e7565b93505060206102cb8682870161011d565b925050604084015167ffffffffffffffff8111156102ec576102eb610099565b5b6102f886828701610265565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061035457607f821691505b6020821081036103675761036661030d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026103cf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610392565b6103d98683610392565b95508019841693508086168417925050509392505050565b6000819050919050565b600061041661041161040c846100fc565b6103f1565b6100fc565b9050919050565b6000819050919050565b610430836103fb565b61044461043c8261041d565b84845461039f565b825550505050565b600090565b61045961044c565b610464818484610427565b505050565b5b818110156104885761047d600082610451565b60018101905061046a565b5050565b601f8211156104cd5761049e8161036d565b6104a784610382565b810160208510156104b6578190505b6104ca6104c285610382565b830182610469565b50505b505050565b600082821c905092915050565b60006104f0600019846008026104d2565b1980831691505092915050565b600061050983836104df565b9150826002028217905092915050565b61052282610302565b67ffffffffffffffff81111561053b5761053a61014d565b5b610545825461033c565b61055082828561048c565b600060209050601f8311600181146105835760008415610571578287015190505b61057b85826104fd565b8655506105e3565b601f1984166105918661036d565b60005b828110156105b957848901518255600182019150602085019450602081019050610594565b868310156105d657848901516105d2601f8916826104df565b8355505b6001600288020188555050505b505050505050565b61016f806105fa6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063893d20e81461003b578063d46300fd14610059575b600080fd5b610043610077565b60405161005091906100ea565b60405180910390f35b6100616100a0565b60405161006e919061011e565b60405180910390f35b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006001905090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100d4826100a9565b9050919050565b6100e4816100c9565b82525050565b60006020820190506100ff60008301846100db565b92915050565b6000819050919050565b61011881610105565b82525050565b6000602082019050610133600083018461010f565b9291505056fea264697066735822122096d0f807114d408e2aa4f29fa4fa9774523526abe709bbf7de02dbe02a245ae264736f6c63430008130033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063893d20e81461003b578063d46300fd14610059575b600080fd5b610043610077565b60405161005091906100ea565b60405180910390f35b6100616100a0565b60405161006e919061011e565b60405180910390f35b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006001905090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100d4826100a9565b9050919050565b6100e4816100c9565b82525050565b60006020820190506100ff60008301846100db565b92915050565b6000819050919050565b61011881610105565b82525050565b6000602082019050610133600083018461010f565b9291505056fea264697066735822122096d0f807114d408e2aa4f29fa4fa9774523526abe709bbf7de02dbe02a245ae264736f6c63430008130033", + "linkReferences": {}, + "deployedLinkReferences": {} +} + +declare module "@nomicfoundation/hardhat-viem/types" { + export function deployContract( + contractName: "A", + constructorArgs: [_owner: AbiParameterToPrimitiveType<{"name":"_owner","type":"address"}>, AbiParameterToPrimitiveType<{"name":"","type":"uint256"}>, _name: AbiParameterToPrimitiveType<{"name":"_name","type":"string"}>], + config?: DeployContractConfig + ): Promise>; + export function deployContract( + contractName: "contracts/A.sol:A", + constructorArgs: [_owner: AbiParameterToPrimitiveType<{"name":"_owner","type":"address"}>, AbiParameterToPrimitiveType<{"name":"","type":"uint256"}>, _name: AbiParameterToPrimitiveType<{"name":"_name","type":"string"}>], + config?: DeployContractConfig + ): Promise>; + + export function sendDeploymentTransaction( + contractName: "A", + constructorArgs: [_owner: AbiParameterToPrimitiveType<{"name":"_owner","type":"address"}>, AbiParameterToPrimitiveType<{"name":"","type":"uint256"}>, _name: AbiParameterToPrimitiveType<{"name":"_name","type":"string"}>], + config?: SendDeploymentTransactionConfig + ): Promise<{ + contract: GetContractReturnType; + deploymentTransaction: GetTransactionReturnType; + }>; + export function sendDeploymentTransaction( + contractName: "contracts/A.sol:A", + constructorArgs: [_owner: AbiParameterToPrimitiveType<{"name":"_owner","type":"address"}>, AbiParameterToPrimitiveType<{"name":"","type":"uint256"}>, _name: AbiParameterToPrimitiveType<{"name":"_name","type":"string"}>], + config?: SendDeploymentTransactionConfig + ): Promise<{ + contract: GetContractReturnType; + deploymentTransaction: GetTransactionReturnType; + }>; + + export function getContractAt( + contractName: "A", + address: Address, + config?: GetContractAtConfig + ): Promise>; + export function getContractAt( + contractName: "contracts/A.sol:A", + address: Address, + config?: GetContractAtConfig + ): Promise>; +} diff --git a/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/A.sol/B.d.ts b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/A.sol/B.d.ts new file mode 100644 index 0000000000..917fea72bd --- /dev/null +++ b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/A.sol/B.d.ts @@ -0,0 +1,56 @@ +// This file was autogenerated by hardhat-viem, do not edit it. +// prettier-ignore +// tslint:disable +// eslint-disable + +import type { Address } from "viem"; +import type { GetContractReturnType } from "@nomicfoundation/hardhat-viem/types"; +import "@nomicfoundation/hardhat-viem/types"; + +export interface B$Type { + "_format": "hh-sol-artifact-1", + "contractName": "B", + "sourceName": "contracts/A.sol", + "abi": [ + { + "inputs": [], + "name": "getB", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060b68061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063a1c5191514602d575b600080fd5b60336047565b604051603e91906067565b60405180910390f35b60006002905090565b6000819050919050565b6061816050565b82525050565b6000602082019050607a6000830184605a565b9291505056fea2646970667358221220fe48236ca287d1fb02c67c759d4bbebdc9702638fef90f605955fa2db9c0049864736f6c63430008130033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063a1c5191514602d575b600080fd5b60336047565b604051603e91906067565b60405180910390f35b60006002905090565b6000819050919050565b6061816050565b82525050565b6000602082019050607a6000830184605a565b9291505056fea2646970667358221220fe48236ca287d1fb02c67c759d4bbebdc9702638fef90f605955fa2db9c0049864736f6c63430008130033", + "linkReferences": {}, + "deployedLinkReferences": {} +} + +declare module "@nomicfoundation/hardhat-viem/types" { + export function deployContract( + contractName: "contracts/A.sol:B", + constructorArgs?: [], + config?: DeployContractConfig + ): Promise>; + + export function sendDeploymentTransaction( + contractName: "contracts/A.sol:B", + constructorArgs?: [], + config?: SendDeploymentTransactionConfig + ): Promise<{ + contract: GetContractReturnType; + deploymentTransaction: GetTransactionReturnType; + }>; + + export function getContractAt( + contractName: "contracts/A.sol:B", + address: Address, + config?: GetContractAtConfig + ): Promise>; +} diff --git a/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/A.sol/artifacts.d.ts b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/A.sol/artifacts.d.ts new file mode 100644 index 0000000000..18aea5c6b7 --- /dev/null +++ b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/A.sol/artifacts.d.ts @@ -0,0 +1,18 @@ +// This file was autogenerated by hardhat-viem, do not edit it. +// prettier-ignore +// tslint:disable +// eslint-disable + +import "hardhat/types/artifacts"; + +import { A$Type } from "./A"; +import { B$Type } from "./B"; + +declare module "hardhat/types/artifacts" { + interface ArtifactsMap { + ["A"]: A$Type; + ["B"]: B$Type; + ["contracts/A.sol:A"]: A$Type; + ["contracts/A.sol:B"]: B$Type; + } +} diff --git a/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/C.sol/B.d.ts b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/C.sol/B.d.ts new file mode 100644 index 0000000000..2f0deb8393 --- /dev/null +++ b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/C.sol/B.d.ts @@ -0,0 +1,72 @@ +// This file was autogenerated by hardhat-viem, do not edit it. +// prettier-ignore +// tslint:disable +// eslint-disable + +import type { Address } from "viem"; +import type { AbiParameterToPrimitiveType, GetContractReturnType } from "@nomicfoundation/hardhat-viem/types"; +import "@nomicfoundation/hardhat-viem/types"; + +export interface B$Type { + "_format": "hh-sol-artifact-1", + "contractName": "B", + "sourceName": "contracts/C.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_b", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_s", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "getB", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50604051610604380380610604833981810160405281019061003291906101fb565b816000819055508060019081610048919061046e565b505050610540565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61007781610064565b811461008257600080fd5b50565b6000815190506100948161006e565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6100ed826100a4565b810181811067ffffffffffffffff8211171561010c5761010b6100b5565b5b80604052505050565b600061011f610050565b905061012b82826100e4565b919050565b600067ffffffffffffffff82111561014b5761014a6100b5565b5b610154826100a4565b9050602081019050919050565b60005b8381101561017f578082015181840152602081019050610164565b60008484015250505050565b600061019e61019984610130565b610115565b9050828152602081018484840111156101ba576101b961009f565b5b6101c5848285610161565b509392505050565b600082601f8301126101e2576101e161009a565b5b81516101f284826020860161018b565b91505092915050565b600080604083850312156102125761021161005a565b5b600061022085828601610085565b925050602083015167ffffffffffffffff8111156102415761024061005f565b5b61024d858286016101cd565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806102a957607f821691505b6020821081036102bc576102bb610262565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026103247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102e7565b61032e86836102e7565b95508019841693508086168417925050509392505050565b6000819050919050565b600061036b61036661036184610064565b610346565b610064565b9050919050565b6000819050919050565b61038583610350565b61039961039182610372565b8484546102f4565b825550505050565b600090565b6103ae6103a1565b6103b981848461037c565b505050565b5b818110156103dd576103d26000826103a6565b6001810190506103bf565b5050565b601f821115610422576103f3816102c2565b6103fc846102d7565b8101602085101561040b578190505b61041f610417856102d7565b8301826103be565b50505b505050565b600082821c905092915050565b600061044560001984600802610427565b1980831691505092915050565b600061045e8383610434565b9150826002028217905092915050565b61047782610257565b67ffffffffffffffff8111156104905761048f6100b5565b5b61049a8254610291565b6104a58282856103e1565b600060209050601f8311600181146104d857600084156104c6578287015190505b6104d08582610452565b865550610538565b601f1984166104e6866102c2565b60005b8281101561050e578489015182556001820191506020850194506020810190506104e9565b8683101561052b5784890151610527601f891682610434565b8355505b6001600288020188555050505b505050505050565b60b68061054e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063a1c5191514602d575b600080fd5b60336047565b604051603e91906067565b60405180910390f35b60008054905090565b6000819050919050565b6061816050565b82525050565b6000602082019050607a6000830184605a565b9291505056fea2646970667358221220d9268b96329d3a8617cfa3925eac59afcfbe7935e6fa7baab75e296746f136f264736f6c63430008130033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063a1c5191514602d575b600080fd5b60336047565b604051603e91906067565b60405180910390f35b60008054905090565b6000819050919050565b6061816050565b82525050565b6000602082019050607a6000830184605a565b9291505056fea2646970667358221220d9268b96329d3a8617cfa3925eac59afcfbe7935e6fa7baab75e296746f136f264736f6c63430008130033", + "linkReferences": {}, + "deployedLinkReferences": {} +} + +declare module "@nomicfoundation/hardhat-viem/types" { + export function deployContract( + contractName: "contracts/C.sol:B", + constructorArgs: [_b: AbiParameterToPrimitiveType<{"name":"_b","type":"uint256"}>, _s: AbiParameterToPrimitiveType<{"name":"_s","type":"string"}>], + config?: DeployContractConfig + ): Promise>; + + export function sendDeploymentTransaction( + contractName: "contracts/C.sol:B", + constructorArgs: [_b: AbiParameterToPrimitiveType<{"name":"_b","type":"uint256"}>, _s: AbiParameterToPrimitiveType<{"name":"_s","type":"string"}>], + config?: SendDeploymentTransactionConfig + ): Promise<{ + contract: GetContractReturnType; + deploymentTransaction: GetTransactionReturnType; + }>; + + export function getContractAt( + contractName: "contracts/C.sol:B", + address: Address, + config?: GetContractAtConfig + ): Promise>; +} diff --git a/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/C.sol/C.d.ts b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/C.sol/C.d.ts new file mode 100644 index 0000000000..cc7edacffa --- /dev/null +++ b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/C.sol/C.d.ts @@ -0,0 +1,74 @@ +// This file was autogenerated by hardhat-viem, do not edit it. +// prettier-ignore +// tslint:disable +// eslint-disable + +import type { Address } from "viem"; +import type { GetContractReturnType } from "@nomicfoundation/hardhat-viem/types"; +import "@nomicfoundation/hardhat-viem/types"; + +export interface C$Type { + "_format": "hh-sol-artifact-1", + "contractName": "C", + "sourceName": "contracts/C.sol", + "abi": [ + { + "inputs": [], + "name": "getC", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060b68061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063a2375d1e14602d575b600080fd5b60336047565b604051603e91906067565b60405180910390f35b60006003905090565b6000819050919050565b6061816050565b82525050565b6000602082019050607a6000830184605a565b9291505056fea264697066735822122047c1ea5199833309c2261ac9cf25569e6acf133d1cf8dc638f656e33f555635d64736f6c63430008130033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063a2375d1e14602d575b600080fd5b60336047565b604051603e91906067565b60405180910390f35b60006003905090565b6000819050919050565b6061816050565b82525050565b6000602082019050607a6000830184605a565b9291505056fea264697066735822122047c1ea5199833309c2261ac9cf25569e6acf133d1cf8dc638f656e33f555635d64736f6c63430008130033", + "linkReferences": {}, + "deployedLinkReferences": {} +} + +declare module "@nomicfoundation/hardhat-viem/types" { + export function deployContract( + contractName: "C", + constructorArgs?: [], + config?: DeployContractConfig + ): Promise>; + export function deployContract( + contractName: "contracts/C.sol:C", + constructorArgs?: [], + config?: DeployContractConfig + ): Promise>; + + export function sendDeploymentTransaction( + contractName: "C", + constructorArgs?: [], + config?: SendDeploymentTransactionConfig + ): Promise<{ + contract: GetContractReturnType; + deploymentTransaction: GetTransactionReturnType; + }>; + export function sendDeploymentTransaction( + contractName: "contracts/C.sol:C", + constructorArgs?: [], + config?: SendDeploymentTransactionConfig + ): Promise<{ + contract: GetContractReturnType; + deploymentTransaction: GetTransactionReturnType; + }>; + + export function getContractAt( + contractName: "C", + address: Address, + config?: GetContractAtConfig + ): Promise>; + export function getContractAt( + contractName: "contracts/C.sol:C", + address: Address, + config?: GetContractAtConfig + ): Promise>; +} diff --git a/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/C.sol/artifacts.d.ts b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/C.sol/artifacts.d.ts new file mode 100644 index 0000000000..4994bfede7 --- /dev/null +++ b/packages/hardhat-viem/test/fixture-projects/type-generation/snapshots/contracts/C.sol/artifacts.d.ts @@ -0,0 +1,18 @@ +// This file was autogenerated by hardhat-viem, do not edit it. +// prettier-ignore +// tslint:disable +// eslint-disable + +import "hardhat/types/artifacts"; + +import { B$Type } from "./B"; +import { C$Type } from "./C"; + +declare module "hardhat/types/artifacts" { + interface ArtifactsMap { + ["B"]: B$Type; + ["C"]: C$Type; + ["contracts/C.sol:B"]: B$Type; + ["contracts/C.sol:C"]: C$Type; + } +} diff --git a/packages/hardhat-viem/test/helpers.ts b/packages/hardhat-viem/test/helpers.ts new file mode 100644 index 0000000000..d2a72c8391 --- /dev/null +++ b/packages/hardhat-viem/test/helpers.ts @@ -0,0 +1,63 @@ +import type { HardhatRuntimeEnvironment } from "hardhat/types"; + +import path from "path"; +import fs from "fs/promises"; +import { assert } from "chai"; +import { diffLinesUnified } from "jest-diff"; +import { resetHardhatContext } from "hardhat/plugins-testing"; + +// Import this plugin type extensions for the HardhatRuntimeEnvironment +import "../src/internal/type-extensions"; + +declare module "mocha" { + interface Context { + hre: HardhatRuntimeEnvironment; + } +} + +export const useEnvironment = (fixtureProjectName: string): void => { + before("Loading hardhat environment", function () { + process.chdir(path.join(__dirname, "fixture-projects", fixtureProjectName)); + process.env.HARDHAT_NETWORK = "hardhat"; + + this.hre = require("hardhat"); + }); + + after("Resetting hardhat context", async function () { + process.chdir(path.resolve(`${__dirname}/..`)); + resetHardhatContext(); + delete process.env.HARDHAT_NETWORK; + }); +}; + +export const assertSnapshotMatch = async ( + snapshotPath: string, + generatedFilePath: string +) => { + const expectedSnapshotContent = await fs.readFile(snapshotPath, "utf-8"); + const generatedFileContent = await fs.readFile(generatedFilePath, "utf-8"); + + if (expectedSnapshotContent !== generatedFileContent) { + assert.fail(` +Generated file differs from the expected snapshot: + +${generatedFilePath} should match ${snapshotPath} + +To update the snapshot, run: +pnpm snapshots:update + +${diffLinesUnified( + expectedSnapshotContent.split("\n"), + generatedFileContent.split("\n"), + { + contextLines: 3, + expand: false, + includeChangeCounts: true, + } +)}`); + } +}; + +export function sleep(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} diff --git a/packages/hardhat-viem/test/integration.ts b/packages/hardhat-viem/test/integration.ts new file mode 100644 index 0000000000..f8ff1454c5 --- /dev/null +++ b/packages/hardhat-viem/test/integration.ts @@ -0,0 +1,426 @@ +import type { Hex, TransactionReceipt } from "viem"; +import type { EthereumProvider } from "hardhat/types"; + +import path from "path"; +import { assert, expect } from "chai"; +import sinon from "sinon"; +import { getAddress, parseEther } from "viem"; + +import { TASK_CLEAN, TASK_COMPILE } from "hardhat/builtin-tasks/task-names"; +import { deployContract, innerDeployContract } from "../src/internal/contracts"; +import { EthereumMockedProvider } from "./mocks/provider"; +import { assertSnapshotMatch, sleep, useEnvironment } from "./helpers"; + +describe("Integration tests", function () { + afterEach(function () { + sinon.restore(); + }); + + describe("Hardhat Runtime Environment extension", function () { + useEnvironment("hardhat-project"); + + it("should add the viem object and it's properties", function () { + expect(this.hre.viem) + .to.be.an("object") + .that.has.all.keys([ + "getPublicClient", + "getWalletClients", + "getWalletClient", + "getTestClient", + "deployContract", + "sendDeploymentTransaction", + "getContractAt", + ]); + }); + }); + + describe("Viem plugin", function () { + useEnvironment("hardhat-project"); + + before(async function () { + await this.hre.run(TASK_COMPILE, { quiet: true }); + }); + + after(async function () { + await this.hre.run(TASK_CLEAN); + }); + + beforeEach(async function () { + await this.hre.network.provider.send("hardhat_reset"); + }); + + describe("Clients", function () { + it("should be able to query the blockchain using the public client", async function () { + const client = await this.hre.viem.getPublicClient(); + const blockNumber = await client.getBlockNumber(); + + assert.equal(blockNumber, 0n); + }); + + it("should be able to query the blockchain using the wallet client", async function () { + const publicClient = await this.hre.viem.getPublicClient(); + const [fromWalletClient, toWalletClient] = + await this.hre.viem.getWalletClients(); + const fromAddress = fromWalletClient.account.address; + const toAddress = toWalletClient.account.address; + + const fromBalanceBefore: bigint = await publicClient.getBalance({ + address: fromAddress, + }); + const toBalanceBefore: bigint = await publicClient.getBalance({ + address: toAddress, + }); + + const etherAmount = parseEther("0.0001"); + const hash = await fromWalletClient.sendTransaction({ + to: toAddress, + value: etherAmount, + }); + const receipt = await publicClient.waitForTransactionReceipt({ hash }); + const transactionFee = receipt.gasUsed * receipt.effectiveGasPrice; + + const fromBalanceAfter: bigint = await publicClient.getBalance({ + address: fromAddress, + }); + const toBalanceAfter: bigint = await publicClient.getBalance({ + address: toAddress, + }); + + assert.isDefined(receipt); + assert.equal(receipt.status, "success"); + assert.equal( + fromBalanceAfter, + fromBalanceBefore - etherAmount - transactionFee + ); + assert.equal(toBalanceAfter, toBalanceBefore + etherAmount); + }); + + it("should be able to query the blockchain using the test client", async function () { + const publicClient = await this.hre.viem.getPublicClient(); + const testClient = await this.hre.viem.getTestClient(); + + await testClient.mine({ + blocks: 1000000, + }); + const blockNumber = await publicClient.getBlockNumber(); + assert.equal(blockNumber, 1000000n); + }); + }); + + describe("deployContract", function () { + it("should be able to deploy a contract without constructor args", async function () { + const contract = await this.hre.viem.deployContract( + "WithoutConstructorArgs" + ); + + await contract.write.setData([50n]); + const data = await contract.read.getData(); + assert.equal(data, 50n); + }); + + it("should be able to deploy a contract with constructor args", async function () { + const [defaultWalletClient] = await this.hre.viem.getWalletClients(); + const contract = await this.hre.viem.deployContract( + "WithConstructorArgs", + [50n] + ); + + let data = await contract.read.getData(); + assert.equal(data, 50n); + + const owner = await contract.read.getOwner(); + assert.equal(owner, getAddress(defaultWalletClient.account.address)); + + await contract.write.setData([100n]); + data = await contract.read.getData(); + assert.equal(data, 100n); + }); + + it("should be able to deploy a contract with a different wallet client", async function () { + const [_, secondWalletClient] = await this.hre.viem.getWalletClients(); + const contract = await this.hre.viem.deployContract( + "WithoutConstructorArgs", + [], + { walletClient: secondWalletClient } + ); + + const owner = await contract.read.getOwner(); + assert.equal(owner, getAddress(secondWalletClient.account.address)); + }); + + it("should be able to deploy a contract with initial ETH", async function () { + const publicClient = await this.hre.viem.getPublicClient(); + const [defaultWalletClient] = await this.hre.viem.getWalletClients(); + const ownerBalanceBefore = await publicClient.getBalance({ + address: defaultWalletClient.account.address, + }); + const etherAmount = parseEther("0.0001"); + const contract = await this.hre.viem.deployContract( + "WithoutConstructorArgs", + [], + { value: etherAmount } + ); + const ownerBalanceAfter = await publicClient.getBalance({ + address: defaultWalletClient.account.address, + }); + const contractBalance = await publicClient.getBalance({ + address: contract.address, + }); + const block = await publicClient.getBlock({ + includeTransactions: true, + }); + const receipt = await publicClient.getTransactionReceipt({ + hash: block.transactions[0].hash, + }); + const transactionFee = receipt.gasUsed * receipt.effectiveGasPrice; + + assert.equal(contractBalance, etherAmount); + assert.equal( + ownerBalanceAfter, + ownerBalanceBefore - etherAmount - transactionFee + ); + }); + + it("should throw an error if the contract address can't be retrieved", async function () { + const publicClient = await this.hre.viem.getPublicClient(); + sinon.stub(publicClient, "waitForTransactionReceipt").returns( + Promise.resolve({ + contractAddress: null, + }) as unknown as Promise + ); + const [walletClient] = await this.hre.viem.getWalletClients(); + const contractArtifact = await this.hre.artifacts.readArtifact( + "WithoutConstructorArgs" + ); + + await expect( + innerDeployContract( + publicClient, + walletClient, + contractArtifact.abi, + contractArtifact.bytecode as Hex, + [] + ) + ).to.be.rejectedWith( + /The deployment transaction '0x[a-fA-F0-9]{64}' was mined in block '\d+' but its receipt doesn't contain a contract address/ + ); + }); + + it("should throw an error if no accounts are configured for the network", async function () { + const provider: EthereumProvider = new EthereumMockedProvider(); + const sendStub = sinon.stub(provider, "send"); + sendStub.withArgs("eth_accounts").returns(Promise.resolve([])); + const hre = { + ...this.hre, + network: { + ...this.hre.network, + provider, + }, + }; + + await expect( + deployContract(hre, "WithoutConstructorArgs") + ).to.be.rejectedWith( + /Default wallet client not found. This can happen if no accounts were configured for this network/ + ); + }); + + it("should wait for confirmations", async function () { + const publicClient = await this.hre.viem.getPublicClient(); + const testClient = await this.hre.viem.getTestClient(); + const sleepingTime = 2 * publicClient.pollingInterval; + await testClient.setAutomine(false); + + let contractPromiseResolved = false; + const contractPromise = this.hre.viem + .deployContract("WithoutConstructorArgs", [], { + confirmations: 5, + }) + .then(() => { + contractPromiseResolved = true; + }); + await sleep(sleepingTime); + assert.isFalse(contractPromiseResolved); + + await testClient.mine({ + blocks: 3, + }); + await sleep(sleepingTime); + assert.isFalse(contractPromiseResolved); + + await testClient.mine({ + blocks: 1, + }); + await sleep(sleepingTime); + assert.isFalse(contractPromiseResolved); + + await testClient.mine({ + blocks: 1, + }); + await contractPromise; + assert.isTrue(contractPromiseResolved); + }); + + it("should throw if the confirmations parameter is less than 0", async function () { + await expect( + this.hre.viem.deployContract("WithoutConstructorArgs", [], { + confirmations: -1, + }) + ).to.be.rejectedWith("Confirmations must be greater than 0."); + }); + + it("should throw if the confirmations parameter is 0", async function () { + await expect( + this.hre.viem.deployContract("WithoutConstructorArgs", [], { + confirmations: 0, + }) + ).to.be.rejectedWith( + "deployContract does not support 0 confirmations. Use sendDeploymentTransaction if you want to handle the deployment transaction yourself." + ); + }); + }); + + describe("sendDeploymentTransaction", function () { + it("should return the contract and the deployment transaction", async function () { + const publicClient = await this.hre.viem.getPublicClient(); + const { contract, deploymentTransaction } = + await this.hre.viem.sendDeploymentTransaction( + "WithoutConstructorArgs" + ); + assert.exists(contract); + assert.exists(deploymentTransaction); + + const { contractAddress } = + await publicClient.waitForTransactionReceipt({ + hash: deploymentTransaction.hash, + }); + assert.equal(contract.address, getAddress(contractAddress!)); + + await contract.write.setData([50n]); + const data = await contract.read.getData(); + assert.equal(data, 50n); + }); + }); + }); + + describe("Contract type generation", function () { + useEnvironment("type-generation"); + + before(async function () { + await this.hre.run(TASK_COMPILE, { quiet: true }); + }); + + after(async function () { + await this.hre.run(TASK_CLEAN); + }); + + it("should generate artifacts.d.ts", async function () { + const snapshotPath = path.join("snapshots", "artifacts.d.ts"); + const generatedFilePath = path.join("artifacts", "artifacts.d.ts"); + + await assertSnapshotMatch(snapshotPath, generatedFilePath); + }); + + it("should generate contracts/A.sol/A.d.ts", async function () { + const snapshotPath = path.join( + "snapshots", + "contracts", + "A.sol", + "A.d.ts" + ); + const generatedFilePath = path.join( + "artifacts", + "contracts", + "A.sol", + "A.d.ts" + ); + + await assertSnapshotMatch(snapshotPath, generatedFilePath); + }); + + it("should generate contracts/A.sol/B.d.ts", async function () { + const snapshotPath = path.join( + "snapshots", + "contracts", + "A.sol", + "B.d.ts" + ); + const generatedFilePath = path.join( + "artifacts", + "contracts", + "A.sol", + "B.d.ts" + ); + + await assertSnapshotMatch(snapshotPath, generatedFilePath); + }); + + it("should generate contracts/A.sol/artifacts.d.ts", async function () { + const snapshotPath = path.join( + "snapshots", + "contracts", + "A.sol", + "artifacts.d.ts" + ); + const generatedFilePath = path.join( + "artifacts", + "contracts", + "A.sol", + "artifacts.d.ts" + ); + + await assertSnapshotMatch(snapshotPath, generatedFilePath); + }); + + it("should generate contracts/C.sol/B.d.ts", async function () { + const snapshotPath = path.join( + "snapshots", + "contracts", + "C.sol", + "B.d.ts" + ); + const generatedFilePath = path.join( + "artifacts", + "contracts", + "C.sol", + "B.d.ts" + ); + + await assertSnapshotMatch(snapshotPath, generatedFilePath); + }); + + it("should generate contracts/C.sol/C.d.ts", async function () { + const snapshotPath = path.join( + "snapshots", + "contracts", + "C.sol", + "C.d.ts" + ); + const generatedFilePath = path.join( + "artifacts", + "contracts", + "C.sol", + "C.d.ts" + ); + + await assertSnapshotMatch(snapshotPath, generatedFilePath); + }); + + it("should generate contracts/C.sol/artifacts.d.ts", async function () { + const snapshotPath = path.join( + "snapshots", + "contracts", + "C.sol", + "artifacts.d.ts" + ); + const generatedFilePath = path.join( + "artifacts", + "contracts", + "C.sol", + "artifacts.d.ts" + ); + + await assertSnapshotMatch(snapshotPath, generatedFilePath); + }); + }); +}); diff --git a/packages/hardhat-viem/test/mocks/provider.ts b/packages/hardhat-viem/test/mocks/provider.ts new file mode 100644 index 0000000000..44fe69ab2f --- /dev/null +++ b/packages/hardhat-viem/test/mocks/provider.ts @@ -0,0 +1,24 @@ +import type { + EthereumProvider, + RequestArguments, + JsonRpcRequest, + JsonRpcResponse, +} from "hardhat/types"; + +import EventEmitter from "events"; + +export class EthereumMockedProvider + extends EventEmitter + implements EthereumProvider +{ + public async request(_args: RequestArguments): Promise {} + + public async send(_method: string, _params: any[] = []) {} + + public sendAsync( + _payload: JsonRpcRequest, + callback: (error: any, response: JsonRpcResponse) => void + ) { + callback(null, {} as JsonRpcRequest); // this is here just to finish the "async" operation + } +} diff --git a/packages/hardhat-viem/test/setup.ts b/packages/hardhat-viem/test/setup.ts new file mode 100644 index 0000000000..1c993d01e0 --- /dev/null +++ b/packages/hardhat-viem/test/setup.ts @@ -0,0 +1,6 @@ +import chai from "chai"; +import chaiAsPromised from "chai-as-promised"; + +chai.use(chaiAsPromised); + +chai.config.truncateThreshold = 0; diff --git a/packages/hardhat-viem/test/update-snapshots.ts b/packages/hardhat-viem/test/update-snapshots.ts new file mode 100644 index 0000000000..03540b8a57 --- /dev/null +++ b/packages/hardhat-viem/test/update-snapshots.ts @@ -0,0 +1,53 @@ +import path from "path"; +import fs from "fs"; + +import { TASK_COMPILE, TASK_CLEAN } from "hardhat/builtin-tasks/task-names"; +import { resetHardhatContext } from "hardhat/plugins-testing"; + +const snapshotPartialPaths = [ + "artifacts.d.ts", + path.join("contracts", "A.sol", "A.d.ts"), + path.join("contracts", "A.sol", "B.d.ts"), + path.join("contracts", "A.sol", "artifacts.d.ts"), + path.join("contracts", "C.sol", "B.d.ts"), + path.join("contracts", "C.sol", "C.d.ts"), + path.join("contracts", "C.sol", "artifacts.d.ts"), +]; + +const originalCwd = process.cwd(); + +async function updateSnapshots() { + process.chdir(path.join(__dirname, "fixture-projects", "type-generation")); + process.env.HARDHAT_NETWORK = "hardhat"; + + const hre = require("hardhat"); + await hre.run(TASK_COMPILE, { quiet: true }); + + snapshotPartialPaths.forEach((partialPath) => { + const snapshotPath = path.join(process.cwd(), "snapshots", partialPath); + const generatedFilePath = path.join( + process.cwd(), + "artifacts", + partialPath + ); + + fs.copyFileSync(generatedFilePath, snapshotPath); + }); + + await hre.run(TASK_CLEAN); + + process.chdir(path.resolve(`${__dirname}/..`)); + resetHardhatContext(); + delete process.env.HARDHAT_NETWORK; + + console.log("Snapshots updated!"); +} + +updateSnapshots() + .catch((error) => { + console.error(error); + process.exitCode = 1; + }) + .finally(() => { + process.chdir(originalCwd); + }); diff --git a/packages/hardhat-viem/tsconfig.json b/packages/hardhat-viem/tsconfig.json new file mode 100644 index 0000000000..65ecfc33b9 --- /dev/null +++ b/packages/hardhat-viem/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../config/typescript/tsconfig.json", + "compilerOptions": { + "outDir": "./build-test", + "rootDirs": ["./test"], + "composite": true + }, + "include": ["./test/**/*.ts"], + "exclude": ["./node_modules", "./test/**/hardhat.config.ts"], + "references": [ + { + "path": "./src" + } + ] +} diff --git a/packages/hardhat-vyper/.eslintrc.js b/packages/hardhat-vyper/.eslintrc.js index 889740f226..c6de07705a 100644 --- a/packages/hardhat-vyper/.eslintrc.js +++ b/packages/hardhat-vyper/.eslintrc.js @@ -1,7 +1,24 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { project: `${__dirname}/tsconfig.json`, sourceType: "module", }, + overrides: [ + { + files: ["src/index.ts"], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [...slowImportsCommonIgnoredModules], + }, + ], + }, + }, + ], }; diff --git a/packages/hardhat-vyper/.gitignore b/packages/hardhat-vyper/.gitignore index c00d7e7296..4aca21f18d 100644 --- a/packages/hardhat-vyper/.gitignore +++ b/packages/hardhat-vyper/.gitignore @@ -15,10 +15,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -57,21 +53,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-vyper/CHANGELOG.md b/packages/hardhat-vyper/CHANGELOG.md index 3381fa1be6..bc021f1a70 100644 --- a/packages/hardhat-vyper/CHANGELOG.md +++ b/packages/hardhat-vyper/CHANGELOG.md @@ -1,5 +1,17 @@ # @nomiclabs/hardhat-vyper +## 3.0.5 + +### Patch Changes + +- 2f73386b1: Fixed a problem with the Vyper compilers downloader + +## 3.0.4 + +### Patch Changes + +- 03745576c: Added a check to validate that the Brownie code does not contain the directive `#@ if mode == "test":` because we do not support this feature. + ## 3.0.3 ### Patch Changes diff --git a/packages/hardhat-vyper/LICENSE b/packages/hardhat-vyper/LICENSE index 3b8858c555..3b7e8c7eab 100644 --- a/packages/hardhat-vyper/LICENSE +++ b/packages/hardhat-vyper/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-vyper/README.md b/packages/hardhat-vyper/README.md index 66c74d3259..050a932cf7 100644 --- a/packages/hardhat-vyper/README.md +++ b/packages/hardhat-vyper/README.md @@ -72,6 +72,22 @@ module.exports = { There are no additional steps you need to take for this plugin to work. +## Test directives + +Brownie allows you to use the test directive `#@ if mode == "test":` to specify when a portion of code should be included only for testing purposes. + +Example: + +```py +#@ if mode == "test": +@external +def _mint_for_testing(_to: address, _token_id: uint256): + self._mint(_to, _token_id) +#@ endif +``` + +We do NOT support this feature. An error will be thrown every time that, when compiling a contract, the directive `#@ if mode == "test":` is found. + ### Additional notes The oldest vyper version supported by this plugin is 0.2.0. Versions older than this will not work and will throw an error. diff --git a/packages/hardhat-vyper/package.json b/packages/hardhat-vyper/package.json index 64b3656a33..fde0f3c022 100644 --- a/packages/hardhat-vyper/package.json +++ b/packages/hardhat-vyper/package.json @@ -1,6 +1,6 @@ { "name": "@nomiclabs/hardhat-vyper", - "version": "3.0.3", + "version": "3.0.5", "description": "Hardhat plugin to develop smart contracts in Vyper", "repository": "github:nomiclabs/hardhat", "homepage": "https://github.com/nomiclabs/hardhat/tree/main/packages/hardhat-vyper", @@ -16,13 +16,14 @@ "vyper" ], "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", "test": "mocha --recursive \"test/**/*.ts\"", "build": "tsc --build .", - "prepublishOnly": "yarn build", + "prepublishOnly": "pnpm build", "clean": "rimraf dist" }, "files": [ @@ -39,25 +40,31 @@ "semver": "^6.3.0" }, "devDependencies": { + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", "@types/chai": "^4.2.0", + "@types/chai-as-promised": "^7.1.3", + "@types/debug": "^4.1.4", "@types/fs-extra": "^5.1.0", "@types/lodash": "^4.14.123", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@types/node": "^16.0.0", + "@types/semver": "^6.0.2", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "chai": "^4.2.0", - "eslint": "^7.29.0", + "chai-as-promised": "^7.1.1", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", - "hardhat": "^2.8.3", + "hardhat": "workspace:^2.8.3", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", "ts-node": "^10.8.0", - "typescript": "~4.7.4" + "typescript": "~5.0.0" }, "peerDependencies": { "hardhat": "^2.8.3" diff --git a/packages/hardhat-vyper/src/downloader.ts b/packages/hardhat-vyper/src/downloader.ts index 84dc489cf0..b645d02870 100644 --- a/packages/hardhat-vyper/src/downloader.ts +++ b/packages/hardhat-vyper/src/downloader.ts @@ -127,8 +127,10 @@ export class CompilerDownloader { } private _findVersionRelease(version: string): CompilerRelease | undefined { - return this.compilersList.find((release) => - semver.eq(release.tag_name, version) + return this.compilersList.find( + (release) => + semver.valid(release.tag_name) !== null && + semver.eq(release.tag_name, version) ); } diff --git a/packages/hardhat-vyper/src/index.ts b/packages/hardhat-vyper/src/index.ts index 25365027e7..4692a5675e 100644 --- a/packages/hardhat-vyper/src/index.ts +++ b/packages/hardhat-vyper/src/index.ts @@ -1,13 +1,13 @@ import type { Artifacts as ArtifactsImpl } from "hardhat/internal/artifacts"; import type { Artifacts } from "hardhat/types/artifacts"; +import type { VyperFilesCache as VyperFilesCacheT } from "./cache"; import type { VyperOutput, VyperBuild } from "./types"; +import type { ResolvedFile } from "./resolver"; import * as os from "os"; import fsExtra from "fs-extra"; import semver from "semver"; -import { getCompilersDir } from "hardhat/internal/util/global-dir"; -import { localPathToSourceName } from "hardhat/utils/source-names"; import { getFullyQualifiedName } from "hardhat/utils/contract-names"; import { TASK_COMPILE_GET_COMPILATION_TASKS } from "hardhat/builtin-tasks/task-names"; import { extendConfig, subtask, types } from "hardhat/config"; @@ -24,11 +24,8 @@ import { TASK_COMPILE_VYPER_LOG_COMPILATION_RESULT, } from "./task-names"; import { DEFAULT_VYPER_VERSION } from "./constants"; -import { VyperFilesCache, getVyperFilesCachePath } from "./cache"; import { Compiler } from "./compiler"; import { CompilerDownloader } from "./downloader"; -import { Parser } from "./parser"; -import { ResolvedFile, Resolver } from "./resolver"; import { assertPluginInvariant, getArtifactFromVyperOutput, @@ -72,6 +69,9 @@ subtask(TASK_COMPILE_VYPER_GET_SOURCE_NAMES) { sourcePaths }: { sourcePaths: string[] }, { config } ): Promise => { + const { localPathToSourceName } = await import( + "hardhat/utils/source-names" + ); const sourceNames = await Promise.all( sourcePaths.map((p) => localPathToSourceName(config.paths.root, p)) ); @@ -100,6 +100,9 @@ subtask(TASK_COMPILE_VYPER_GET_BUILD) { quiet, vyperVersion }: { quiet: boolean; vyperVersion: string }, { run } ): Promise => { + const { getCompilersDir } = await import( + "hardhat/internal/util/global-dir" + ); const compilersCache = await getCompilersDir(); const downloader = new CompilerDownloader(compilersCache); @@ -204,6 +207,12 @@ subtask(TASK_COMPILE_VYPER) .addParam("quiet", undefined, undefined, types.boolean) .setAction( async ({ quiet }: { quiet: boolean }, { artifacts, config, run }) => { + const { VyperFilesCache, getVyperFilesCachePath } = await import( + "./cache" + ); + const { Parser } = await import("./parser"); + const { Resolver } = await import("./resolver"); + const sourcePaths: string[] = await run( TASK_COMPILE_VYPER_GET_SOURCE_PATHS ); @@ -348,10 +357,10 @@ ${list}` * disk, we remove it from the cache to force it to be recompiled. */ async function invalidateCacheMissingArtifacts( - vyperFilesCache: VyperFilesCache, + vyperFilesCache: VyperFilesCacheT, artifacts: Artifacts, resolvedFiles: ResolvedFile[] -): Promise { +): Promise { for (const file of resolvedFiles) { const cacheEntry = vyperFilesCache.getEntry(file.absolutePath); diff --git a/packages/hardhat-vyper/src/parser.ts b/packages/hardhat-vyper/src/parser.ts index 31eaf93f64..f3af0bfb45 100644 --- a/packages/hardhat-vyper/src/parser.ts +++ b/packages/hardhat-vyper/src/parser.ts @@ -1,4 +1,5 @@ import { VyperFilesCache } from "./cache"; +import { VyperPluginError } from "./util"; interface ParsedData { versionPragma: string; @@ -16,6 +17,8 @@ export class Parser { absolutePath: string, contentHash: string ): ParsedData { + this._validateTestModeNotUsed(fileContent, absolutePath); + const cacheResult = this._getFromCache(absolutePath, contentHash); if (cacheResult !== null) { @@ -31,6 +34,16 @@ export class Parser { return result; } + private _validateTestModeNotUsed(fileContent: string, absolutePath: string) { + if (fileContent.includes('#@ if mode == "test":')) { + throw new VyperPluginError( + `We found a test directive in the file at path ${absolutePath}.` + + ` Test directives are a Brownie feature not supported by Hardhat.` + + ` Learn more at https://hardhat.org/hardhat-runner/plugins/nomiclabs-hardhat-vyper#test-directives` + ); + } + } + private _getFromCache( absolutePath: string, contentHash: string diff --git a/packages/hardhat-vyper/test/fixture-projects/compilation-single-file-test-directive/contracts/A.vy b/packages/hardhat-vyper/test/fixture-projects/compilation-single-file-test-directive/contracts/A.vy new file mode 100644 index 0000000000..267ea38508 --- /dev/null +++ b/packages/hardhat-vyper/test/fixture-projects/compilation-single-file-test-directive/contracts/A.vy @@ -0,0 +1,7 @@ +# @version 0.3.0 + +#@ if mode == "test": +@external +def test() -> int128: + return 42 +#@ endif \ No newline at end of file diff --git a/packages/hardhat-vyper/test/fixture-projects/compilation-single-file-test-directive/hardhat.config.js b/packages/hardhat-vyper/test/fixture-projects/compilation-single-file-test-directive/hardhat.config.js new file mode 100644 index 0000000000..6ab888d875 --- /dev/null +++ b/packages/hardhat-vyper/test/fixture-projects/compilation-single-file-test-directive/hardhat.config.js @@ -0,0 +1,5 @@ +require("../../../src/index"); + +module.exports = { + vyper: "0.3.0", +}; diff --git a/packages/hardhat-vyper/test/tests.ts b/packages/hardhat-vyper/test/tests.ts index 0657361633..04ac58d9ea 100644 --- a/packages/hardhat-vyper/test/tests.ts +++ b/packages/hardhat-vyper/test/tests.ts @@ -1,4 +1,5 @@ -import { assert } from "chai"; +import { assert, expect, use } from "chai"; +import chaiAsPromised from "chai-as-promised"; import * as fsExtra from "fs-extra"; import path from "path"; @@ -12,6 +13,8 @@ import { expectVyperErrorAsync, } from "./helpers"; +use(chaiAsPromised); + describe("Vyper plugin", function () { beforeEach(function () { fsExtra.removeSync("artifacts"); @@ -107,4 +110,25 @@ describe("Vyper plugin", function () { ); }); }); + + describe("project should not compile", function () { + useFixtureProject("compilation-single-file-test-directive"); + useEnvironment(); + + it("should throw an error because a test directive is present in the source file", async function () { + const filePath = path.join( + __dirname, + "fixture-projects", + "compilation-single-file-test-directive", + "contracts", + "A.vy" + ); + + await expect(this.env.run(TASK_COMPILE)).to.be.rejectedWith( + `We found a test directive in the file at path ${filePath}.` + + ` Test directives are a Brownie feature not supported by Hardhat.` + + ` Learn more at https://hardhat.org/hardhat-runner/plugins/nomiclabs-hardhat-vyper#test-directives` + ); + }); + }); }); diff --git a/packages/hardhat-web3-legacy/.eslintrc.js b/packages/hardhat-web3-legacy/.eslintrc.js index 889740f226..c6de07705a 100644 --- a/packages/hardhat-web3-legacy/.eslintrc.js +++ b/packages/hardhat-web3-legacy/.eslintrc.js @@ -1,7 +1,24 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { project: `${__dirname}/tsconfig.json`, sourceType: "module", }, + overrides: [ + { + files: ["src/index.ts"], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [...slowImportsCommonIgnoredModules], + }, + ], + }, + }, + ], }; diff --git a/packages/hardhat-web3-legacy/.gitignore b/packages/hardhat-web3-legacy/.gitignore index c00d7e7296..4aca21f18d 100644 --- a/packages/hardhat-web3-legacy/.gitignore +++ b/packages/hardhat-web3-legacy/.gitignore @@ -15,10 +15,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -57,21 +53,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-web3-legacy/LICENSE b/packages/hardhat-web3-legacy/LICENSE index 3b8858c555..3b7e8c7eab 100644 --- a/packages/hardhat-web3-legacy/LICENSE +++ b/packages/hardhat-web3-legacy/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-web3-legacy/package.json b/packages/hardhat-web3-legacy/package.json index 4ba78198b6..e3511c2470 100644 --- a/packages/hardhat-web3-legacy/package.json +++ b/packages/hardhat-web3-legacy/package.json @@ -17,13 +17,14 @@ "web3.js" ], "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", "test": "mocha --recursive \"test/**/*.ts\" --exit", "build": "tsc --build .", - "prepublishOnly": "yarn build", + "prepublishOnly": "pnpm build", "clean": "rimraf dist" }, "files": [ @@ -33,23 +34,25 @@ "README.md" ], "devDependencies": { + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", "@types/chai": "^4.2.0", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@types/node": "^16.0.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "chai": "^4.2.0", - "eslint": "^7.29.0", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", - "hardhat": "^2.0.0", + "hardhat": "workspace:^2.0.0", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", "ts-node": "^10.8.0", - "typescript": "~4.7.4", + "typescript": "~5.0.0", "web3": "^0.20.0" }, "peerDependencies": { diff --git a/packages/hardhat-web3-legacy/src/index.ts b/packages/hardhat-web3-legacy/src/index.ts index fdb0d20f83..3eb444d700 100644 --- a/packages/hardhat-web3-legacy/src/index.ts +++ b/packages/hardhat-web3-legacy/src/index.ts @@ -1,7 +1,8 @@ +import type { promisifyWeb3 as PromisifyWeb3T } from "./pweb3"; + import { extendEnvironment } from "hardhat/config"; import { lazyFunction, lazyObject } from "hardhat/plugins"; -import { promisifyWeb3 } from "./pweb3"; import "./type-extensions"; import { Web3HTTPProviderAdapter } from "./web3-provider-adapter"; @@ -11,5 +12,8 @@ extendEnvironment((env) => { const Web3 = require("web3"); return new Web3(new Web3HTTPProviderAdapter(env.network.provider)); }); + const { promisifyWeb3 } = require("./pweb3") as { + promisifyWeb3: typeof PromisifyWeb3T; + }; env.pweb3 = lazyObject(() => promisifyWeb3(env.web3)); }); diff --git a/packages/hardhat-web3-legacy/src/web3.d.ts b/packages/hardhat-web3-legacy/src/web3.d.ts new file mode 100644 index 0000000000..993160c5a1 --- /dev/null +++ b/packages/hardhat-web3-legacy/src/web3.d.ts @@ -0,0 +1 @@ +declare module "web3"; diff --git a/packages/hardhat-web3-v4/.eslintrc.js b/packages/hardhat-web3-v4/.eslintrc.js new file mode 100644 index 0000000000..889740f226 --- /dev/null +++ b/packages/hardhat-web3-v4/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: [`${__dirname}/../../config/eslint/eslintrc.js`], + parserOptions: { + project: `${__dirname}/tsconfig.json`, + sourceType: "module", + }, +}; diff --git a/packages/hardhat-web3-v4/.gitignore b/packages/hardhat-web3-v4/.gitignore new file mode 100644 index 0000000000..bc1256a4fe --- /dev/null +++ b/packages/hardhat-web3-v4/.gitignore @@ -0,0 +1,97 @@ +# Node modules +/node_modules + +# Compilation output +/build-test/ +/dist + +# Code coverage artifacts +/coverage +/.nyc_output + +# Below is Github's node gitignore template, +# ignoring the node_modules part, as it'd ignore every node_modules, and we have some for testing + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +#node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +artifacts +cache \ No newline at end of file diff --git a/packages/hardhat-web3-v4/.mocharc.json b/packages/hardhat-web3-v4/.mocharc.json new file mode 100644 index 0000000000..901e40db33 --- /dev/null +++ b/packages/hardhat-web3-v4/.mocharc.json @@ -0,0 +1,6 @@ +{ + "require": "ts-node/register/files", + "file": "../common/run-with-hardhat.js", + "ignore": ["test/fixture-projects/**/*"], + "timeout": 10000 +} diff --git a/packages/hardhat-web3-v4/.prettierignore b/packages/hardhat-web3-v4/.prettierignore new file mode 100644 index 0000000000..37cbd4e3f5 --- /dev/null +++ b/packages/hardhat-web3-v4/.prettierignore @@ -0,0 +1,5 @@ +/node_modules +/dist +/test/fixture-projects/**/artifacts +/test/fixture-projects/**/cache +CHANGELOG.md diff --git a/packages/hardhat-web3-v4/LICENSE b/packages/hardhat-web3-v4/LICENSE new file mode 100644 index 0000000000..3b7e8c7eab --- /dev/null +++ b/packages/hardhat-web3-v4/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Nomic Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/hardhat-web3-v4/README.md b/packages/hardhat-web3-v4/README.md new file mode 100644 index 0000000000..8000c9443a --- /dev/null +++ b/packages/hardhat-web3-v4/README.md @@ -0,0 +1,59 @@ +[![npm](https://img.shields.io/npm/v/@nomicfoundation/hardhat-web3-v4.svg)](https://www.npmjs.com/package/@nomicfoundation/hardhat-web3-v4) [![hardhat](https://hardhat.org/buidler-plugin-badge.svg?1)](https://hardhat.org) + +# hardhat-web3-v4 + +_This plugin is a collaboration between the Nomic Foundation and [ChainSafe](https://chainsafe.io/)_ + +Integrate [Web3.js](https://github.com/ethereum/web3.js) `4.x` into [Hardhat](https://hardhat.org). + +## What + +This plugin brings to Hardhat the Web3 module and an initialized instance of Web3. + +# Installation + +```bash +npm install --save-dev @nomicfoundation/hardhat-web3-v4 'web3@4' +``` + +And add the following statement to your `hardhat.config.js`: + +```js +require("@nomicfoundation/hardhat-web3-v4"); +``` + +Or, if you are using TypeScript, add this to your `hardhat.config.ts`: + +```js +import "@nomifoundation/hardhat-web3-v4"; +``` + +By default, contract invocations will not be typesafe. Consider installing [@chainsafe/hardhat-ts-artifact-plugin](https://www.npmjs.com/package/@chainsafe/hardhat-ts-artifact-plugin) to obtain available contract methods and events. Read more about inferring types [here](https://docs.web3js.org/guides/smart_contracts/infer_contract_types_guide/). + +## Tasks + +This plugin creates no additional tasks. + +## Environment extensions + +This plugin adds the following elements to the `HardhatRuntimeEnvironment`: + +- `Web3`: The Web3.js module. +- `web3`: An instantiated Web3.js object connected to the selected network. + +## Usage + +Install it and access Web3.js through the Hardhat Runtime Environment anywhere you need it (tasks, scripts, tests, etc). For example, in your `hardhat.config.js`: + +```js +require("@nomicfoundation/hardhat-web3-v4"); + +// task action function receives the Hardhat Runtime Environment as second argument +task("accounts", "Prints accounts", async (_, { web3 }) => { + console.log(await web3.eth.getAccounts()); +}); +``` + +And then run `npx hardhat accounts` to try it. + +Read the documentation on the [Hardhat Runtime Environment](https://hardhat.org/hardhat-runner/docs/advanced/hardhat-runtime-environment) to learn how to access the HRE in different ways to use Web3.js from anywhere the HRE is accessible. diff --git a/packages/hardhat-web3-v4/package.json b/packages/hardhat-web3-v4/package.json new file mode 100644 index 0000000000..1febcbaffe --- /dev/null +++ b/packages/hardhat-web3-v4/package.json @@ -0,0 +1,63 @@ +{ + "name": "@nomicfoundation/hardhat-web3-v4", + "version": "1.0.0", + "author": "Nomic Foundation", + "license": "MIT", + "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-web3-v4", + "repository": "github:nomicfoundation/hardhat", + "main": "dist/src/index.js", + "types": "dist/src/index.d.ts", + "description": "Hardhat plugin for using Web3 4.x", + "keywords": [ + "ethereum", + "smart-contracts", + "hardhat", + "hardhat-plugin", + "web3", + "web3.js" + ], + "scripts": { + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", + "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", + "prettier": "prettier \"**/*.{js,md,json}\"", + "test": "mocha --recursive \"test/**/*.ts\" --exit && node web3-lazy-object-tests/when-accessing-web3-class.js && node web3-lazy-object-tests/when-accessing-web3-object.js && node web3-lazy-object-tests/when-requiring-web3-module.js", + "build": "tsc --build .", + "prepublishOnly": "pnpm build", + "clean": "rimraf dist" + }, + "files": [ + "dist/src/", + "src/", + "LICENSE", + "README.md" + ], + "devDependencies": { + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", + "@types/chai": "^4.2.0", + "@types/chai-as-promised": "^7.1.3", + "@types/mocha": ">=9.1.0", + "@types/node": "^16.0.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", + "eslint": "^8.44.0", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-no-only-tests": "3.0.0", + "eslint-plugin-prettier": "3.4.0", + "hardhat": "workspace:^2.0.0", + "mocha": "^10.0.0", + "prettier": "2.4.1", + "rimraf": "^3.0.2", + "ts-node": "^10.8.0", + "typescript": "~5.0.0", + "web3": "^4.0.1" + }, + "peerDependencies": { + "hardhat": "^2.0.0", + "web3": "^4.0.1" + } +} diff --git a/packages/hardhat-web3-v4/src/index.ts b/packages/hardhat-web3-v4/src/index.ts new file mode 100644 index 0000000000..4b27f5bb17 --- /dev/null +++ b/packages/hardhat-web3-v4/src/index.ts @@ -0,0 +1,12 @@ +import { extendEnvironment } from "hardhat/config"; +import { lazyFunction, lazyObject } from "hardhat/plugins"; + +import "./type-extensions"; + +extendEnvironment((env) => { + env.Web3 = lazyFunction(() => require("web3").Web3); + env.web3 = lazyObject(() => { + const Web3 = require("web3").Web3; + return new Web3(env.network.provider); + }); +}); diff --git a/packages/hardhat-web3-v4/src/type-extensions.ts b/packages/hardhat-web3-v4/src/type-extensions.ts new file mode 100644 index 0000000000..4353372f1a --- /dev/null +++ b/packages/hardhat-web3-v4/src/type-extensions.ts @@ -0,0 +1,10 @@ +import type * as Web3 from "web3"; + +import "hardhat/types/runtime"; + +declare module "hardhat/types/runtime" { + interface HardhatRuntimeEnvironment { + Web3: typeof Web3; + web3: Web3.Web3; + } +} diff --git a/packages/hardhat-web3-v4/test/.eslintrc.js b/packages/hardhat-web3-v4/test/.eslintrc.js new file mode 100644 index 0000000000..12ee5882f1 --- /dev/null +++ b/packages/hardhat-web3-v4/test/.eslintrc.js @@ -0,0 +1,11 @@ +module.exports = { + extends: [`${__dirname}/../.eslintrc.js`], + rules: { + "import/no-extraneous-dependencies": [ + "error", + { + devDependencies: true, + }, + ], + }, +}; diff --git a/packages/hardhat-web3-v4/test/fixture-projects/hardhat-project/contracts/Greeter.sol b/packages/hardhat-web3-v4/test/fixture-projects/hardhat-project/contracts/Greeter.sol new file mode 100644 index 0000000000..d7c9b9490c --- /dev/null +++ b/packages/hardhat-web3-v4/test/fixture-projects/hardhat-project/contracts/Greeter.sol @@ -0,0 +1,22 @@ +pragma solidity ^0.5.1; + +contract Greeter { + + string greeting; + + event GreetingUpdated(string greeting); + + constructor() public { + greeting = "Hi"; + } + + function setGreeting(string memory _greeting) public { + greeting = _greeting; + emit GreetingUpdated(_greeting); + } + + function greet() public view returns (string memory) { + return greeting; + } + +} diff --git a/packages/hardhat-web3-v4/test/fixture-projects/hardhat-project/hardhat.config.js b/packages/hardhat-web3-v4/test/fixture-projects/hardhat-project/hardhat.config.js new file mode 100644 index 0000000000..d851e726c8 --- /dev/null +++ b/packages/hardhat-web3-v4/test/fixture-projects/hardhat-project/hardhat.config.js @@ -0,0 +1,5 @@ +require("../../../src/index"); + +module.exports = { + solidity: "0.5.15", +}; diff --git a/packages/hardhat-web3-v4/test/helpers.ts b/packages/hardhat-web3-v4/test/helpers.ts new file mode 100644 index 0000000000..c3781481ee --- /dev/null +++ b/packages/hardhat-web3-v4/test/helpers.ts @@ -0,0 +1,27 @@ +import { resetHardhatContext } from "hardhat/plugins-testing"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import { TASK_COMPILE } from "hardhat/builtin-tasks/task-names"; +import path from "path"; + +declare module "mocha" { + interface Context { + env: HardhatRuntimeEnvironment; + } +} + +export function useEnvironment( + fixtureProjectName: string, + networkName = "localhost" +) { + beforeEach("Loading hardhat environment", async function () { + process.chdir(path.join(__dirname, "fixture-projects", fixtureProjectName)); + process.env.HARDHAT_NETWORK = networkName; + + this.env = require("hardhat"); + await this.env.run(TASK_COMPILE); + }); + + afterEach("Resetting hardhat", function () { + resetHardhatContext(); + }); +} diff --git a/packages/hardhat-web3-v4/test/index.ts b/packages/hardhat-web3-v4/test/index.ts new file mode 100644 index 0000000000..6488c6ddb2 --- /dev/null +++ b/packages/hardhat-web3-v4/test/index.ts @@ -0,0 +1,47 @@ +import chai from "chai"; +import chaiAsPromised from "chai-as-promised"; + +import { Contract } from "web3"; +import { useEnvironment } from "./helpers"; + +chai.use(chaiAsPromised); + +describe("Web3 plugin", function () { + describe("ganache", function () { + useEnvironment("hardhat-project", "localhost"); + + describe("contracts", function () { + it("should deploy", async function () { + const artifact = this.env.artifacts.readArtifactSync("Greeter"); + const Greeter = new Contract(artifact.abi, this.env.web3); + const response = Greeter.deploy({ + data: artifact.bytecode, + }).send({ + from: (await this.env.web3.eth.getAccounts())[0], + }); + await new Promise((resolve) => + response.on("receipt", () => resolve()) + ); + }); + }); + }); + describe("hardhat", function () { + useEnvironment("hardhat-project", "hardhat"); + + describe("contract", function () { + it("should deploy", async function () { + const artifact = this.env.artifacts.readArtifactSync("Greeter"); + const Greeter = new Contract(artifact.abi, this.env.web3); + const from = (await this.env.web3.eth.getAccounts())[0]; + const response = Greeter.deploy({ + data: artifact.bytecode, + }).send({ + from, + }); + await new Promise((resolve) => + response.on("receipt", () => resolve()) + ); + }); + }); + }); +}); diff --git a/packages/hardhat-web3-v4/tsconfig.json b/packages/hardhat-web3-v4/tsconfig.json new file mode 100644 index 0000000000..f3ad7b97c6 --- /dev/null +++ b/packages/hardhat-web3-v4/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../config/typescript/tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "composite": true + }, + "exclude": ["./dist", "./node_modules", "./test/**/hardhat.config.ts"], + "references": [ + { + "path": "../hardhat-core/src" + } + ] +} diff --git a/packages/hardhat-web3-v4/web3-lazy-object-tests/when-accessing-web3-class.js b/packages/hardhat-web3-v4/web3-lazy-object-tests/when-accessing-web3-class.js new file mode 100644 index 0000000000..83656c3640 --- /dev/null +++ b/packages/hardhat-web3-v4/web3-lazy-object-tests/when-accessing-web3-class.js @@ -0,0 +1,6 @@ +const { lazyFunction, lazyObject } = require("hardhat/plugins"); + +global.Web3 = lazyFunction(() => require("web3").Web3); +global.web3 = lazyObject(() => new global.Web3()); + +console.log(Web3.version); diff --git a/packages/hardhat-web3-v4/web3-lazy-object-tests/when-accessing-web3-object.js b/packages/hardhat-web3-v4/web3-lazy-object-tests/when-accessing-web3-object.js new file mode 100644 index 0000000000..82d7f4a09f --- /dev/null +++ b/packages/hardhat-web3-v4/web3-lazy-object-tests/when-accessing-web3-object.js @@ -0,0 +1,6 @@ +const { lazyFunction, lazyObject } = require("hardhat/plugins"); + +global.Web3 = lazyFunction(() => require("web3").Web3); +global.web3 = lazyObject(() => new global.Web3()); + +console.log(global.web3.eth.getAccounts.name); diff --git a/packages/hardhat-web3-v4/web3-lazy-object-tests/when-requiring-web3-module.js b/packages/hardhat-web3-v4/web3-lazy-object-tests/when-requiring-web3-module.js new file mode 100644 index 0000000000..94e7a65943 --- /dev/null +++ b/packages/hardhat-web3-v4/web3-lazy-object-tests/when-requiring-web3-module.js @@ -0,0 +1,6 @@ +const { lazyFunction, lazyObject } = require("hardhat/plugins"); + +global.Web3 = lazyFunction(() => require("web3")); +global.web3 = lazyObject(() => new global.Web3()); + +require("web3"); diff --git a/packages/hardhat-web3/.eslintrc.js b/packages/hardhat-web3/.eslintrc.js index 889740f226..c6de07705a 100644 --- a/packages/hardhat-web3/.eslintrc.js +++ b/packages/hardhat-web3/.eslintrc.js @@ -1,7 +1,24 @@ +const { + slowImportsCommonIgnoredModules, +} = require("../../config/eslint/constants"); + module.exports = { extends: [`${__dirname}/../../config/eslint/eslintrc.js`], parserOptions: { project: `${__dirname}/tsconfig.json`, sourceType: "module", }, + overrides: [ + { + files: ["src/index.ts"], + rules: { + "@nomicfoundation/slow-imports/no-top-level-external-import": [ + "error", + { + ignoreModules: [...slowImportsCommonIgnoredModules], + }, + ], + }, + }, + ], }; diff --git a/packages/hardhat-web3/.gitignore b/packages/hardhat-web3/.gitignore index c00d7e7296..4aca21f18d 100644 --- a/packages/hardhat-web3/.gitignore +++ b/packages/hardhat-web3/.gitignore @@ -15,10 +15,6 @@ # Logs logs *.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -57,21 +53,15 @@ jspm_packages/ # TypeScript v1 declaration files typings/ -# Optional npm cache directory -.npm - # Optional eslint cache .eslintcache # Optional REPL history .node_repl_history -# Output of 'npm pack' +# Output of 'pnpm pack' *.tgz -# Yarn Integrity file -.yarn-integrity - # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/packages/hardhat-web3/LICENSE b/packages/hardhat-web3/LICENSE index 3b8858c555..3b7e8c7eab 100644 --- a/packages/hardhat-web3/LICENSE +++ b/packages/hardhat-web3/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019 Nomic Labs LLC +Copyright (c) 2023 Nomic Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/hardhat-web3/README.md b/packages/hardhat-web3/README.md index 364e495058..3112587936 100644 --- a/packages/hardhat-web3/README.md +++ b/packages/hardhat-web3/README.md @@ -11,7 +11,7 @@ This plugin brings to Hardhat the Web3 module and an initialized instance of Web # Installation ```bash -npm install --save-dev @nomiclabs/hardhat-web3 web3 +npm install --save-dev @nomiclabs/hardhat-web3 'web3@^1.0.0-beta.36' ``` And add the following statement to your `hardhat.config.js`: diff --git a/packages/hardhat-web3/package.json b/packages/hardhat-web3/package.json index 99ffc8bf24..51f3415268 100644 --- a/packages/hardhat-web3/package.json +++ b/packages/hardhat-web3/package.json @@ -17,13 +17,14 @@ "web3.js" ], "scripts": { - "lint": "yarn prettier --check && yarn eslint", - "lint:fix": "yarn prettier --write && yarn eslint --fix", + "lint": "pnpm prettier --check && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", "eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'", "prettier": "prettier \"**/*.{js,md,json}\"", + "pretest": "cd ../.. && pnpm build", "test": "mocha --recursive \"test/**/*.ts\" --exit && node web3-lazy-object-tests/when-accessing-web3-class.js && node web3-lazy-object-tests/when-accessing-web3-object.js && node web3-lazy-object-tests/when-requiring-web3-module.js", "build": "tsc --build .", - "prepublishOnly": "yarn build", + "prepublishOnly": "pnpm build", "clean": "rimraf dist" }, "files": [ @@ -33,23 +34,26 @@ "README.md" ], "devDependencies": { + "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "workspace:^", + "@nomicfoundation/eslint-plugin-slow-imports": "workspace:^", "@types/chai": "^4.2.0", "@types/mocha": ">=9.1.0", - "@types/node": "^14.0.0", - "@typescript-eslint/eslint-plugin": "5.53.0", - "@typescript-eslint/parser": "5.53.0", + "@types/node": "^16.0.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "chai": "^4.2.0", - "eslint": "^7.29.0", + "eslint": "^8.44.0", "eslint-config-prettier": "8.3.0", - "eslint-plugin-import": "2.24.1", + "eslint-plugin-import": "2.27.5", "eslint-plugin-no-only-tests": "3.0.0", "eslint-plugin-prettier": "3.4.0", - "hardhat": "^2.0.0", + "hardhat": "workspace:^2.0.0", "mocha": "^10.0.0", "prettier": "2.4.1", "rimraf": "^3.0.2", + "sha3": "^2.1.4", "ts-node": "^10.8.0", - "typescript": "~4.7.4", + "typescript": "~5.0.0", "web3": "^1.0.0-beta.36" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000000..0a149b7715 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,11992 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@changesets/cli': + specifier: ^2.16.0 + version: 2.26.2 + hardhat: + specifier: workspace:* + version: link:packages/hardhat-core + prettier: + specifier: 2.4.1 + version: 2.4.1 + shelljs: + specifier: ^0.8.5 + version: 0.8.5 + typescript: + specifier: ~5.0.0 + version: 5.0.4 + + packages/common: + devDependencies: + detect-port: + specifier: ^1.3.0 + version: 1.5.1 + ganache-cli: + specifier: ^6.12.2 + version: 6.12.2 + prettier: + specifier: 2.4.1 + version: 2.4.1 + + packages/eslint-plugin: {} + + packages/eslint-plugin-hardhat-internal-rules: + dependencies: + '@typescript-eslint/utils': + specifier: ^5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + requireindex: + specifier: ^1.2.0 + version: 1.2.0 + devDependencies: + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-doc-generator: + specifier: ^1.0.0 + version: 1.4.3(eslint@8.47.0)(typescript@5.0.4) + eslint-plugin-eslint-plugin: + specifier: ^5.0.0 + version: 5.1.1(eslint@8.47.0) + eslint-plugin-node: + specifier: ^11.1.0 + version: 11.1.0(eslint@8.47.0) + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + mocha: + specifier: ^10.0.0 + version: 10.2.0 + + packages/eslint-plugin-slow-imports: + dependencies: + eslint-module-utils: + specifier: ^2.8.0 + version: 2.8.0(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.9)(eslint@8.47.0) + requireindex: + specifier: ^1.2.0 + version: 1.2.0 + devDependencies: + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-doc-generator: + specifier: ^1.0.0 + version: 1.4.3(eslint@8.47.0)(typescript@5.0.4) + eslint-plugin-eslint-plugin: + specifier: ^5.0.0 + version: 5.1.1(eslint@8.47.0) + eslint-plugin-node: + specifier: ^11.1.0 + version: 11.1.0(eslint@8.47.0) + mocha: + specifier: ^10.0.0 + version: 10.2.0 + + packages/hardhat-chai-matchers: + dependencies: + '@types/chai-as-promised': + specifier: ^7.1.3 + version: 7.1.5 + chai-as-promised: + specifier: ^7.1.1 + version: 7.1.1(chai@4.3.7) + deep-eql: + specifier: ^4.0.1 + version: 4.1.3 + ordinal: + specifier: ^1.0.3 + version: 1.0.3 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@nomicfoundation/hardhat-chai-matchers': + specifier: workspace:* + version: 'link:' + '@nomicfoundation/hardhat-ethers': + specifier: workspace:^3.0.0 + version: link:../hardhat-ethers + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.1 + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + bignumber.js: + specifier: ^9.0.2 + version: 9.1.1 + bn.js: + specifier: ^5.1.0 + version: 5.2.1 + chai: + specifier: ^4.2.0 + version: 4.3.7 + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + ethers: + specifier: ^6.1.0 + version: 6.7.0 + get-port: + specifier: ^5.1.1 + version: 5.1.1 + hardhat: + specifier: workspace:^2.9.4 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + + packages/hardhat-core: + dependencies: + '@ethersproject/abi': + specifier: ^5.1.2 + version: 5.7.0 + '@metamask/eth-sig-util': + specifier: ^4.0.0 + version: 4.0.1 + '@nomicfoundation/ethereumjs-block': + specifier: 5.0.2 + version: 5.0.2 + '@nomicfoundation/ethereumjs-blockchain': + specifier: 7.0.2 + version: 7.0.2 + '@nomicfoundation/ethereumjs-common': + specifier: 4.0.2 + version: 4.0.2 + '@nomicfoundation/ethereumjs-evm': + specifier: 2.0.2 + version: 2.0.2 + '@nomicfoundation/ethereumjs-rlp': + specifier: 5.0.2 + version: 5.0.2 + '@nomicfoundation/ethereumjs-statemanager': + specifier: 2.0.2 + version: 2.0.2 + '@nomicfoundation/ethereumjs-trie': + specifier: 6.0.2 + version: 6.0.2 + '@nomicfoundation/ethereumjs-tx': + specifier: 5.0.2 + version: 5.0.2 + '@nomicfoundation/ethereumjs-util': + specifier: 9.0.2 + version: 9.0.2 + '@nomicfoundation/ethereumjs-vm': + specifier: 7.0.2 + version: 7.0.2 + '@nomicfoundation/solidity-analyzer': + specifier: ^0.1.0 + version: 0.1.1 + '@sentry/node': + specifier: ^5.18.1 + version: 5.30.0 + '@types/bn.js': + specifier: ^5.1.0 + version: 5.1.1 + '@types/lru-cache': + specifier: ^5.1.0 + version: 5.1.1 + adm-zip: + specifier: ^0.4.16 + version: 0.4.16 + aggregate-error: + specifier: ^3.0.0 + version: 3.1.0 + ansi-escapes: + specifier: ^4.3.0 + version: 4.3.2 + chalk: + specifier: ^2.4.2 + version: 2.4.2 + chokidar: + specifier: ^3.4.0 + version: 3.5.3 + ci-info: + specifier: ^2.0.0 + version: 2.0.0 + debug: + specifier: ^4.1.1 + version: 4.3.4(supports-color@8.1.1) + enquirer: + specifier: ^2.3.0 + version: 2.4.1 + env-paths: + specifier: ^2.2.0 + version: 2.2.1 + ethereum-cryptography: + specifier: ^1.0.3 + version: 1.2.0 + ethereumjs-abi: + specifier: ^0.6.8 + version: 0.6.8 + find-up: + specifier: ^2.1.0 + version: 2.1.0 + fp-ts: + specifier: 1.19.3 + version: 1.19.3 + fs-extra: + specifier: ^7.0.1 + version: 7.0.1 + glob: + specifier: 7.2.0 + version: 7.2.0 + immutable: + specifier: ^4.0.0-rc.12 + version: 4.3.2 + io-ts: + specifier: 1.10.4 + version: 1.10.4 + keccak: + specifier: ^3.0.2 + version: 3.0.3 + lodash: + specifier: ^4.17.11 + version: 4.17.21 + mnemonist: + specifier: ^0.38.0 + version: 0.38.5 + mocha: + specifier: ^10.0.0 + version: 10.2.0 + p-map: + specifier: ^4.0.0 + version: 4.0.0 + raw-body: + specifier: ^2.4.1 + version: 2.5.1 + resolve: + specifier: 1.17.0 + version: 1.17.0 + semver: + specifier: ^6.3.0 + version: 6.3.1 + solc: + specifier: 0.7.3 + version: 0.7.3(debug@4.3.4) + source-map-support: + specifier: ^0.5.13 + version: 0.5.21 + stacktrace-parser: + specifier: ^0.1.10 + version: 0.1.10 + tsort: + specifier: 0.0.1 + version: 0.0.1 + undici: + specifier: ^5.14.0 + version: 5.23.0 + uuid: + specifier: ^8.3.2 + version: 8.3.2 + ws: + specifier: ^7.4.6 + version: 7.4.6 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@types/async-eventemitter': + specifier: ^0.2.1 + version: 0.2.1 + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/chai-as-promised': + specifier: ^7.1.3 + version: 7.1.5 + '@types/ci-info': + specifier: ^2.0.0 + version: 2.0.0 + '@types/debug': + specifier: ^4.1.4 + version: 4.1.8 + '@types/find-up': + specifier: ^2.1.1 + version: 2.1.1 + '@types/fs-extra': + specifier: ^5.1.0 + version: 5.1.0 + '@types/glob': + specifier: ^7.1.1 + version: 7.2.0 + '@types/keccak': + specifier: ^3.0.1 + version: 3.0.1 + '@types/lodash': + specifier: ^4.14.123 + version: 4.14.197 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@types/resolve': + specifier: ^1.17.1 + version: 1.20.2 + '@types/semver': + specifier: ^6.0.2 + version: 6.2.3 + '@types/sinon': + specifier: ^9.0.8 + version: 9.0.11 + '@types/uuid': + specifier: ^8.3.1 + version: 8.3.4 + '@types/ws': + specifier: ^7.2.1 + version: 7.4.7 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + bignumber.js: + specifier: ^9.0.2 + version: 9.1.1 + bn.js: + specifier: ^5.1.0 + version: 5.2.1 + chai: + specifier: ^4.2.0 + version: 4.3.7 + chai-as-promised: + specifier: ^7.1.1 + version: 7.1.1(chai@4.3.7) + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + ethers: + specifier: ^6.1.0 + version: 6.7.0 + ethers-v5: + specifier: npm:ethers@5 + version: /ethers@5.7.2 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + sinon: + specifier: ^9.0.0 + version: 9.2.4 + time-require: + specifier: ^0.1.2 + version: 0.1.2 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + + packages/hardhat-ethers: + dependencies: + debug: + specifier: ^4.1.1 + version: 4.3.4(supports-color@8.1.1) + lodash.isequal: + specifier: ^4.5.0 + version: 4.5.0 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/chai-as-promised': + specifier: ^7.1.3 + version: 7.1.5 + '@types/debug': + specifier: ^4.1.4 + version: 4.1.8 + '@types/lodash.isequal': + specifier: ^4.5.6 + version: 4.5.6 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@types/sinon': + specifier: ^9.0.8 + version: 9.0.11 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + chai-as-promised: + specifier: ^7.1.1 + version: 7.1.1(chai@4.3.7) + chalk: + specifier: ^2.4.2 + version: 2.4.2 + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + ethers: + specifier: ^6.1.0 + version: 6.7.0 + hardhat: + specifier: workspace:^2.0.0 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + sinon: + specifier: ^9.0.0 + version: 9.2.4 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + + packages/hardhat-foundry: + dependencies: + chalk: + specifier: ^2.4.2 + version: 2.4.2 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + hardhat: + specifier: workspace:^2.17.2 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + + packages/hardhat-ledger: + dependencies: + '@ledgerhq/errors': + specifier: ^6.12.6 + version: 6.12.6 + '@ledgerhq/hw-app-eth': + specifier: 6.33.6 + version: 6.33.6(debug@4.3.4) + '@ledgerhq/hw-transport': + specifier: ^6.28.4 + version: 6.28.4 + '@ledgerhq/hw-transport-node-hid': + specifier: ^6.27.13 + version: 6.27.13 + '@nomicfoundation/ethereumjs-util': + specifier: 9.0.2 + version: 9.0.2 + chalk: + specifier: ^2.4.2 + version: 2.4.2 + debug: + specifier: ^4.1.1 + version: 4.3.4(supports-color@8.1.1) + env-paths: + specifier: ^2.2.0 + version: 2.2.1 + ethers: + specifier: ^6.1.0 + version: 6.7.0 + fs-extra: + specifier: ^7.0.1 + version: 7.0.1 + io-ts: + specifier: 1.10.4 + version: 1.10.4 + ora: + specifier: ^5.4.1 + version: 5.4.1 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/fs-extra': + specifier: ^5.1.0 + version: 5.1.0 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@types/sinon': + specifier: ^9.0.8 + version: 9.0.11 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + hardhat: + specifier: workspace:^2.16.0 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + nyc: + specifier: ^15.1.0 + version: 15.1.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + sinon: + specifier: ^9.0.0 + version: 9.2.4 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + + packages/hardhat-network-helpers: + dependencies: + ethereumjs-util: + specifier: ^7.1.4 + version: 7.1.4 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/chai-as-promised': + specifier: ^7.1.3 + version: 7.1.5 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + chai-as-promised: + specifier: ^7.1.1 + version: 7.1.1(chai@4.3.7) + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + ethers-v5: + specifier: npm:ethers@5 + version: /ethers@5.7.2 + hardhat: + specifier: workspace:^2.9.5 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + + packages/hardhat-shorthand: + dependencies: + '@fvictorio/tabtab': + specifier: ^0.0.3 + version: 0.0.3 + debug: + specifier: ^4.1.1 + version: 4.3.4(supports-color@8.1.1) + semver: + specifier: ^6.3.0 + version: 6.3.1 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/debug': + specifier: ^4.1.4 + version: 4.1.8 + '@types/fs-extra': + specifier: ^5.1.0 + version: 5.1.0 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@types/semver': + specifier: ^6.0.2 + version: 6.2.3 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + hardhat: + specifier: workspace:^2.0.0 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + + packages/hardhat-solhint: + dependencies: + solhint: + specifier: ^3.4.0 + version: 3.4.0 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/fs-extra': + specifier: ^5.1.0 + version: 5.1.0 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@types/sinon': + specifier: ^9.0.8 + version: 9.0.11 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + fs-extra: + specifier: ^7.0.1 + version: 7.0.1 + hardhat: + specifier: workspace:^2.0.0 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + sinon: + specifier: ^9.0.0 + version: 9.2.4 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + + packages/hardhat-solpp: + dependencies: + fs-extra: + specifier: ^7.0.1 + version: 7.0.1 + solpp: + specifier: ^0.11.5 + version: 0.11.5 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/fs-extra': + specifier: ^5.1.0 + version: 5.1.0 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + hardhat: + specifier: workspace:^2.0.0 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + + packages/hardhat-toolbox: + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@nomicfoundation/hardhat-chai-matchers': + specifier: workspace:^2.0.0 + version: link:../hardhat-chai-matchers + '@nomicfoundation/hardhat-ethers': + specifier: workspace:^3.0.0 + version: link:../hardhat-ethers + '@nomicfoundation/hardhat-network-helpers': + specifier: workspace:^1.0.0 + version: link:../hardhat-network-helpers + '@nomicfoundation/hardhat-verify': + specifier: workspace:^2.0.0 + version: link:../hardhat-verify + '@typechain/ethers-v6': + specifier: ^0.5.0 + version: 0.5.0(ethers@6.7.0)(typechain@8.3.1)(typescript@5.0.4) + '@typechain/hardhat': + specifier: ^9.0.0 + version: 9.0.0(@typechain/ethers-v6@0.5.0)(ethers@6.7.0)(hardhat@packages+hardhat-core)(typechain@8.3.1) + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + ethers: + specifier: ^6.4.0 + version: 6.7.0 + hardhat: + specifier: workspace:^2.11.0 + version: link:../hardhat-core + hardhat-gas-reporter: + specifier: ^1.0.8 + version: 1.0.8(hardhat@packages+hardhat-core) + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + solidity-coverage: + specifier: ^0.8.1 + version: 0.8.1(hardhat@packages+hardhat-core) + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typechain: + specifier: ^8.3.1 + version: 8.3.1(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + + packages/hardhat-toolbox-viem: + dependencies: + chai-as-promised: + specifier: ^7.1.1 + version: 7.1.1(chai@4.3.7) + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@nomicfoundation/hardhat-network-helpers': + specifier: workspace:^1.0.0 + version: link:../hardhat-network-helpers + '@nomicfoundation/hardhat-verify': + specifier: workspace:^2.0.0 + version: link:../hardhat-verify + '@nomicfoundation/hardhat-viem': + specifier: workspace:^1.0.0 + version: link:../hardhat-viem + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/chai-as-promised': + specifier: ^7.1.6 + version: 7.1.6 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + hardhat: + specifier: workspace:^2.11.0 + version: link:../hardhat-core + hardhat-gas-reporter: + specifier: ^1.0.8 + version: 1.0.8(hardhat@packages+hardhat-core) + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + solidity-coverage: + specifier: ^0.8.1 + version: 0.8.1(hardhat@packages+hardhat-core) + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.4 + version: 5.0.4 + viem: + specifier: ^1.15.1 + version: 1.15.1(typescript@5.0.4) + + packages/hardhat-truffle4: + dependencies: + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + chai: + specifier: ^4.2.0 + version: 4.3.7 + ethereumjs-util: + specifier: ^7.1.4 + version: 7.1.4 + fs-extra: + specifier: ^7.0.1 + version: 7.0.1 + truffle-contract: + specifier: ^3.0.7 + version: 3.0.7 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@nomiclabs/hardhat-web3-legacy': + specifier: workspace:^2.0.0 + version: link:../hardhat-web3-legacy + '@types/fs-extra': + specifier: ^5.1.0 + version: 5.1.0 + '@types/glob': + specifier: ^7.1.1 + version: 7.2.0 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + hardhat: + specifier: workspace:^2.6.4 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + web3: + specifier: ^0.20.0 + version: 0.20.0 + + packages/hardhat-truffle5: + dependencies: + '@nomiclabs/truffle-contract': + specifier: ^4.2.23 + version: 4.2.23(web3-core-helpers@1.10.3)(web3-core-promievent@1.10.3)(web3-eth-abi@1.10.3)(web3-utils@1.10.3)(web3@1.10.3) + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + chai: + specifier: ^4.2.0 + version: 4.3.7 + ethereumjs-util: + specifier: ^7.1.4 + version: 7.1.4 + fs-extra: + specifier: ^7.0.1 + version: 7.0.1 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@nomiclabs/hardhat-web3': + specifier: workspace:^2.0.0 + version: link:../hardhat-web3 + '@types/fs-extra': + specifier: ^5.1.0 + version: 5.1.0 + '@types/glob': + specifier: ^7.1.1 + version: 7.2.0 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + hardhat: + specifier: workspace:^2.6.4 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + web3: + specifier: ^1.0.0-beta.36 + version: 1.10.3 + + packages/hardhat-verify: + dependencies: + '@ethersproject/abi': + specifier: ^5.1.2 + version: 5.7.0 + '@ethersproject/address': + specifier: ^5.0.2 + version: 5.7.0 + cbor: + specifier: ^8.1.0 + version: 8.1.0 + chalk: + specifier: ^2.4.2 + version: 2.4.2 + debug: + specifier: ^4.1.1 + version: 4.3.4(supports-color@8.1.1) + lodash.clonedeep: + specifier: ^4.5.0 + version: 4.5.0 + semver: + specifier: ^6.3.0 + version: 6.3.1 + table: + specifier: ^6.8.0 + version: 6.8.1 + undici: + specifier: ^5.14.0 + version: 5.23.0 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@nomicfoundation/hardhat-ethers': + specifier: workspace:^3.0.0 + version: link:../hardhat-ethers + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/chai-as-promised': + specifier: ^7.1.3 + version: 7.1.5 + '@types/debug': + specifier: ^4.1.4 + version: 4.1.8 + '@types/lodash.clonedeep': + specifier: ^4.5.7 + version: 4.5.7 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@types/semver': + specifier: ^6.0.2 + version: 6.2.3 + '@types/sinon': + specifier: ^9.0.8 + version: 9.0.11 + '@types/sinon-chai': + specifier: ^3.2.9 + version: 3.2.9 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + chai-as-promised: + specifier: ^7.1.1 + version: 7.1.1(chai@4.3.7) + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + ethers: + specifier: ^5.0.0 + version: 5.7.2 + hardhat: + specifier: ^2.0.4 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + nyc: + specifier: ^15.1.0 + version: 15.1.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + sinon: + specifier: ^9.0.0 + version: 9.2.4 + sinon-chai: + specifier: ^3.7.0 + version: 3.7.0(chai@4.3.7)(sinon@9.2.4) + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + + packages/hardhat-viem: + dependencies: + abitype: + specifier: ^0.9.8 + version: 0.9.8(typescript@5.0.4) + lodash.memoize: + specifier: ^4.1.2 + version: 4.1.2 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/chai-as-promised': + specifier: ^7.1.3 + version: 7.1.6 + '@types/lodash': + specifier: ^4.14.123 + version: 4.14.197 + '@types/lodash.memoize': + specifier: ^4.1.7 + version: 4.1.7 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@types/sinon': + specifier: ^9.0.8 + version: 9.0.11 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + chai-as-promised: + specifier: ^7.1.1 + version: 7.1.1(chai@4.3.7) + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + hardhat: + specifier: workspace:^2.17.0 + version: link:../hardhat-core + jest-diff: + specifier: ^29.7.0 + version: 29.7.0 + mocha: + specifier: ^10.0.0 + version: 10.2.0 + nyc: + specifier: ^15.1.0 + version: 15.1.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + sinon: + specifier: ^9.0.0 + version: 9.2.4 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + viem: + specifier: ^1.15.1 + version: 1.15.1(typescript@5.0.4) + + packages/hardhat-vyper: + dependencies: + debug: + specifier: ^4.1.1 + version: 4.3.4(supports-color@8.1.1) + fs-extra: + specifier: ^7.0.1 + version: 7.0.1 + io-ts: + specifier: 1.10.4 + version: 1.10.4 + lodash: + specifier: ^4.17.11 + version: 4.17.21 + semver: + specifier: ^6.3.0 + version: 6.3.1 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/chai-as-promised': + specifier: ^7.1.3 + version: 7.1.8 + '@types/debug': + specifier: ^4.1.4 + version: 4.1.8 + '@types/fs-extra': + specifier: ^5.1.0 + version: 5.1.0 + '@types/lodash': + specifier: ^4.14.123 + version: 4.14.197 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@types/semver': + specifier: ^6.0.2 + version: 6.2.3 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + chai-as-promised: + specifier: ^7.1.1 + version: 7.1.1(chai@4.3.7) + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + hardhat: + specifier: workspace:^2.8.3 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + + packages/hardhat-web3: + dependencies: + '@types/bignumber.js': + specifier: ^5.0.0 + version: 5.0.0 + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + hardhat: + specifier: workspace:^2.0.0 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + sha3: + specifier: ^2.1.4 + version: 2.1.4 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + web3: + specifier: ^1.0.0-beta.36 + version: 1.10.3 + + packages/hardhat-web3-legacy: + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + hardhat: + specifier: workspace:^2.0.0 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + web3: + specifier: ^0.20.0 + version: 0.20.0 + + packages/hardhat-web3-v4: + devDependencies: + '@nomicfoundation/eslint-plugin-hardhat-internal-rules': + specifier: workspace:^ + version: link:../eslint-plugin-hardhat-internal-rules + '@nomicfoundation/eslint-plugin-slow-imports': + specifier: workspace:^ + version: link:../eslint-plugin-slow-imports + '@types/chai': + specifier: ^4.2.0 + version: 4.3.5 + '@types/chai-as-promised': + specifier: ^7.1.3 + version: 7.1.8 + '@types/mocha': + specifier: '>=9.1.0' + version: 10.0.1 + '@types/node': + specifier: ^16.0.0 + version: 16.18.40 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.47.0)(typescript@5.0.4) + chai: + specifier: ^4.2.0 + version: 4.3.7 + chai-as-promised: + specifier: ^7.1.1 + version: 7.1.1(chai@4.3.7) + eslint: + specifier: ^8.44.0 + version: 8.47.0 + eslint-config-prettier: + specifier: 8.3.0 + version: 8.3.0(eslint@8.47.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0) + eslint-plugin-no-only-tests: + specifier: 3.0.0 + version: 3.0.0 + eslint-plugin-prettier: + specifier: 3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1) + hardhat: + specifier: workspace:^2.0.0 + version: link:../hardhat-core + mocha: + specifier: ^10.0.0 + version: 10.2.0 + prettier: + specifier: 2.4.1 + version: 2.4.1 + rimraf: + specifier: ^3.0.2 + version: 3.0.2 + ts-node: + specifier: ^10.8.0 + version: 10.9.1(@types/node@16.18.40)(typescript@5.0.4) + typescript: + specifier: ~5.0.0 + version: 5.0.4 + web3: + specifier: ^4.0.1 + version: 4.2.2(typescript@5.0.4) + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + + /@adraffy/ens-normalize@1.9.2: + resolution: {integrity: sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==} + + /@adraffy/ens-normalize@1.9.4: + resolution: {integrity: sha512-UK0bHA7hh9cR39V+4gl2/NnBBjoXIxkuWAPCaY4X7fbH4L/azIi7ilWOCjMUYfpJgraLUAqkRi2BqrjME8Rynw==} + dev: true + + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + dev: true + + /@babel/code-frame@7.22.10: + resolution: {integrity: sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.20 + chalk: 2.4.2 + + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.20 + chalk: 2.4.2 + dev: true + + /@babel/compat-data@7.23.2: + resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.23.2: + resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/helpers': 7.23.2 + '@babel/parser': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + convert-source-map: 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.23.0: + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + jsesc: 2.5.2 + dev: true + + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/helper-validator-option': 7.22.15 + browserslist: 4.22.1 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2): + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option@7.22.15: + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers@7.23.2: + resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight@7.22.20: + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + + /@babel/parser@7.23.0: + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/runtime@7.22.10: + resolution: {integrity: sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + dev: true + + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + dev: true + + /@babel/traverse@7.23.2: + resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@chainsafe/as-sha256@0.3.1: + resolution: {integrity: sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==} + dev: false + + /@chainsafe/persistent-merkle-tree@0.4.2: + resolution: {integrity: sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + dev: false + + /@chainsafe/persistent-merkle-tree@0.5.0: + resolution: {integrity: sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + dev: false + + /@chainsafe/ssz@0.10.2: + resolution: {integrity: sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + '@chainsafe/persistent-merkle-tree': 0.5.0 + dev: false + + /@chainsafe/ssz@0.9.4: + resolution: {integrity: sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==} + dependencies: + '@chainsafe/as-sha256': 0.3.1 + '@chainsafe/persistent-merkle-tree': 0.4.2 + case: 1.6.3 + dev: false + + /@changesets/apply-release-plan@6.1.4: + resolution: {integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==} + dependencies: + '@babel/runtime': 7.22.10 + '@changesets/config': 2.3.1 + '@changesets/get-version-range-type': 0.3.2 + '@changesets/git': 2.0.0 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.5.4 + dev: true + + /@changesets/assemble-release-plan@5.2.4: + resolution: {integrity: sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg==} + dependencies: + '@babel/runtime': 7.22.10 + '@changesets/errors': 0.1.4 + '@changesets/get-dependents-graph': 1.3.6 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + semver: 7.5.4 + dev: true + + /@changesets/changelog-git@0.1.14: + resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==} + dependencies: + '@changesets/types': 5.2.1 + dev: true + + /@changesets/cli@2.26.2: + resolution: {integrity: sha512-dnWrJTmRR8bCHikJHl9b9HW3gXACCehz4OasrXpMp7sx97ECuBGGNjJhjPhdZNCvMy9mn4BWdplI323IbqsRig==} + hasBin: true + dependencies: + '@babel/runtime': 7.22.10 + '@changesets/apply-release-plan': 6.1.4 + '@changesets/assemble-release-plan': 5.2.4 + '@changesets/changelog-git': 0.1.14 + '@changesets/config': 2.3.1 + '@changesets/errors': 0.1.4 + '@changesets/get-dependents-graph': 1.3.6 + '@changesets/get-release-plan': 3.0.17 + '@changesets/git': 2.0.0 + '@changesets/logger': 0.0.5 + '@changesets/pre': 1.0.14 + '@changesets/read': 0.5.9 + '@changesets/types': 5.2.1 + '@changesets/write': 0.2.3 + '@manypkg/get-packages': 1.1.3 + '@types/is-ci': 3.0.0 + '@types/semver': 7.5.0 + ansi-colors: 4.1.3 + chalk: 2.4.2 + enquirer: 2.4.1 + external-editor: 3.1.0 + fs-extra: 7.0.1 + human-id: 1.0.2 + is-ci: 3.0.1 + meow: 6.1.1 + outdent: 0.5.0 + p-limit: 2.3.0 + preferred-pm: 3.0.3 + resolve-from: 5.0.0 + semver: 7.5.4 + spawndamnit: 2.0.0 + term-size: 2.2.1 + tty-table: 4.2.1 + dev: true + + /@changesets/config@2.3.1: + resolution: {integrity: sha512-PQXaJl82CfIXddUOppj4zWu+987GCw2M+eQcOepxN5s+kvnsZOwjEJO3DH9eVy+OP6Pg/KFEWdsECFEYTtbg6w==} + dependencies: + '@changesets/errors': 0.1.4 + '@changesets/get-dependents-graph': 1.3.6 + '@changesets/logger': 0.0.5 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.5 + dev: true + + /@changesets/errors@0.1.4: + resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} + dependencies: + extendable-error: 0.1.7 + dev: true + + /@changesets/get-dependents-graph@1.3.6: + resolution: {integrity: sha512-Q/sLgBANmkvUm09GgRsAvEtY3p1/5OCzgBE5vX3vgb5CvW0j7CEljocx5oPXeQSNph6FXulJlXV3Re/v3K3P3Q==} + dependencies: + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + chalk: 2.4.2 + fs-extra: 7.0.1 + semver: 7.5.4 + dev: true + + /@changesets/get-release-plan@3.0.17: + resolution: {integrity: sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw==} + dependencies: + '@babel/runtime': 7.22.10 + '@changesets/assemble-release-plan': 5.2.4 + '@changesets/config': 2.3.1 + '@changesets/pre': 1.0.14 + '@changesets/read': 0.5.9 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + dev: true + + /@changesets/get-version-range-type@0.3.2: + resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} + dev: true + + /@changesets/git@2.0.0: + resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} + dependencies: + '@babel/runtime': 7.22.10 + '@changesets/errors': 0.1.4 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.5 + spawndamnit: 2.0.0 + dev: true + + /@changesets/logger@0.0.5: + resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} + dependencies: + chalk: 2.4.2 + dev: true + + /@changesets/parse@0.3.16: + resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} + dependencies: + '@changesets/types': 5.2.1 + js-yaml: 3.14.1 + dev: true + + /@changesets/pre@1.0.14: + resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} + dependencies: + '@babel/runtime': 7.22.10 + '@changesets/errors': 0.1.4 + '@changesets/types': 5.2.1 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + dev: true + + /@changesets/read@0.5.9: + resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} + dependencies: + '@babel/runtime': 7.22.10 + '@changesets/git': 2.0.0 + '@changesets/logger': 0.0.5 + '@changesets/parse': 0.3.16 + '@changesets/types': 5.2.1 + chalk: 2.4.2 + fs-extra: 7.0.1 + p-filter: 2.1.0 + dev: true + + /@changesets/types@4.1.0: + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + dev: true + + /@changesets/types@5.2.1: + resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} + dev: true + + /@changesets/write@0.2.3: + resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} + dependencies: + '@babel/runtime': 7.22.10 + '@changesets/types': 5.2.1 + fs-extra: 7.0.1 + human-id: 1.0.2 + prettier: 2.8.8 + dev: true + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.47.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.47.0 + eslint-visitor-keys: 3.4.3 + + /@eslint-community/regexpp@4.6.2: + resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + /@eslint/eslintrc@2.1.2: + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4(supports-color@8.1.1) + espree: 9.6.1 + globals: 13.21.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + /@eslint/js@8.47.0: + resolution: {integrity: sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + /@ethereumjs/common@2.6.5: + resolution: {integrity: sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==} + dependencies: + crc-32: 1.2.2 + ethereumjs-util: 7.1.5 + + /@ethereumjs/rlp@4.0.1: + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + + /@ethereumjs/tx@3.5.2: + resolution: {integrity: sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==} + dependencies: + '@ethereumjs/common': 2.6.5 + ethereumjs-util: 7.1.5 + + /@ethereumjs/util@8.1.0: + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.1.2 + micro-ftch: 0.3.1 + + /@ethersproject/abi@5.0.7: + resolution: {integrity: sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: false + + /@ethersproject/abi@5.7.0: + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + /@ethersproject/abstract-provider@5.7.0: + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + + /@ethersproject/abstract-signer@5.7.0: + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + + /@ethersproject/address@5.7.0: + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + + /@ethersproject/base64@5.7.0: + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + + /@ethersproject/basex@5.7.0: + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 + + /@ethersproject/bignumber@5.7.0: + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + + /@ethersproject/bytes@5.7.0: + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + dependencies: + '@ethersproject/logger': 5.7.0 + + /@ethersproject/constants@5.7.0: + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + + /@ethersproject/contracts@5.7.0: + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + + /@ethersproject/hash@5.7.0: + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + /@ethersproject/hdnode@5.7.0: + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + /@ethersproject/json-wallets@5.7.0: + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + + /@ethersproject/keccak256@5.7.0: + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + + /@ethersproject/logger@5.7.0: + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + + /@ethersproject/networks@5.7.1: + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + dependencies: + '@ethersproject/logger': 5.7.0 + + /@ethersproject/pbkdf2@5.7.0: + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 + + /@ethersproject/properties@5.7.0: + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + dependencies: + '@ethersproject/logger': 5.7.0 + + /@ethersproject/providers@5.7.2: + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 7.4.6 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + /@ethersproject/random@5.7.0: + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + /@ethersproject/rlp@5.7.0: + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + /@ethersproject/sha2@5.7.0: + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + + /@ethersproject/signing-key@5.7.0: + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + + /@ethersproject/solidity@5.7.0: + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + + /@ethersproject/strings@5.7.0: + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + /@ethersproject/transactions@5.7.0: + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + + /@ethersproject/units@5.7.0: + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + /@ethersproject/wallet@5.7.0: + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + /@ethersproject/web@5.7.1: + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + /@ethersproject/wordlists@5.7.0: + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + /@fvictorio/tabtab@0.0.3: + resolution: {integrity: sha512-bT/BSy8MJThrTebqTCjXRnGSgZWthHLigZ4k2AvfNtC79vPyBS1myaxw8gRU6RxIcdDD3HBtm7pOsOoyC086Zg==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + enquirer: 2.4.1 + minimist: 1.2.8 + mkdirp: 1.0.4 + untildify: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@humanwhocodes/config-array@0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + /@humanwhocodes/object-schema@1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + + /@istanbuljs/load-nyc-config@1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.20 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@ledgerhq/cryptoassets@11.0.1: + resolution: {integrity: sha512-VhSA1ydoTnNjoC5c+S/a+YURJV+UNvuLVkRrKpP87zaQ2a+odPkP3EVDrU+G1Dvt/LipA24ZgcpoxXTbO6fQ9Q==} + dependencies: + invariant: 2.2.4 + dev: false + + /@ledgerhq/cryptoassets@9.13.0: + resolution: {integrity: sha512-MzGJyc48OGU/FLYGYwEJyfOgbJzlR8XJ9Oo6XpNpNUM1/E5NDqvD72V0D+0uWIJYN3e2NtyqHXShLZDu7P95YA==} + dependencies: + invariant: 2.2.4 + dev: false + + /@ledgerhq/devices@8.0.7: + resolution: {integrity: sha512-BbPyET52lXnVs7CxJWrGYqmtGdbGzj+XnfCqLsDnA7QYr1CZREysxmie+Rr6BKpNDBRVesAovXjtaVaZOn+upw==} + dependencies: + '@ledgerhq/errors': 6.14.0 + '@ledgerhq/logs': 6.10.1 + rxjs: 6.6.7 + semver: 7.5.4 + dev: false + + /@ledgerhq/domain-service@1.1.13(debug@4.3.4): + resolution: {integrity: sha512-8XQl4glEfNyX4BkNhuwe69mzn1VIasWFoKlgXIXf6gc8Rw1Qzcn0LE+/3DBxZ3pC3IWiBnm7MmXMrIaSLjnPNQ==} + dependencies: + '@ledgerhq/cryptoassets': 11.0.1 + '@ledgerhq/errors': 6.14.0 + '@ledgerhq/logs': 6.10.1 + '@ledgerhq/types-live': 6.41.1 + axios: 1.6.0(debug@4.3.4) + eip55: 2.1.1 + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) + transitivePeerDependencies: + - debug + dev: false + + /@ledgerhq/errors@6.12.6: + resolution: {integrity: sha512-D+r2B09vaRO06wfGoss+rNgwqWSoK0bCtsaJWzlD2hv1zxTtucqVtSztbRFypIqxWTCb3ix5Nh2dWHEJVTp2Xw==} + dev: false + + /@ledgerhq/errors@6.14.0: + resolution: {integrity: sha512-ZWJw2Ti6Dq1Ott/+qYqJdDWeZm16qI3VNG5rFlb0TQ3UcAyLIQZbnnzzdcVVwVeZiEp66WIpINd/pBdqsHVyOA==} + dev: false + + /@ledgerhq/hw-app-eth@6.33.6(debug@4.3.4): + resolution: {integrity: sha512-QzYvr5FNEWWd70Vg04A2i8CY0mtPgJrrX7/KePabjXrR8NjDyJ5Ej8qSQPBTp2dkR4TGiz5Y7+HIcWpdgYzjzg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ledgerhq/cryptoassets': 9.13.0 + '@ledgerhq/domain-service': 1.1.13(debug@4.3.4) + '@ledgerhq/errors': 6.12.6 + '@ledgerhq/hw-transport': 6.28.4 + '@ledgerhq/hw-transport-mocker': 6.27.19 + '@ledgerhq/logs': 6.10.1 + axios: 1.6.0(debug@4.3.4) + bignumber.js: 9.1.1 + crypto-js: 4.2.0 + transitivePeerDependencies: + - debug + dev: false + + /@ledgerhq/hw-transport-mocker@6.27.19: + resolution: {integrity: sha512-sD/7Ht1flaHZcwIFOi2E1LTHYLdAOe206/JwlwRU78pT0oUan8FnXR5SD8PSmhwgmQjJXto+PFBlmVe5EIt9Lw==} + dependencies: + '@ledgerhq/hw-transport': 6.28.8 + '@ledgerhq/logs': 6.10.1 + dev: false + + /@ledgerhq/hw-transport-node-hid-noevents@6.27.19: + resolution: {integrity: sha512-zOIB1fBiQH9ZYFzoEpNY4n1lE7bGPgRT+k85fKuLM7cxxm5Sy+TgrdxImvBz0IQUS8EvrtZCm+dVWkb2sH/6OA==} + dependencies: + '@ledgerhq/devices': 8.0.7 + '@ledgerhq/errors': 6.14.0 + '@ledgerhq/hw-transport': 6.28.8 + '@ledgerhq/logs': 6.10.1 + node-hid: 2.1.2 + dev: false + + /@ledgerhq/hw-transport-node-hid@6.27.13: + resolution: {integrity: sha512-j4c1UOMylX9cE9ebTh+qqMfzZDJpK8WZ7/kalxdY/MHWQcO+F2XAMvEqdZOaMjSIhI0vbgL/OoEvO2nxGFhObA==} + dependencies: + '@ledgerhq/devices': 8.0.7 + '@ledgerhq/errors': 6.12.6 + '@ledgerhq/hw-transport': 6.28.4 + '@ledgerhq/hw-transport-node-hid-noevents': 6.27.19 + '@ledgerhq/logs': 6.10.1 + lodash: 4.17.21 + node-hid: 2.1.2 + usb: 1.9.2 + dev: false + + /@ledgerhq/hw-transport@6.28.4: + resolution: {integrity: sha512-fB2H92YQjidmae2GFCmOGPwkZWk0lvTu0tlLlzfiY0wRheAG+DEgjnqhdU8wmydkPLIj0WUjRgldtnJtg/a2iQ==} + dependencies: + '@ledgerhq/devices': 8.0.7 + '@ledgerhq/errors': 6.12.6 + events: 3.3.0 + dev: false + + /@ledgerhq/hw-transport@6.28.8: + resolution: {integrity: sha512-XxQVl4htd018u/M66r0iu5nlHi+J6QfdPsORzDF6N39jaz+tMqItb7tUlXM/isggcuS5lc7GJo7NOuJ8rvHZaQ==} + dependencies: + '@ledgerhq/devices': 8.0.7 + '@ledgerhq/errors': 6.14.0 + events: 3.3.0 + dev: false + + /@ledgerhq/logs@6.10.1: + resolution: {integrity: sha512-z+ILK8Q3y+nfUl43ctCPuR4Y2bIxk/ooCQFwZxhtci1EhAtMDzMAx2W25qx8G1PPL9UUOdnUax19+F0OjXoj4w==} + dev: false + + /@ledgerhq/types-live@6.41.1: + resolution: {integrity: sha512-M9NcGlpyW7383HZ+Wcl+vVj07fKlBLQT29wrrPTW9raj2iq0fzyAaxSQPs0VKX6LghLQSmXG2EdcvQ9v5FakgA==} + dependencies: + bignumber.js: 9.1.2 + rxjs: 6.6.7 + dev: false + + /@manypkg/find-root@1.1.0: + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + dependencies: + '@babel/runtime': 7.22.10 + '@types/node': 12.20.55 + find-up: 4.1.0 + fs-extra: 8.1.0 + dev: true + + /@manypkg/get-packages@1.1.3: + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + dependencies: + '@babel/runtime': 7.22.10 + '@changesets/types': 4.1.0 + '@manypkg/find-root': 1.1.0 + fs-extra: 8.1.0 + globby: 11.1.0 + read-yaml-file: 1.1.0 + dev: true + + /@metamask/eth-sig-util@4.0.1: + resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} + engines: {node: '>=12.0.0'} + dependencies: + ethereumjs-abi: 0.6.8 + ethereumjs-util: 6.2.1 + ethjs-util: 0.1.6 + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + dev: false + + /@noble/curves@1.1.0: + resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} + dependencies: + '@noble/hashes': 1.3.1 + + /@noble/curves@1.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + dev: true + + /@noble/hashes@1.1.2: + resolution: {integrity: sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==} + + /@noble/hashes@1.2.0: + resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} + + /@noble/hashes@1.3.1: + resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} + engines: {node: '>= 16'} + + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + + /@noble/secp256k1@1.7.1: + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + + /@nomicfoundation/ethereumjs-block@5.0.2: + resolution: {integrity: sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-trie': 6.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + ethereum-cryptography: 0.1.3 + ethers: 5.7.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-blockchain@7.0.2: + resolution: {integrity: sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-ethash': 3.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-trie': 6.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + abstract-level: 1.0.3 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + level: 8.0.0 + lru-cache: 5.1.1 + memory-level: 1.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-common@4.0.2: + resolution: {integrity: sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg==} + dependencies: + '@nomicfoundation/ethereumjs-util': 9.0.2 + crc-32: 1.2.2 + dev: false + + /@nomicfoundation/ethereumjs-ethash@3.0.2: + resolution: {integrity: sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + abstract-level: 1.0.3 + bigint-crypto-utils: 3.3.0 + ethereum-cryptography: 0.1.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-evm@2.0.2: + resolution: {integrity: sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ==} + engines: {node: '>=14'} + dependencies: + '@ethersproject/providers': 5.7.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + mcl-wasm: 0.7.9 + rustbn.js: 0.2.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-rlp@5.0.2: + resolution: {integrity: sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==} + engines: {node: '>=14'} + hasBin: true + dev: false + + /@nomicfoundation/ethereumjs-statemanager@2.0.2: + resolution: {integrity: sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA==} + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + ethers: 5.7.2 + js-sdsl: 4.4.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-trie@6.0.2: + resolution: {integrity: sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + '@types/readable-stream': 2.3.15 + ethereum-cryptography: 0.1.3 + readable-stream: 3.6.2 + dev: false + + /@nomicfoundation/ethereumjs-tx@5.0.2: + resolution: {integrity: sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==} + engines: {node: '>=14'} + dependencies: + '@chainsafe/ssz': 0.9.4 + '@ethersproject/providers': 5.7.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + ethereum-cryptography: 0.1.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@nomicfoundation/ethereumjs-util@9.0.2: + resolution: {integrity: sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==} + engines: {node: '>=14'} + dependencies: + '@chainsafe/ssz': 0.10.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + ethereum-cryptography: 0.1.3 + dev: false + + /@nomicfoundation/ethereumjs-vm@7.0.2: + resolution: {integrity: sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==} + engines: {node: '>=14'} + dependencies: + '@nomicfoundation/ethereumjs-block': 5.0.2 + '@nomicfoundation/ethereumjs-blockchain': 7.0.2 + '@nomicfoundation/ethereumjs-common': 4.0.2 + '@nomicfoundation/ethereumjs-evm': 2.0.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-statemanager': 2.0.2 + '@nomicfoundation/ethereumjs-trie': 6.0.2 + '@nomicfoundation/ethereumjs-tx': 5.0.2 + '@nomicfoundation/ethereumjs-util': 9.0.2 + debug: 4.3.4(supports-color@8.1.1) + ethereum-cryptography: 0.1.3 + mcl-wasm: 0.7.9 + rustbn.js: 0.2.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1: + resolution: {integrity: sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1: + resolution: {integrity: sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1: + resolution: {integrity: sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1: + resolution: {integrity: sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [glibc] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1: + resolution: {integrity: sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + libc: [musl] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1: + resolution: {integrity: sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [glibc] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1: + resolution: {integrity: sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + libc: [musl] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1: + resolution: {integrity: sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1: + resolution: {integrity: sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1: + resolution: {integrity: sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@nomicfoundation/solidity-analyzer@0.1.1: + resolution: {integrity: sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==} + engines: {node: '>= 12'} + optionalDependencies: + '@nomicfoundation/solidity-analyzer-darwin-arm64': 0.1.1 + '@nomicfoundation/solidity-analyzer-darwin-x64': 0.1.1 + '@nomicfoundation/solidity-analyzer-freebsd-x64': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-arm64-musl': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-x64-gnu': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.1 + '@nomicfoundation/solidity-analyzer-win32-arm64-msvc': 0.1.1 + '@nomicfoundation/solidity-analyzer-win32-ia32-msvc': 0.1.1 + '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.1 + dev: false + + /@nomiclabs/truffle-contract@4.2.23(web3-core-helpers@1.10.3)(web3-core-promievent@1.10.3)(web3-eth-abi@1.10.3)(web3-utils@1.10.3)(web3@1.10.3): + resolution: {integrity: sha512-Khj/Ts9r0LqEpGYhISbc+8WTOd6qJ4aFnDR+Ew+neqcjGnhwrIvuihNwPFWU6hDepW3Xod6Y+rTo90N8sLRDjw==} + peerDependencies: + web3: ^1.2.1 + web3-core-helpers: ^1.2.1 + web3-core-promievent: ^1.2.1 + web3-eth-abi: ^1.2.1 + web3-utils: ^1.2.1 + dependencies: + '@truffle/blockchain-utils': 0.0.25 + '@truffle/contract-schema': 3.4.16 + '@truffle/debug-utils': 4.2.14 + '@truffle/error': 0.0.11 + '@truffle/interface-adapter': 0.4.24 + bignumber.js: 7.2.1 + ethereum-ens: 0.8.0 + ethers: 4.0.49 + source-map-support: 0.5.21 + web3: 1.10.3 + web3-core-helpers: 1.10.3 + web3-core-promievent: 1.10.3 + web3-eth-abi: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /@scure/base@1.1.3: + resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} + + /@scure/bip32@1.1.5: + resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/base': 1.1.3 + + /@scure/bip32@1.3.1: + resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} + dependencies: + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 + + /@scure/bip32@1.3.2: + resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} + dependencies: + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 + dev: true + + /@scure/bip39@1.1.1: + resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} + dependencies: + '@noble/hashes': 1.2.0 + '@scure/base': 1.1.3 + + /@scure/bip39@1.2.1: + resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} + dependencies: + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 + + /@sentry/core@5.30.0: + resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + dev: false + + /@sentry/hub@5.30.0: + resolution: {integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==} + engines: {node: '>=6'} + dependencies: + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + dev: false + + /@sentry/minimal@5.30.0: + resolution: {integrity: sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/types': 5.30.0 + tslib: 1.14.1 + dev: false + + /@sentry/node@5.30.0: + resolution: {integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==} + engines: {node: '>=6'} + dependencies: + '@sentry/core': 5.30.0 + '@sentry/hub': 5.30.0 + '@sentry/tracing': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + cookie: 0.4.2 + https-proxy-agent: 5.0.1 + lru_map: 0.3.3 + tslib: 1.14.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@sentry/tracing@5.30.0: + resolution: {integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + dev: false + + /@sentry/types@5.30.0: + resolution: {integrity: sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==} + engines: {node: '>=6'} + dev: false + + /@sentry/utils@5.30.0: + resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} + engines: {node: '>=6'} + dependencies: + '@sentry/types': 5.30.0 + tslib: 1.14.1 + dev: false + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + + /@sindresorhus/is@0.14.0: + resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} + engines: {node: '>=6'} + dev: false + + /@sindresorhus/is@4.6.0: + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + /@sinonjs/commons@1.8.6: + resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers@6.0.1: + resolution: {integrity: sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==} + dependencies: + '@sinonjs/commons': 1.8.6 + dev: true + + /@sinonjs/samsam@5.3.1: + resolution: {integrity: sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==} + dependencies: + '@sinonjs/commons': 1.8.6 + lodash.get: 4.4.2 + type-detect: 4.0.8 + dev: true + + /@sinonjs/text-encoding@0.7.2: + resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} + dev: true + + /@solidity-parser/parser@0.14.5: + resolution: {integrity: sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==} + dependencies: + antlr4ts: 0.5.0-alpha.4 + dev: true + + /@solidity-parser/parser@0.15.0: + resolution: {integrity: sha512-5UFJJTzWi1hgFk6aGCZ5rxG2DJkCJOzJ74qg7UkWSNCDSigW+CJLoYUb5bLiKrtI34Nr9rpFSUNHfkqtlL+N/w==} + dependencies: + antlr4ts: 0.5.0-alpha.4 + dev: false + + /@szmarczak/http-timer@1.1.2: + resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} + engines: {node: '>=6'} + dependencies: + defer-to-connect: 1.1.3 + dev: false + + /@szmarczak/http-timer@4.0.6: + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + dependencies: + defer-to-connect: 2.0.1 + + /@szmarczak/http-timer@5.0.1: + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + dependencies: + defer-to-connect: 2.0.1 + + /@truffle/blockchain-utils@0.0.25: + resolution: {integrity: sha512-XA5m0BfAWtysy5ChHyiAf1fXbJxJXphKk+eZ9Rb9Twi6fn3Jg4gnHNwYXJacYFEydqT5vr2s4Ou812JHlautpw==} + dependencies: + source-map-support: 0.5.21 + dev: false + + /@truffle/codec@0.7.1: + resolution: {integrity: sha512-mNd6KnW6J0UB1zafGBXDlTEbCMvWpmPAJmzv7aF/nAIaN/F8UePSCiQ1OTQP39Rprj6GFiCCaWVnBAwum6UGSg==} + dependencies: + big.js: 5.2.2 + bn.js: 4.12.0 + borc: 2.1.2 + debug: 4.3.4(supports-color@8.1.1) + lodash.clonedeep: 4.5.0 + lodash.escaperegexp: 4.1.2 + lodash.partition: 4.6.0 + lodash.sum: 4.0.2 + semver: 6.3.1 + source-map-support: 0.5.21 + utf8: 3.0.0 + web3-utils: 1.2.9 + transitivePeerDependencies: + - supports-color + dev: false + + /@truffle/contract-schema@3.4.16: + resolution: {integrity: sha512-g0WNYR/J327DqtJPI70ubS19K1Fth/1wxt2jFqLsPmz5cGZVjCwuhiie+LfBde4/Mc9QR8G+L3wtmT5cyoBxAg==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + ajv: 6.12.6 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: false + + /@truffle/debug-utils@4.2.14: + resolution: {integrity: sha512-g5UTX2DPTzrjRjBJkviGI2IrQRTTSvqjmNWCNZNXP+vgQKNxL9maLZhQ6oA3BuuByVW/kusgYeXt8+W1zynC8g==} + dependencies: + '@truffle/codec': 0.7.1 + '@trufflesuite/chromafi': 2.2.2 + chalk: 2.4.2 + debug: 4.3.4(supports-color@8.1.1) + highlight.js: 9.18.5 + highlightjs-solidity: 1.2.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@truffle/error@0.0.11: + resolution: {integrity: sha512-ju6TucjlJkfYMmdraYY/IBJaFb+Sa+huhYtOoyOJ+G29KcgytUVnDzKGwC7Kgk6IsxQMm62Mc1E0GZzFbGGipw==} + dev: false + + /@truffle/interface-adapter@0.4.24: + resolution: {integrity: sha512-2Zho4dJbm/XGwNleY7FdxcjXiAR3SzdGklgrAW4N/YVmltaJv6bT56ACIbPNN6AdzkTSTO65OlsB/63sfSa/VA==} + dependencies: + bn.js: 5.2.1 + ethers: 4.0.49 + web3: 1.3.6 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@trufflesuite/chromafi@2.2.2: + resolution: {integrity: sha512-mItQwVBsb8qP/vaYHQ1kDt2vJLhjoEXJptT6y6fJGvFophMFhOI/NsTVUa0nJL1nyMeFiS6hSYuNVdpQZzB1gA==} + dependencies: + ansi-mark: 1.0.4 + ansi-regex: 3.0.1 + array-uniq: 1.0.3 + camelcase: 4.1.0 + chalk: 2.4.2 + cheerio: 1.0.0-rc.12 + detect-indent: 5.0.0 + he: 1.2.0 + highlight.js: 10.7.3 + lodash.merge: 4.6.2 + min-indent: 1.0.1 + strip-ansi: 4.0.0 + strip-indent: 2.0.0 + super-split: 1.1.0 + dev: false + + /@tsconfig/node10@1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@typechain/ethers-v6@0.5.0(ethers@6.7.0)(typechain@8.3.1)(typescript@5.0.4): + resolution: {integrity: sha512-wsz7AvbY5n2uVwpS2RHDYsW6wYOrhWxeTLFpxuzhO62w/ZDQEVIipArX731KA/hdqygP2zJ2RTkVXgzU1WrU1g==} + peerDependencies: + ethers: 6.x + typechain: ^8.3.1 + typescript: '>=4.7.0' + dependencies: + ethers: 6.7.0 + lodash: 4.17.21 + ts-essentials: 7.0.3(typescript@5.0.4) + typechain: 8.3.1(typescript@5.0.4) + typescript: 5.0.4 + dev: true + + /@typechain/hardhat@9.0.0(@typechain/ethers-v6@0.5.0)(ethers@6.7.0)(hardhat@packages+hardhat-core)(typechain@8.3.1): + resolution: {integrity: sha512-oCGRvcsryRHEDZ4KO2lenB7wdf8WMDS+f9KGcRFiQWcRLpWWD0ruBGRxNjzkTqyPLtgQ9MvZsXquAFPEw7gAEA==} + peerDependencies: + '@typechain/ethers-v6': ^0.5.0 + ethers: ^6.1.0 + hardhat: ^2.9.9 + typechain: ^8.3.1 + dependencies: + '@typechain/ethers-v6': 0.5.0(ethers@6.7.0)(typechain@8.3.1)(typescript@5.0.4) + ethers: 6.7.0 + fs-extra: 9.1.0 + hardhat: link:packages/hardhat-core + typechain: 8.3.1(typescript@5.0.4) + dev: true + + /@types/async-eventemitter@0.2.1: + resolution: {integrity: sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==} + dev: true + + /@types/bignumber.js@5.0.0: + resolution: {integrity: sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==} + deprecated: This is a stub types definition for bignumber.js (https://github.com/MikeMcl/bignumber.js/). bignumber.js provides its own type definitions, so you don't need @types/bignumber.js installed! + dependencies: + bignumber.js: 9.1.2 + dev: false + + /@types/bn.js@4.11.6: + resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} + dependencies: + '@types/node': 16.18.40 + dev: false + + /@types/bn.js@5.1.1: + resolution: {integrity: sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==} + dependencies: + '@types/node': 16.18.40 + + /@types/cacheable-request@6.0.3: + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 16.18.40 + '@types/responselike': 1.0.3 + + /@types/chai-as-promised@7.1.5: + resolution: {integrity: sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==} + dependencies: + '@types/chai': 4.3.5 + + /@types/chai-as-promised@7.1.6: + resolution: {integrity: sha512-cQLhk8fFarRVZAXUQV1xEnZgMoPxqKojBvRkqPCKPQCzEhpbbSKl1Uu75kDng7k5Ln6LQLUmNBjLlFthCgm1NA==} + dependencies: + '@types/chai': 4.3.5 + dev: true + + /@types/chai-as-promised@7.1.8: + resolution: {integrity: sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==} + dependencies: + '@types/chai': 4.3.5 + dev: true + + /@types/chai@4.3.5: + resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} + + /@types/ci-info@2.0.0: + resolution: {integrity: sha512-5R2/MHILQLDCzTuhs1j4Qqq8AaKUf7Ma4KSSkCtc12+fMs47zfa34qhto9goxpyX00tQK1zxB885VCiawZ5Qhg==} + dev: true + + /@types/concat-stream@1.6.1: + resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} + dependencies: + '@types/node': 16.18.40 + dev: true + + /@types/debug@4.1.8: + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} + dependencies: + '@types/ms': 0.7.31 + dev: true + + /@types/find-up@2.1.1: + resolution: {integrity: sha512-60LC501bQRN9/3yfVaEEMd7IndaufffL56PBRAejPpUrY304Ps1jfnjNqPw5jmM5R8JHWiKBAe5IHzNcPV41AA==} + dev: true + + /@types/form-data@0.0.33: + resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} + dependencies: + '@types/node': 16.18.40 + dev: true + + /@types/fs-extra@5.1.0: + resolution: {integrity: sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ==} + dependencies: + '@types/node': 16.18.40 + dev: true + + /@types/glob@7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 16.18.40 + dev: true + + /@types/http-cache-semantics@4.0.4: + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + /@types/is-ci@3.0.0: + resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} + dependencies: + ci-info: 3.8.0 + dev: true + + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/keccak@3.0.1: + resolution: {integrity: sha512-/MxAVmtyyeOvZ6dGf3ciLwFRuV5M8DRIyYNFGHYI6UyBW4/XqyO0LZw+JFMvaeY3cHItQAkELclBU1x5ank6mg==} + dependencies: + '@types/node': 16.18.40 + dev: true + + /@types/keyv@3.1.4: + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + dependencies: + '@types/node': 16.18.40 + + /@types/lodash.clonedeep@4.5.7: + resolution: {integrity: sha512-ccNqkPptFIXrpVqUECi60/DFxjNKsfoQxSQsgcBJCX/fuX1wgyQieojkcWH/KpE3xzLoWN/2k+ZeGqIN3paSvw==} + dependencies: + '@types/lodash': 4.14.197 + dev: true + + /@types/lodash.isequal@4.5.6: + resolution: {integrity: sha512-Ww4UGSe3DmtvLLJm2F16hDwEQSv7U0Rr8SujLUA2wHI2D2dm8kPu6Et+/y303LfjTIwSBKXB/YTUcAKpem/XEg==} + dependencies: + '@types/lodash': 4.14.197 + dev: true + + /@types/lodash.memoize@4.1.7: + resolution: {integrity: sha512-lGN7WeO4vO6sICVpf041Q7BX/9k1Y24Zo3FY0aUezr1QlKznpjzsDk3T3wvH8ofYzoK0QupN9TWcFAFZlyPwQQ==} + dependencies: + '@types/lodash': 4.14.197 + dev: true + + /@types/lodash@4.14.197: + resolution: {integrity: sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==} + dev: true + + /@types/lru-cache@5.1.1: + resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} + dev: false + + /@types/minimatch@5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: true + + /@types/minimist@1.2.2: + resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} + dev: true + + /@types/mocha@10.0.1: + resolution: {integrity: sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==} + dev: true + + /@types/ms@0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: true + + /@types/node@10.17.60: + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + dev: true + + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + /@types/node@16.18.40: + resolution: {integrity: sha512-+yno3ItTEwGxXiS/75Q/aHaa5srkpnJaH+kdkTVJ3DtJEwv92itpKbxU+FjPoh2m/5G9zmUQfrL4A4C13c+iGA==} + + /@types/node@18.15.13: + resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} + + /@types/node@8.10.66: + resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} + dev: true + + /@types/normalize-package-data@2.4.1: + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + dev: true + + /@types/pbkdf2@3.1.0: + resolution: {integrity: sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==} + dependencies: + '@types/node': 16.18.40 + + /@types/prettier@2.7.3: + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + dev: true + + /@types/qs@6.9.10: + resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} + dev: true + + /@types/readable-stream@2.3.15: + resolution: {integrity: sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==} + dependencies: + '@types/node': 16.18.40 + safe-buffer: 5.1.2 + dev: false + + /@types/resolve@1.20.2: + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + dev: true + + /@types/responselike@1.0.3: + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + dependencies: + '@types/node': 16.18.40 + + /@types/secp256k1@4.0.3: + resolution: {integrity: sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==} + dependencies: + '@types/node': 16.18.40 + + /@types/semver@6.2.3: + resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} + dev: true + + /@types/semver@7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + + /@types/sinon-chai@3.2.9: + resolution: {integrity: sha512-/19t63pFYU0ikrdbXKBWj9PCdnKyTd0Qkz0X91Ta081cYsq90OxYdcWwK/dwEoDa6dtXgj2HJfmzgq+QZTHdmQ==} + dependencies: + '@types/chai': 4.3.5 + '@types/sinon': 9.0.11 + dev: true + + /@types/sinon@9.0.11: + resolution: {integrity: sha512-PwP4UY33SeeVKodNE37ZlOsR9cReypbMJOhZ7BVE0lB+Hix3efCOxiJWiE5Ia+yL9Cn2Ch72EjFTRze8RZsNtg==} + dependencies: + '@types/sinonjs__fake-timers': 8.1.2 + dev: true + + /@types/sinonjs__fake-timers@8.1.2: + resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==} + dev: true + + /@types/uuid@8.3.4: + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + dev: true + + /@types/ws@7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 16.18.40 + dev: true + + /@types/ws@8.5.3: + resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} + dependencies: + '@types/node': 16.18.40 + dev: true + + /@types/ws@8.5.9: + resolution: {integrity: sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==} + dependencies: + '@types/node': 16.18.40 + dev: true + + /@typescript-eslint/eslint-plugin@5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.47.0)(typescript@5.0.4): + resolution: {integrity: sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.6.2 + '@typescript-eslint/parser': 5.61.0(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/type-utils': 5.61.0(eslint@8.47.0)(typescript@5.0.4) + '@typescript-eslint/utils': 5.61.0(eslint@8.47.0)(typescript@5.0.4) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.47.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.0.4) + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@5.61.0(eslint@8.47.0)(typescript@5.0.4): + resolution: {integrity: sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/typescript-estree': 5.61.0(typescript@5.0.4) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.47.0 + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + + /@typescript-eslint/scope-manager@5.61.0: + resolution: {integrity: sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/visitor-keys': 5.61.0 + + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/type-utils@5.61.0(eslint@8.47.0)(typescript@5.0.4): + resolution: {integrity: sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.61.0(typescript@5.0.4) + '@typescript-eslint/utils': 5.61.0(eslint@8.47.0)(typescript@5.0.4) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.47.0 + tsutils: 3.21.0(typescript@5.0.4) + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@5.61.0: + resolution: {integrity: sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.61.0(typescript@5.0.4): + resolution: {integrity: sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/visitor-keys': 5.61.0 + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.0.4) + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.0.4): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.0.4) + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@5.61.0(eslint@8.47.0)(typescript@5.0.4): + resolution: {integrity: sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.61.0 + '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/typescript-estree': 5.61.0(typescript@5.0.4) + eslint: 8.47.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + + /@typescript-eslint/utils@5.62.0(eslint@8.47.0)(typescript@5.0.4): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.0.4) + eslint: 8.47.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@5.61.0: + resolution: {integrity: sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.61.0 + eslint-visitor-keys: 3.4.3 + + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /abbrev@1.0.9: + resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} + dev: true + + /abitype@0.7.1(typescript@5.0.4): + resolution: {integrity: sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==} + peerDependencies: + typescript: '>=4.9.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + zod: + optional: true + dependencies: + typescript: 5.0.4 + dev: true + + /abitype@0.9.8(typescript@5.0.4): + resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.0.4 + + /abortcontroller-polyfill@1.7.5: + resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} + + /abstract-level@1.0.3: + resolution: {integrity: sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==} + engines: {node: '>=12'} + dependencies: + buffer: 6.0.3 + catering: 2.1.1 + is-buffer: 2.0.5 + level-supports: 4.0.1 + level-transcoder: 1.0.1 + module-error: 1.0.2 + queue-microtask: 1.2.3 + dev: false + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + /acorn-jsx@5.3.2(acorn@8.10.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + + /acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + + /address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} + dev: true + + /adm-zip@0.4.16: + resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} + engines: {node: '>=0.3.0'} + dev: false + + /aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + + /aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: false + + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + /ajv@5.5.2: + resolution: {integrity: sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==} + dependencies: + co: 4.6.0 + fast-deep-equal: 1.1.0 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.3.1 + dev: false + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + /amdefine@1.0.1: + resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} + engines: {node: '>=0.4.2'} + requiresBuild: true + dev: true + optional: true + + /ansi-colors@3.2.3: + resolution: {integrity: sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==} + engines: {node: '>=6'} + dev: true + + /ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + /ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: false + + /ansi-mark@1.0.4: + resolution: {integrity: sha512-3UG9PiYp/eyLuOojJbcQfiH0s8VmHV4M/K9e24q5EBD8PDoDy0Ii4y/VYnTgF+0hWjm8WXz4ybmX6kftbeelFw==} + dependencies: + ansi-regex: 3.0.1 + array-uniq: 1.0.3 + chalk: 2.4.2 + strip-ansi: 4.0.0 + super-split: 1.1.0 + dev: false + + /ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + + /ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-styles@1.0.0: + resolution: {integrity: sha512-3iF4FIKdxaVYT3JqQuY3Wat/T2t7TRbbQ94Fu50ZUCbLy4TFbTzr90NOHQodQkNqmeEGCw8WbeP78WNi6SKYUA==} + engines: {node: '>=0.8.0'} + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /antlr4@4.13.1: + resolution: {integrity: sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA==} + engines: {node: '>=16'} + dev: false + + /antlr4@4.8.0: + resolution: {integrity: sha512-en/MxQ4OkPgGJQ3wD/muzj1uDnFSzdFIhc2+c6bHZokWkuBb6RRvFjpWhPxWLbgQvaEzldJZ0GSQpfSAaE3hqg==} + dev: false + + /antlr4ts@0.5.0-alpha.4: + resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} + + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: false + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + /append-transform@2.0.0: + resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} + engines: {node: '>=8'} + dependencies: + default-require-extensions: 3.0.1 + dev: true + + /archy@1.0.0: + resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} + dev: true + + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /array-back@3.1.0: + resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} + engines: {node: '>=6'} + dev: true + + /array-back@4.0.2: + resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==} + engines: {node: '>=8'} + dev: true + + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: true + + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + /array-includes@3.1.6: + resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + is-string: 1.0.7 + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + /array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + + /array.prototype.flat@1.3.1: + resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.flatmap@1.3.1: + resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.reduce@1.0.6: + resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + es-array-method-boxes-properly: 1.0.0 + is-string: 1.0.7 + dev: true + + /arraybuffer.prototype.slice@1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + + /arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true + + /asn1.js@5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + dev: false + + /asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + dependencies: + safer-buffer: 2.1.2 + + /assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + /ast-parents@0.0.1: + resolution: {integrity: sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==} + dev: false + + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: false + + /async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + + /async@1.5.2: + resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} + dev: true + + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + /at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: true + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + + /aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + /aws4@1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + + /axios@0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + dependencies: + follow-redirects: 1.15.2(debug@4.3.4) + transitivePeerDependencies: + - debug + dev: false + + /axios@1.6.0(debug@4.3.4): + resolution: {integrity: sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==} + dependencies: + follow-redirects: 1.15.2(debug@4.3.4) + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + dependencies: + safe-buffer: 5.2.1 + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + /bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + dependencies: + tweetnacl: 0.14.5 + + /bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + + /better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + dependencies: + is-windows: 1.0.2 + dev: true + + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: false + + /bigint-crypto-utils@3.3.0: + resolution: {integrity: sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==} + engines: {node: '>=14.0.0'} + dev: false + + /bignumber.js@7.2.1: + resolution: {integrity: sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==} + dev: false + + /bignumber.js@9.1.1: + resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==} + + /bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + /bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + dev: false + + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /blakejs@1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + + /bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + /bn-str-256@1.9.1: + resolution: {integrity: sha512-u3muv3WO5sYv9nUQsPnDGLg731yNt/MOlKPK5pmBVqClcl7tY97tyfKxw8ed44HVrpi+7dkgJgQpbXP47a3GoQ==} + dependencies: + decimal.js-light: 2.5.1 + lodash: 4.17.21 + dev: false + + /bn.js@4.11.6: + resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} + + /bn.js@4.11.8: + resolution: {integrity: sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==} + dev: false + + /bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + + /bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + /body-parser@1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + /body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: false + + /boolean@3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + dev: true + + /borc@2.1.2: + resolution: {integrity: sha512-Sy9eoUi4OiKzq7VovMn246iTo17kzuyHJKomCfpWMlI6RpfN1gk95w7d7gH264nApVLg0HZfcpz62/g4VH1Y4w==} + engines: {node: '>=4'} + dependencies: + bignumber.js: 9.1.2 + buffer: 5.7.1 + commander: 2.20.3 + ieee754: 1.2.1 + iso-url: 0.4.7 + json-text-sequence: 0.1.1 + readable-stream: 3.6.2 + dev: false + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /breakword@1.0.6: + resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} + dependencies: + wcwidth: 1.0.1 + dev: true + + /brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + /browser-level@1.0.1: + resolution: {integrity: sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==} + dependencies: + abstract-level: 1.0.3 + catering: 2.1.1 + module-error: 1.0.2 + run-parallel-limit: 1.1.0 + dev: false + + /browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + /browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + /browserify-cipher@1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + dev: false + + /browserify-des@1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + dependencies: + cipher-base: 1.0.4 + des.js: 1.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /browserify-rsa@4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + dependencies: + bn.js: 5.2.1 + randombytes: 2.1.0 + dev: false + + /browserify-sign@4.2.2: + resolution: {integrity: sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==} + engines: {node: '>= 4'} + dependencies: + bn.js: 5.2.1 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.4 + inherits: 2.0.4 + parse-asn1: 5.1.6 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: false + + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001561 + electron-to-chromium: 1.4.578 + node-releases: 2.0.13 + update-browserslist-db: 1.0.13(browserslist@4.22.1) + dev: true + + /bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + dependencies: + base-x: 3.0.9 + + /bs58check@2.1.2: + resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} + dependencies: + bs58: 4.0.1 + create-hash: 1.2.0 + safe-buffer: 5.2.1 + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + /buffer-to-arraybuffer@0.0.5: + resolution: {integrity: sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==} + + /buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + /bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.6.0 + + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: false + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + /cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + /cacheable-lookup@6.1.0: + resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==} + engines: {node: '>=10.6.0'} + + /cacheable-request@6.1.0: + resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} + engines: {node: '>=8'} + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 3.1.0 + lowercase-keys: 2.0.0 + normalize-url: 4.5.1 + responselike: 1.0.2 + dev: false + + /cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + + /caching-transform@4.0.0: + resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} + engines: {node: '>=8'} + dependencies: + hasha: 5.2.2 + make-dir: 3.1.0 + package-hash: 4.0.0 + write-file-atomic: 3.0.3 + dev: true + + /call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + /camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + dev: true + + /camelcase@4.1.0: + resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} + engines: {node: '>=4'} + dev: false + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + /caniuse-lite@1.0.30001561: + resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==} + dev: true + + /case@1.6.3: + resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} + engines: {node: '>= 0.8.0'} + dev: false + + /caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + /catering@2.1.1: + resolution: {integrity: sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==} + engines: {node: '>=6'} + dev: false + + /cbor@8.1.0: + resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==} + engines: {node: '>=12.19'} + dependencies: + nofilter: 3.1.0 + dev: false + + /chai-as-promised@7.1.1(chai@4.3.7): + resolution: {integrity: sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==} + peerDependencies: + chai: '>= 2.1.2 < 5' + dependencies: + chai: 4.3.7 + check-error: 1.0.2 + + /chai@4.3.7: + resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.2 + deep-eql: 4.1.3 + get-func-name: 2.0.0 + loupe: 2.3.6 + pathval: 1.1.1 + type-detect: 4.0.8 + + /chalk@0.4.0: + resolution: {integrity: sha512-sQfYDlfv2DGVtjdoQqxS0cEZDroyG8h6TamA6rvxwlrU5BaSLDx9xhatBYl2pxZ7gmpNaPFVwBtdGdu5rQ+tYQ==} + engines: {node: '>=0.8.0'} + dependencies: + ansi-styles: 1.0.0 + has-color: 0.1.7 + strip-ansi: 0.1.1 + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + + /charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + dev: true + + /check-error@1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + + /cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + dev: false + + /cheerio@1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.1.0 + htmlparser2: 8.0.2 + parse5: 7.1.2 + parse5-htmlparser2-tree-adapter: 7.0.0 + dev: false + + /chokidar@3.3.0: + resolution: {integrity: sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.2.0 + optionalDependencies: + fsevents: 2.1.3 + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + + /chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + /ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + dev: false + + /ci-info@3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} + dev: true + + /cids@0.7.5: + resolution: {integrity: sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==} + engines: {node: '>=4.0.0', npm: '>=3.0.0'} + deprecated: This module has been superseded by the multiformats module + dependencies: + buffer: 5.7.1 + class-is: 1.1.0 + multibase: 0.6.1 + multicodec: 1.0.4 + multihashes: 0.4.21 + + /cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + /class-is@1.1.0: + resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} + + /classic-level@1.3.0: + resolution: {integrity: sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==} + engines: {node: '>=12'} + requiresBuild: true + dependencies: + abstract-level: 1.0.3 + catering: 2.1.1 + module-error: 1.0.2 + napi-macros: 2.2.2 + node-gyp-build: 4.6.0 + dev: false + + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: false + + /cli-spinners@2.9.1: + resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} + engines: {node: '>=6'} + dev: false + + /cli-table3@0.5.1: + resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} + engines: {node: '>=6'} + dependencies: + object-assign: 4.1.1 + string-width: 2.1.1 + optionalDependencies: + colors: 1.4.0 + dev: true + + /cliui@5.0.0: + resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} + dependencies: + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi: 5.1.0 + dev: true + + /cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + dev: true + + /cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + dependencies: + mimic-response: 1.0.1 + + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + /co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: false + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + dev: true + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + + /command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + dev: false + + /command-line-args@5.2.1: + resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} + engines: {node: '>=4.0.0'} + dependencies: + array-back: 3.1.0 + find-replace: 3.0.0 + lodash.camelcase: 4.3.0 + typical: 4.0.0 + dev: true + + /command-line-usage@6.1.3: + resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==} + engines: {node: '>=8.0.0'} + dependencies: + array-back: 4.0.2 + chalk: 2.4.2 + table-layout: 1.0.2 + typical: 5.2.0 + dev: true + + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false + + /commander@3.0.2: + resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} + dev: false + + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + /concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + dev: true + + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + + /content-hash@2.5.2: + resolution: {integrity: sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==} + dependencies: + cids: 0.7.5 + multicodec: 0.5.7 + multihashes: 0.4.21 + + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + /cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: false + + /cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + + /cookiejar@2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + dev: false + + /core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + + /cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + /cosmiconfig@8.2.0: + resolution: {integrity: sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==} + engines: {node: '>=14'} + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + + /crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + /create-ecdh@4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + dev: false + + /create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + + /create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-fetch@4.0.0: + resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + /cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + dependencies: + lru-cache: 4.1.5 + shebang-command: 1.2.0 + which: 1.3.1 + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + /crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + dev: true + + /crypto-browserify@3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.2 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.2 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + dev: false + + /crypto-js@3.3.0: + resolution: {integrity: sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==} + + /crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + dev: false + + /css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + dev: false + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: false + + /csv-generate@3.4.3: + resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} + dev: true + + /csv-parse@4.16.3: + resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} + dev: true + + /csv-stringify@5.6.5: + resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} + dev: true + + /csv@5.5.3: + resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} + engines: {node: '>= 0.1.90'} + dependencies: + csv-generate: 3.4.3 + csv-parse: 4.16.3 + csv-stringify: 5.6.5 + stream-transform: 2.1.3 + dev: true + + /d@1.0.1: + resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} + dependencies: + es5-ext: 0.10.62 + type: 1.2.0 + + /dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + dependencies: + assert-plus: 1.0.0 + + /date-time@0.1.1: + resolution: {integrity: sha512-p4psdkgdNA6x0600SKbfWiOomNb33ADBMRHf49GMhYVgJsPefZlMSLXXVWWUpbqSxB3DL5/cxKa6a8i3XPK5Xg==} + engines: {node: '>=0.10.0'} + dev: true + + /death@1.1.0: + resolution: {integrity: sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==} + dev: true + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + + /debug@3.2.6(supports-color@6.0.0): + resolution: {integrity: sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==} + deprecated: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797) + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + supports-color: 6.0.0 + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + + /debug@4.3.4(supports-color@8.1.1): + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 + + /decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + dev: true + + /decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + /decimal.js-light@2.5.1: + resolution: {integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==} + dev: false + + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + /decompress-response@3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} + dependencies: + mimic-response: 1.0.1 + + /decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + + /default-require-extensions@3.0.1: + resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} + engines: {node: '>=8'} + dependencies: + strip-bom: 4.0.0 + dev: true + + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 + + /defer-to-connect@1.1.3: + resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} + dev: false + + /defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + /define-properties@1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: true + + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + /delimit-stream@0.1.0: + resolution: {integrity: sha512-a02fiQ7poS5CnjiJBAsjGLPp5EwVoGHNeu9sziBd9huppRfsAFIpv5zNLv0V1gbop53ilngAf5Kf331AwcoRBQ==} + dev: false + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + /des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + /detect-indent@5.0.0: + resolution: {integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==} + engines: {node: '>=4'} + dev: false + + /detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + dev: true + + /detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + dev: false + + /detect-port@1.5.1: + resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} + hasBin: true + dependencies: + address: 1.2.2 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: true + + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + dev: true + + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + /diffie-hellman@5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dependencies: + bn.js: 4.12.0 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dev: false + + /difflib@0.2.4: + resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} + dependencies: + heap: 0.2.7 + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + + /dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + dev: false + + /dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: false + + /domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: false + + /domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dev: false + + /dot-prop@7.2.0: + resolution: {integrity: sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + type-fest: 2.19.0 + dev: true + + /duplexer3@0.1.5: + resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} + dev: false + + /ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + /eip55@2.1.1: + resolution: {integrity: sha512-WcagVAmNu2Ww2cDUfzuWVntYwFxbvZ5MvIyLZpMjTTkjD6sCvkGOiS86jTppzu9/gWsc8isLHAeMBWK02OnZmA==} + dependencies: + keccak: 3.0.3 + dev: false + + /electron-to-chromium@1.4.578: + resolution: {integrity: sha512-V0ZhSu1BQZKfG0yNEL6Dadzik8E1vAzfpVOapdSiT9F6yapEJ3Bk+4tZ4SMPdWiUchCgnM/ByYtBzp5ntzDMIA==} + dev: true + + /elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + /emoji-regex@7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + + /enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: false + + /env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + dev: false + + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + + /es-abstract@1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.1 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.1 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.0 + safe-array-concat: 1.0.0 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.11 + dev: true + + /es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: true + + /es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + has-tostringtag: 1.0.0 + dev: true + + /es-shim-unscopables@1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + dependencies: + has: 1.0.3 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /es5-ext@0.10.62: + resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} + engines: {node: '>=0.10'} + requiresBuild: true + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + next-tick: 1.1.0 + + /es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + dev: true + + /es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-symbol: 3.1.3 + + /es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + /es6-symbol@3.1.3: + resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} + dependencies: + d: 1.0.1 + ext: 1.7.0 + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /escodegen@1.8.1: + resolution: {integrity: sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==} + engines: {node: '>=0.12.0'} + hasBin: true + dependencies: + esprima: 2.7.3 + estraverse: 1.9.3 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.2.0 + dev: true + + /eslint-config-prettier@8.3.0(eslint@8.47.0): + resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.47.0 + dev: true + + /eslint-doc-generator@1.4.3(eslint@8.47.0)(typescript@5.0.4): + resolution: {integrity: sha512-cn9KXE7xuKlxKi/9VbirR3cbz7W1geRObwWzZjJAnpTeNBoqA8Rj+lD8/HHHJ7PnOdaTrRyhhoYdCtxqq3U7Bw==} + engines: {node: ^14.18.0 || ^16.0.0 || >=18.0.0} + hasBin: true + peerDependencies: + eslint: '>= 7' + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.47.0)(typescript@5.0.4) + ajv: 8.12.0 + boolean: 3.2.0 + commander: 10.0.1 + cosmiconfig: 8.2.0 + deepmerge: 4.3.1 + dot-prop: 7.2.0 + eslint: 8.47.0 + jest-diff: 29.7.0 + json-schema-traverse: 1.0.0 + markdown-table: 3.0.3 + no-case: 3.0.4 + type-fest: 3.13.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.0 + resolve: 1.22.4 + transitivePeerDependencies: + - supports-color + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.9)(eslint@8.47.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.61.0(eslint@8.47.0)(typescript@5.0.4) + debug: 3.2.7 + eslint: 8.47.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + + /eslint-plugin-es@3.0.1(eslint@8.47.0): + resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + eslint: 8.47.0 + eslint-utils: 2.1.0 + regexpp: 3.2.0 + dev: true + + /eslint-plugin-eslint-plugin@5.1.1(eslint@8.47.0): + resolution: {integrity: sha512-4MGDsG505Ot2TSDSYxFL0cpDo4Y+t6hKB8cfZw9Jx484VjXWDfiYC/A6cccWFtWoOOC0j+wGgQIIb11cdIAMBg==} + engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.47.0 + eslint-utils: 3.0.0(eslint@8.47.0) + estraverse: 5.3.0 + dev: true + + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.47.0): + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.61.0(eslint@8.47.0)(typescript@5.0.4) + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.47.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.9)(eslint@8.47.0) + has: 1.0.3 + is-core-module: 2.13.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.4 + semver: 6.3.1 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-no-only-tests@3.0.0: + resolution: {integrity: sha512-I0PeXMs1vu21ap45hey4HQCJRqpcoIvGcNTPJe+UhUm8TwjQ6//mCrDqF8q0WS6LgmRDwQ4ovQej0AQsAHb5yg==} + engines: {node: '>=5.0.0'} + dev: true + + /eslint-plugin-node@11.1.0(eslint@8.47.0): + resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=5.16.0' + dependencies: + eslint: 8.47.0 + eslint-plugin-es: 3.0.1(eslint@8.47.0) + eslint-utils: 2.1.0 + ignore: 5.2.4 + minimatch: 3.1.2 + resolve: 1.22.4 + semver: 6.3.1 + dev: true + + /eslint-plugin-prettier@3.4.0(eslint-config-prettier@8.3.0)(eslint@8.47.0)(prettier@2.4.1): + resolution: {integrity: sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==} + engines: {node: '>=6.0.0'} + peerDependencies: + eslint: '>=5.0.0' + eslint-config-prettier: '*' + prettier: '>=1.13.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + dependencies: + eslint: 8.47.0 + eslint-config-prettier: 8.3.0(eslint@8.47.0) + prettier: 2.4.1 + prettier-linter-helpers: 1.0.0 + dev: true + + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + /eslint-utils@2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + + /eslint-utils@3.0.0(eslint@8.47.0): + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.47.0 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + dev: true + + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + /eslint@8.47.0: + resolution: {integrity: sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.47.0) + '@eslint-community/regexpp': 4.6.2 + '@eslint/eslintrc': 2.1.2 + '@eslint/js': 8.47.0 + '@humanwhocodes/config-array': 0.11.10 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4(supports-color@8.1.1) + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.21.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.3 + + /esprima@2.7.3: + resolution: {integrity: sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==} + engines: {node: '>=0.10.0'} + hasBin: true + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + + /estraverse@1.9.3: + resolution: {integrity: sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==} + engines: {node: '>=0.10.0'} + dev: true + + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + /eth-ens-namehash@2.0.8: + resolution: {integrity: sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==} + dependencies: + idna-uts46-hx: 2.3.1 + js-sha3: 0.5.7 + + /eth-gas-reporter@0.2.27: + resolution: {integrity: sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==} + peerDependencies: + '@codechecks/client': ^0.1.0 + peerDependenciesMeta: + '@codechecks/client': + optional: true + dependencies: + '@solidity-parser/parser': 0.14.5 + axios: 1.6.0(debug@4.3.4) + cli-table3: 0.5.1 + colors: 1.4.0 + ethereum-cryptography: 1.2.0 + ethers: 5.7.2 + fs-readdir-recursive: 1.1.0 + lodash: 4.17.21 + markdown-table: 1.1.3 + mocha: 10.2.0 + req-cwd: 2.0.0 + sha1: 1.1.1 + sync-request: 6.1.0 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + dev: true + + /eth-lib@0.1.29: + resolution: {integrity: sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + nano-json-stream-parser: 0.1.2 + servify: 0.1.12 + ws: 3.3.3 + xhr-request-promise: 0.1.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /eth-lib@0.2.7: + resolution: {integrity: sha512-VqEBQKH92jNsaE8lG9CTq8M/bc12gdAfb5MY8Ro1hVyXkh7rOtY3m5tRHK3Hus5HqIAAwU2ivcUjTLVwsvf/kw==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + xhr-request-promise: 0.1.3 + dev: false + + /eth-lib@0.2.8: + resolution: {integrity: sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + xhr-request-promise: 0.1.3 + + /ethereum-bloom-filters@1.0.10: + resolution: {integrity: sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==} + dependencies: + js-sha3: 0.8.0 + + /ethereum-cryptography@0.1.3: + resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} + dependencies: + '@types/pbkdf2': 3.1.0 + '@types/secp256k1': 4.0.3 + blakejs: 1.2.1 + browserify-aes: 1.2.0 + bs58check: 2.1.2 + create-hash: 1.2.0 + create-hmac: 1.1.7 + hash.js: 1.1.7 + keccak: 3.0.3 + pbkdf2: 3.1.2 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + scrypt-js: 3.0.1 + secp256k1: 4.0.3 + setimmediate: 1.0.5 + + /ethereum-cryptography@1.2.0: + resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==} + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/bip32': 1.1.5 + '@scure/bip39': 1.1.1 + + /ethereum-cryptography@2.1.2: + resolution: {integrity: sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==} + dependencies: + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.1 + '@scure/bip32': 1.3.1 + '@scure/bip39': 1.2.1 + + /ethereum-ens@0.8.0: + resolution: {integrity: sha512-a8cBTF4AWw1Q1Y37V1LSCS9pRY4Mh3f8vCg5cbXCCEJ3eno1hbI/+Ccv9SZLISYpqQhaglP3Bxb/34lS4Qf7Bg==} + dependencies: + bluebird: 3.7.2 + eth-ens-namehash: 2.0.8 + js-sha3: 0.5.7 + pako: 1.0.11 + underscore: 1.9.1 + web3: 1.10.3 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /ethereumjs-abi@0.6.8: + resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} + dependencies: + bn.js: 4.12.0 + ethereumjs-util: 6.2.1 + dev: false + + /ethereumjs-common@1.5.2: + resolution: {integrity: sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==} + deprecated: 'New package name format for new versions: @ethereumjs/common. Please update.' + dev: false + + /ethereumjs-tx@2.1.2: + resolution: {integrity: sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==} + deprecated: 'New package name format for new versions: @ethereumjs/tx. Please update.' + dependencies: + ethereumjs-common: 1.5.2 + ethereumjs-util: 6.2.1 + dev: false + + /ethereumjs-util@6.2.1: + resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} + dependencies: + '@types/bn.js': 4.11.6 + bn.js: 4.12.0 + create-hash: 1.2.0 + elliptic: 6.5.4 + ethereum-cryptography: 0.1.3 + ethjs-util: 0.1.6 + rlp: 2.2.7 + dev: false + + /ethereumjs-util@7.1.4: + resolution: {integrity: sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==} + engines: {node: '>=10.0.0'} + dependencies: + '@types/bn.js': 5.1.1 + bn.js: 5.2.1 + create-hash: 1.2.0 + ethereum-cryptography: 0.1.3 + rlp: 2.2.7 + dev: false + + /ethereumjs-util@7.1.5: + resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} + engines: {node: '>=10.0.0'} + dependencies: + '@types/bn.js': 5.1.1 + bn.js: 5.2.1 + create-hash: 1.2.0 + ethereum-cryptography: 0.1.3 + rlp: 2.2.7 + + /ethers@4.0.49: + resolution: {integrity: sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==} + dependencies: + aes-js: 3.0.0 + bn.js: 4.12.0 + elliptic: 6.5.4 + hash.js: 1.1.3 + js-sha3: 0.5.7 + scrypt-js: 2.0.4 + setimmediate: 1.0.4 + uuid: 2.0.1 + xmlhttprequest: 1.8.0 + dev: false + + /ethers@5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + /ethers@6.7.0: + resolution: {integrity: sha512-pxt5hK82RNwcTX2gOZP81t6qVPVspnkpeivwEgQuK9XUvbNtghBnT8GNIb/gPh+WnVSfi8cXC9XlfT8sqc6D6w==} + engines: {node: '>=14.0.0'} + dependencies: + '@adraffy/ens-normalize': 1.9.2 + '@noble/hashes': 1.1.2 + '@noble/secp256k1': 1.7.1 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + /ethjs-abi@0.1.8: + resolution: {integrity: sha512-3SIJpF+LCVJrNht9OjSJ7+3B9ABZf6dEATMj1PaslL0BW547Cz6/kGyuDvvrcEBlSsbGpCWYrJX5B8OjhcAMFQ==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + bn.js: 4.11.6 + js-sha3: 0.5.5 + number-to-bn: 1.7.0 + dev: false + + /ethjs-unit@0.1.6: + resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + bn.js: 4.11.6 + number-to-bn: 1.7.0 + + /ethjs-util@0.1.6: + resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + is-hex-prefixed: 1.0.0 + strip-hex-prefix: 1.0.0 + dev: false + + /eventemitter3@4.0.4: + resolution: {integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==} + + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + + /evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + + /expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + dev: false + + /express@4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + /ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + dependencies: + type: 2.7.2 + + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + /extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + dev: true + + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: true + + /extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + + /fast-deep-equal@1.1.0: + resolution: {integrity: sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==} + dev: false + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + + /file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: false + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + + /find-replace@3.0.0: + resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} + engines: {node: '>=4.0.0'} + dependencies: + array-back: 3.1.0 + dev: true + + /find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + dependencies: + locate-path: 2.0.0 + dev: false + + /find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: true + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + /find-yarn-workspace-root2@1.2.16: + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + dependencies: + micromatch: 4.0.5 + pkg-dir: 4.2.0 + dev: true + + /flat-cache@3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + + /flat@4.1.1: + resolution: {integrity: sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==} + hasBin: true + dependencies: + is-buffer: 2.0.5 + dev: true + + /flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + /flatted@3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + + /follow-redirects@1.15.2(debug@4.3.4): + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: 4.3.4(supports-color@8.1.1) + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + + /foreground-child@2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 3.0.7 + dev: true + + /forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + /form-data-encoder@1.7.1: + resolution: {integrity: sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==} + + /form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + /form-data@2.5.1: + resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} + engines: {node: '>= 0.12'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + /fp-ts@1.19.3: + resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} + dev: false + + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + /fromentries@1.3.2: + resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + dev: true + + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: false + + /fs-extra@0.30.0: + resolution: {integrity: sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 2.4.0 + klaw: 1.3.1 + path-is-absolute: 1.0.1 + rimraf: 2.7.1 + dev: false + + /fs-extra@4.0.3: + resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + /fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + /fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + + /fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fs-minipass@1.2.7: + resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==} + dependencies: + minipass: 2.9.0 + + /fs-readdir-recursive@1.1.0: + resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents@2.1.3: + resolution: {integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + deprecated: '"Please update to latest v2.3 or v2.2"' + requiresBuild: true + dev: true + optional: true + + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + + /function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + + /function.prototype.name@1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + functions-have-names: 1.2.3 + dev: true + + /functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + dev: false + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /ganache-cli@6.12.2: + resolution: {integrity: sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw==} + deprecated: ganache-cli is now ganache; visit https://trfl.io/g7 for details + hasBin: true + dev: true + bundledDependencies: + - source-map-support + - yargs + - ethereumjs-util + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + /get-func-name@2.0.0: + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-proto: 1.0.1 + has-symbols: 1.0.3 + + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true + + /get-port@3.2.0: + resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} + engines: {node: '>=4'} + dev: true + + /get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + dev: true + + /get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + dependencies: + pump: 3.0.0 + dev: false + + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + dev: true + + /getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + dependencies: + assert-plus: 1.0.0 + + /ghost-testrpc@0.0.2: + resolution: {integrity: sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==} + hasBin: true + dependencies: + chalk: 2.4.2 + node-emoji: 1.11.0 + dev: true + + /github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + dev: false + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + + /glob@5.0.15: + resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} + dependencies: + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.1.3: + resolution: {integrity: sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.0.1 + once: 1.4.0 + dev: false + + /global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + dependencies: + global-prefix: 3.0.0 + dev: true + + /global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: true + + /global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + dependencies: + min-document: 2.19.0 + process: 0.11.10 + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals@13.21.0: + resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.0 + dev: true + + /globby@10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + dependencies: + '@types/glob': 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + glob: 7.2.0 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.1 + + /got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + + /got@12.1.0: + resolution: {integrity: sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==} + engines: {node: '>=14.16'} + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 5.0.1 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 6.1.0 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + form-data-encoder: 1.7.1 + get-stream: 6.0.1 + http2-wrapper: 2.2.0 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 2.0.1 + + /got@9.6.0: + resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} + engines: {node: '>=8.6'} + dependencies: + '@sindresorhus/is': 0.14.0 + '@szmarczak/http-timer': 1.1.2 + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.3 + cacheable-request: 6.1.0 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 4.1.0 + lowercase-keys: 1.0.1 + mimic-response: 1.0.1 + p-cancelable: 1.1.0 + to-readable-stream: 1.0.0 + url-parse-lax: 3.0.0 + dev: false + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /grapheme-splitter@1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + /growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + dev: true + + /handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.17.4 + dev: true + + /har-schema@2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + + /har-validator@5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 + + /hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + dev: true + + /hardhat-gas-reporter@1.0.8(hardhat@packages+hardhat-core): + resolution: {integrity: sha512-1G5thPnnhcwLHsFnl759f2tgElvuwdkzxlI65fC9PwxYMEe9cmjkVAAWTf3/3y8uP6ZSPiUiOW8PgZnykmZe0g==} + peerDependencies: + hardhat: ^2.0.2 + dependencies: + array-uniq: 1.0.3 + eth-gas-reporter: 0.2.27 + hardhat: link:packages/hardhat-core + sha1: 1.1.1 + transitivePeerDependencies: + - '@codechecks/client' + - bufferutil + - debug + - utf-8-validate + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-color@0.1.7: + resolution: {integrity: sha512-kaNz5OTAYYmt646Hkqw50/qyxP2vFnTVu5AQ1Zmk22Kk5+4Qx6BpO8+u7IKsML5fOsFk0ZT0AcCJNYwcvaLBvw==} + engines: {node: '>=0.10.0'} + dev: true + + /has-flag@1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /has-property-descriptors@1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.2.1 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + + /has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + + /hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + + /hash.js@1.1.3: + resolution: {integrity: sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: false + + /hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + /hasha@5.2.2: + resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} + engines: {node: '>=8'} + dependencies: + is-stream: 2.0.1 + type-fest: 0.8.1 + dev: true + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + /heap@0.2.7: + resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + dev: true + + /highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + dev: false + + /highlight.js@9.18.5: + resolution: {integrity: sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==} + deprecated: Support has ended for 9.x series. Upgrade to @latest + requiresBuild: true + dev: false + + /highlightjs-solidity@1.2.2: + resolution: {integrity: sha512-+cZ+1+nAO5Pi6c70TKuMcPmwqLECxiYhnQc1MxdXckK94zyWFMNZADzu98ECNlf5xCRdNh+XKp+eklmRU+Dniw==} + dev: false + + /hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + + /htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + dev: false + + /http-basic@8.1.3: + resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} + engines: {node: '>=6.0.0'} + dependencies: + caseless: 0.12.0 + concat-stream: 1.6.2 + http-response-object: 3.0.2 + parse-cache-control: 1.0.1 + dev: true + + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + /http-https@1.0.0: + resolution: {integrity: sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==} + + /http-response-object@3.0.2: + resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==} + dependencies: + '@types/node': 10.17.60 + dev: true + + /http-signature@1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.2 + sshpk: 1.18.0 + + /http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + /http2-wrapper@2.2.0: + resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + dev: false + + /human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + dev: true + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + + /idna-uts46-hx@2.3.1: + resolution: {integrity: sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==} + engines: {node: '>=4.0.0'} + dependencies: + punycode: 2.1.0 + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + /ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + + /immutable@4.3.2: + resolution: {integrity: sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==} + dev: false + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + /internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + + /interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: true + + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /io-ts@1.10.4: + resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} + dependencies: + fp-ts: 1.19.3 + dev: false + + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: true + + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + /is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + dependencies: + ci-info: 3.8.0 + dev: true + + /is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + dependencies: + has: 1.0.3 + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + /is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-hex-prefixed@1.0.0: + resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} + engines: {node: '>=6.5.0', npm: '>=3'} + + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: false + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + /is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + dependencies: + better-path-resolve: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.11 + + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: true + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /iso-url@0.4.7: + resolution: {integrity: sha512-27fFRDnPAMnHGLq36bWTpKET+eiXct3ENlCcdcMdk+mjXrb2kw3mhBUg1B7ewAC0kVzlOPhADzQgz1SE6Tglog==} + engines: {node: '>=10'} + dev: false + + /isomorphic-ws@5.0.0(ws@8.13.0): + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.13.0 + dev: true + + /isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + + /istanbul-lib-coverage@3.2.1: + resolution: {integrity: sha512-opCrKqbthmq3SKZ10mFMQG9dk3fTa3quaOLD35kJa5ejwZHd9xAr+kLuziiZz2cG32s4lMZxNdmdcEQnTDP4+g==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-hook@3.0.0: + resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} + engines: {node: '>=8'} + dependencies: + append-transform: 2.0.0 + dev: true + + /istanbul-lib-instrument@4.0.3: + resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.23.2 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-processinfo@2.0.3: + resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==} + engines: {node: '>=8'} + dependencies: + archy: 1.0.0 + cross-spawn: 7.0.3 + istanbul-lib-coverage: 3.2.1 + p-map: 3.0.0 + rimraf: 3.0.2 + uuid: 8.3.2 + dev: true + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.1 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.1 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /js-sdsl@4.4.2: + resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} + dev: false + + /js-sha3@0.5.5: + resolution: {integrity: sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA==} + dev: false + + /js-sha3@0.5.7: + resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==} + + /js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-yaml@3.13.1: + resolution: {integrity: sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + + /jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json-buffer@3.0.0: + resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} + dev: false + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + /json-schema-traverse@0.3.1: + resolution: {integrity: sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==} + dev: false + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + /json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + /json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + /json-text-sequence@0.1.1: + resolution: {integrity: sha512-L3mEegEWHRekSHjc7+sc8eJhba9Clq1PZ8kMkzf8OxElhXc8O4TS5MwcVlj9aEbm5dr81N90WHC5nAz3UO971w==} + dependencies: + delimit-stream: 0.1.0 + dev: false + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonfile@2.4.0: + resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: false + + /jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.11 + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /jsonschema@1.4.1: + resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} + dev: true + + /jsprim@1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + + /just-extend@4.2.1: + resolution: {integrity: sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==} + dev: true + + /keccak@3.0.3: + resolution: {integrity: sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.6.0 + readable-stream: 3.6.2 + + /keyv@3.1.0: + resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} + dependencies: + json-buffer: 3.0.0 + dev: false + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /klaw@1.3.1: + resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: false + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: true + + /level-supports@4.0.1: + resolution: {integrity: sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==} + engines: {node: '>=12'} + dev: false + + /level-transcoder@1.0.1: + resolution: {integrity: sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==} + engines: {node: '>=12'} + dependencies: + buffer: 6.0.3 + module-error: 1.0.2 + dev: false + + /level@8.0.0: + resolution: {integrity: sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==} + engines: {node: '>=12'} + dependencies: + browser-level: 1.0.1 + classic-level: 1.3.0 + dev: false + + /levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + /load-yaml-file@0.2.0: + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: true + + /locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + dev: false + + /locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + + /lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + dev: true + + /lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + dev: false + + /lodash.escaperegexp@4.1.2: + resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} + dev: false + + /lodash.flattendeep@4.4.0: + resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} + dev: true + + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: true + + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: false + + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: false + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + /lodash.partition@4.6.0: + resolution: {integrity: sha512-35L3dSF3Q6V1w5j6V3NhNlQjzsRDC/pYKCTdYTmwqSib+Q8ponkAmt/PwEOq3EmI38DSCl+SkIVwLd+uSlVdrg==} + dev: false + + /lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + dev: true + + /lodash.sum@4.0.2: + resolution: {integrity: sha512-1GcLFsMpU0K7uGPjo5FePq0fNlL3sSTZtSWwQUxr9VL8T3xeJiprwbfjDptTUPtkB8cUBpAnMtvQpju5XXaBeA==} + dev: false + + /lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + dev: false + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + /log-symbols@3.0.0: + resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} + engines: {node: '>=8'} + dependencies: + chalk: 2.4.2 + dev: true + + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /loupe@2.3.6: + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + dependencies: + get-func-name: 2.0.0 + + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.6.1 + dev: true + + /lowercase-keys@1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} + dev: false + + /lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + /lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + /lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /lru_map@0.3.3: + resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} + dev: false + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: true + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: true + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + dev: true + + /markdown-table@1.1.3: + resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} + dev: true + + /markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + dev: true + + /mcl-wasm@0.7.9: + resolution: {integrity: sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==} + engines: {node: '>=8.9.0'} + dev: false + + /md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + /memory-level@1.0.0: + resolution: {integrity: sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==} + engines: {node: '>=12'} + dependencies: + abstract-level: 1.0.3 + functional-red-black-tree: 1.0.1 + module-error: 1.0.2 + dev: false + + /memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + dev: false + + /meow@6.1.1: + resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} + engines: {node: '>=8'} + dependencies: + '@types/minimist': 1.2.2 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 2.5.0 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.13.1 + yargs-parser: 18.1.3 + dev: true + + /merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + /micro-ftch@0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + /miller-rabin@4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + dev: false + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: false + + /mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + /mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + /min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + dependencies: + dom-walk: 0.1.2 + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + /minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + /minimatch@3.0.4: + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch@5.0.1: + resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + + /minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + dev: true + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + /minipass@2.9.0: + resolution: {integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==} + dependencies: + safe-buffer: 5.2.1 + yallist: 3.1.1 + + /minizlib@1.3.3: + resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==} + dependencies: + minipass: 2.9.0 + + /mixme@0.5.9: + resolution: {integrity: sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==} + engines: {node: '>= 8.0.0'} + dev: true + + /mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: false + + /mkdirp-promise@5.0.1: + resolution: {integrity: sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==} + engines: {node: '>=4'} + deprecated: This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that. + dependencies: + mkdirp: 1.0.4 + + /mkdirp@0.5.5: + resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + /mnemonist@0.38.5: + resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} + dependencies: + obliterator: 2.0.4 + dev: false + + /mocha@10.2.0: + resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} + engines: {node: '>= 14.0.0'} + hasBin: true + dependencies: + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.4(supports-color@8.1.1) + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.0.1 + ms: 2.1.3 + nanoid: 3.3.3 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.2.1 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + + /mocha@7.1.2: + resolution: {integrity: sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==} + engines: {node: '>= 8.10.0'} + hasBin: true + dependencies: + ansi-colors: 3.2.3 + browser-stdout: 1.3.1 + chokidar: 3.3.0 + debug: 3.2.6(supports-color@6.0.0) + diff: 3.5.0 + escape-string-regexp: 1.0.5 + find-up: 3.0.0 + glob: 7.1.3 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 3.13.1 + log-symbols: 3.0.0 + minimatch: 3.0.4 + mkdirp: 0.5.5 + ms: 2.1.1 + node-environment-flags: 1.0.6 + object.assign: 4.1.0 + strip-json-comments: 2.0.1 + supports-color: 6.0.0 + which: 1.3.1 + wide-align: 1.1.3 + yargs: 13.3.2 + yargs-parser: 13.1.2 + yargs-unparser: 1.6.0 + dev: true + + /mock-fs@4.14.0: + resolution: {integrity: sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==} + + /module-error@1.0.2: + resolution: {integrity: sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==} + engines: {node: '>=10'} + dev: false + + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + /ms@2.1.1: + resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + /multibase@0.6.1: + resolution: {integrity: sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==} + deprecated: This module has been superseded by the multiformats module + dependencies: + base-x: 3.0.9 + buffer: 5.7.1 + + /multibase@0.7.0: + resolution: {integrity: sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==} + deprecated: This module has been superseded by the multiformats module + dependencies: + base-x: 3.0.9 + buffer: 5.7.1 + + /multicodec@0.5.7: + resolution: {integrity: sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==} + deprecated: This module has been superseded by the multiformats module + dependencies: + varint: 5.0.2 + + /multicodec@1.0.4: + resolution: {integrity: sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==} + deprecated: This module has been superseded by the multiformats module + dependencies: + buffer: 5.7.1 + varint: 5.0.2 + + /multihashes@0.4.21: + resolution: {integrity: sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==} + dependencies: + buffer: 5.7.1 + multibase: 0.7.0 + varint: 5.0.2 + + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: false + + /nano-json-stream-parser@0.1.2: + resolution: {integrity: sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==} + + /nanoid@3.3.3: + resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /napi-build-utils@1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + dev: false + + /napi-macros@2.2.2: + resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==} + dev: false + + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + + /nise@4.1.0: + resolution: {integrity: sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==} + dependencies: + '@sinonjs/commons': 1.8.6 + '@sinonjs/fake-timers': 6.0.1 + '@sinonjs/text-encoding': 0.7.2 + just-extend: 4.2.1 + path-to-regexp: 1.8.0 + dev: true + + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.6.1 + dev: true + + /node-abi@3.51.0: + resolution: {integrity: sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: false + + /node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + + /node-addon-api@3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + dev: false + + /node-addon-api@4.3.0: + resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} + dev: false + + /node-emoji@1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + dependencies: + lodash: 4.17.21 + dev: true + + /node-environment-flags@1.0.6: + resolution: {integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==} + dependencies: + object.getownpropertydescriptors: 2.1.7 + semver: 5.7.2 + dev: true + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + + /node-gyp-build@4.6.0: + resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} + hasBin: true + + /node-hid@2.1.2: + resolution: {integrity: sha512-qhCyQqrPpP93F/6Wc/xUR7L8mAJW0Z6R7HMQV8jCHHksAxNDe/4z4Un/H9CpLOT+5K39OPyt9tIQlavxWES3lg==} + engines: {node: '>=10'} + hasBin: true + requiresBuild: true + dependencies: + bindings: 1.5.0 + node-addon-api: 3.2.1 + prebuild-install: 7.1.1 + dev: false + + /node-preload@0.2.1: + resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} + engines: {node: '>=8'} + dependencies: + process-on-spawn: 1.0.0 + dev: true + + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + + /nofilter@3.1.0: + resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} + engines: {node: '>=12.19'} + dev: false + + /nopt@3.0.6: + resolution: {integrity: sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==} + hasBin: true + dependencies: + abbrev: 1.0.9 + dev: true + + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.17.0 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + /normalize-url@4.5.1: + resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} + engines: {node: '>=8'} + dev: false + + /normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: false + + /number-to-bn@1.7.0: + resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + bn.js: 4.11.6 + strip-hex-prefix: 1.0.0 + + /nyc@15.1.0: + resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} + engines: {node: '>=8.9'} + hasBin: true + dependencies: + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + caching-transform: 4.0.0 + convert-source-map: 1.9.0 + decamelize: 1.2.0 + find-cache-dir: 3.3.2 + find-up: 4.1.0 + foreground-child: 2.0.0 + get-package-type: 0.1.0 + glob: 7.2.0 + istanbul-lib-coverage: 3.2.1 + istanbul-lib-hook: 3.0.0 + istanbul-lib-instrument: 4.0.3 + istanbul-lib-processinfo: 2.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + make-dir: 3.1.0 + node-preload: 0.2.1 + p-map: 3.0.0 + process-on-spawn: 1.0.0 + resolve-from: 5.0.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + spawn-wrap: 2.0.0 + test-exclude: 6.0.0 + yargs: 15.4.1 + transitivePeerDependencies: + - supports-color + dev: true + + /oauth-sign@0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.0: + resolution: {integrity: sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.0 + function-bind: 1.1.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.getownpropertydescriptors@2.1.7: + resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} + engines: {node: '>= 0.8'} + dependencies: + array.prototype.reduce: 1.0.6 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + safe-array-concat: 1.0.0 + dev: true + + /object.values@1.1.6: + resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /obliterator@2.0.4: + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + dev: false + + /oboe@2.1.5: + resolution: {integrity: sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==} + dependencies: + http-https: 1.0.0 + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: false + + /optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.1 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + dev: false + + /ordinal@1.0.3: + resolution: {integrity: sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==} + dev: false + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + /outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + dev: true + + /p-cancelable@1.1.0: + resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} + engines: {node: '>=6'} + dev: false + + /p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + /p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + + /p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + dependencies: + p-map: 2.1.0 + dev: true + + /p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + dependencies: + p-try: 1.0.0 + dev: false + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + + /p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + dependencies: + p-limit: 1.3.0 + dev: false + + /p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + + /p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + dev: true + + /p-map@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + dependencies: + aggregate-error: 3.1.0 + dev: true + + /p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + dev: false + + /p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + dev: false + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /package-hash@4.0.0: + resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} + engines: {node: '>=8'} + dependencies: + graceful-fs: 4.2.11 + hasha: 5.2.2 + lodash.flattendeep: 4.4.0 + release-zalgo: 1.0.0 + dev: true + + /pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + dev: false + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + + /parse-asn1@5.1.6: + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + dependencies: + asn1.js: 5.4.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.2 + safe-buffer: 5.2.1 + dev: false + + /parse-cache-control@1.0.1: + resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} + dev: true + + /parse-headers@2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.22.10 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + /parse-ms@0.1.2: + resolution: {integrity: sha512-VwMglE9412ifMHcRFEVJePEpreQh90wjIiOdP0UQQGKV4l+QprdKI+p5noXTkmGjznBMb40s+VymcclATAVvYA==} + engines: {node: '>=0.10.0'} + dev: true + + /parse5-htmlparser2-tree-adapter@7.0.0: + resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + dependencies: + domhandler: 5.0.3 + parse5: 7.1.2 + dev: false + + /parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.5.0 + dev: false + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + /path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + /path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + + /path-to-regexp@1.8.0: + resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==} + dependencies: + isarray: 0.0.1 + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + /pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + /performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: false + + /prebuild-install@7.1.1: + resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + detect-libc: 2.0.2 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.51.0 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: false + + /preferred-pm@3.0.3: + resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + find-yarn-workspace-root2: 1.2.16 + path-exists: 4.0.0 + which-pm: 2.0.0 + dev: true + + /prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + /prepend-http@2.0.0: + resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} + engines: {node: '>=4'} + dev: false + + /prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.3.0 + dev: true + + /prettier@2.4.1: + resolution: {integrity: sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + + /pretty-ms@0.2.2: + resolution: {integrity: sha512-ah/vWDJAT0arxQwVcSGp6etaLTZr4IsrXTy/khfjimzdYgSxYWzTMByrtpJUWinAnVY8szDg+qQhsE5MUMz3lQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + parse-ms: 0.1.2 + dev: true + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /process-on-spawn@1.0.0: + resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} + engines: {node: '>=8'} + dependencies: + fromentries: 1.3.2 + dev: true + + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + /promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + dependencies: + asap: 2.0.6 + dev: true + + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + /pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + dev: true + + /psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + + /public-encrypt@4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + dependencies: + bn.js: 4.12.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + parse-asn1: 5.1.6 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: false + + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + /punycode@2.1.0: + resolution: {integrity: sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==} + engines: {node: '>=6'} + + /punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + + /qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + + /qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: true + + /qs@6.5.3: + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} + + /query-string@5.1.1: + resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} + engines: {node: '>=0.10.0'} + dependencies: + decode-uri-component: 0.2.2 + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + dev: true + + /quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + + /randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: false + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + /raw-body@2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + /rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + dev: false + + /react-dom@17.0.2(react@17.0.2): + resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} + peerDependencies: + react: 17.0.2 + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react: 17.0.2 + scheduler: 0.20.2 + dev: false + + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + + /react@17.0.2: + resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: false + + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + dev: true + + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.1 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + dev: true + + /read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + dependencies: + graceful-fs: 4.2.11 + js-yaml: 3.14.1 + pify: 4.0.1 + strip-bom: 3.0.0 + dev: true + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + /readdirp@3.2.0: + resolution: {integrity: sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==} + engines: {node: '>= 8'} + dependencies: + picomatch: 2.3.1 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + + /rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.4 + dev: true + + /recursive-readdir@2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} + dependencies: + minimatch: 3.1.2 + dev: true + + /redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: true + + /reduce-flatten@2.0.0: + resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} + engines: {node: '>=6'} + dev: true + + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + dev: true + + /regexp.prototype.flags@1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 + dev: true + + /regexpp@3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true + + /release-zalgo@1.0.0: + resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} + engines: {node: '>=4'} + dependencies: + es6-error: 4.1.1 + dev: true + + /req-cwd@2.0.0: + resolution: {integrity: sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==} + engines: {node: '>=4'} + dependencies: + req-from: 2.0.0 + dev: true + + /req-from@2.0.0: + resolution: {integrity: sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==} + engines: {node: '>=4'} + dependencies: + resolve-from: 3.0.0 + dev: true + + /request@2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + dependencies: + aws-sign2: 0.7.0 + aws4: 1.12.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.3 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + + /require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: true + + /requireindex@1.2.0: + resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} + engines: {node: '>=0.10.5'} + dev: false + + /resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + /resolve-from@3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve@1.1.7: + resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} + dev: true + + /resolve@1.17.0: + resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} + dependencies: + path-parse: 1.0.7 + + /resolve@1.22.4: + resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + /responselike@1.0.2: + resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} + dependencies: + lowercase-keys: 1.0.1 + dev: false + + /responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + dependencies: + lowercase-keys: 2.0.0 + + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: false + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.0 + dev: false + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.0 + + /ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + + /rlp@2.2.7: + resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} + hasBin: true + dependencies: + bn.js: 5.2.1 + + /run-parallel-limit@1.1.0: + resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} + dependencies: + queue-microtask: 1.2.3 + dev: false + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /rustbn.js@0.2.0: + resolution: {integrity: sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==} + dev: false + + /rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + dev: false + + /safe-array-concat@1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-regex: 1.1.4 + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + /sc-istanbul@0.4.6: + resolution: {integrity: sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==} + hasBin: true + dependencies: + abbrev: 1.0.9 + async: 1.5.2 + escodegen: 1.8.1 + esprima: 2.7.3 + glob: 5.0.15 + handlebars: 4.7.8 + js-yaml: 3.14.1 + mkdirp: 0.5.6 + nopt: 3.0.6 + once: 1.4.0 + resolve: 1.1.7 + supports-color: 3.2.3 + which: 1.3.1 + wordwrap: 1.0.0 + dev: true + + /scheduler@0.20.2: + resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: false + + /scrypt-js@2.0.4: + resolution: {integrity: sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==} + dev: false + + /scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + + /secp256k1@4.0.3: + resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + elliptic: 6.5.4 + node-addon-api: 2.0.2 + node-gyp-build: 4.6.0 + + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + /serialize-javascript@6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + dependencies: + randombytes: 2.1.0 + + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + + /servify@0.1.12: + resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==} + engines: {node: '>=6'} + dependencies: + body-parser: 1.20.2 + cors: 2.8.5 + express: 4.18.2 + request: 2.88.2 + xhr: 2.6.0 + transitivePeerDependencies: + - supports-color + + /set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: true + + /setimmediate@1.0.4: + resolution: {integrity: sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==} + dev: false + + /setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + /sha1@1.1.1: + resolution: {integrity: sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==} + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + dev: true + + /sha3@2.1.4: + resolution: {integrity: sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==} + dependencies: + buffer: 6.0.3 + dev: true + + /shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: 1.0.0 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + /shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + dev: true + + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + /simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + /simple-get@2.8.2: + resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==} + dependencies: + decompress-response: 3.3.0 + once: 1.4.0 + simple-concat: 1.0.1 + + /simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + dev: false + + /sinon-chai@3.7.0(chai@4.3.7)(sinon@9.2.4): + resolution: {integrity: sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==} + peerDependencies: + chai: ^4.0.0 + sinon: '>=4.0.0' + dependencies: + chai: 4.3.7 + sinon: 9.2.4 + dev: true + + /sinon@9.2.4: + resolution: {integrity: sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==} + deprecated: 16.1.1 + dependencies: + '@sinonjs/commons': 1.8.6 + '@sinonjs/fake-timers': 6.0.1 + '@sinonjs/samsam': 5.3.1 + diff: 4.0.2 + nise: 4.1.0 + supports-color: 7.2.0 + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: false + + /smartwrap@2.0.2: + resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + array.prototype.flat: 1.3.1 + breakword: 1.0.6 + grapheme-splitter: 1.0.4 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 15.4.1 + dev: true + + /solc@0.7.3(debug@4.3.4): + resolution: {integrity: sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + command-exists: 1.2.9 + commander: 3.0.2 + follow-redirects: 1.15.2(debug@4.3.4) + fs-extra: 0.30.0 + js-sha3: 0.8.0 + memorystream: 0.3.1 + require-from-string: 2.0.2 + semver: 5.7.2 + tmp: 0.0.33 + transitivePeerDependencies: + - debug + dev: false + + /solhint@3.4.0: + resolution: {integrity: sha512-FYEs/LoTxMsWFP/OGsEqR1CBDn3Bn7hrTWsgtjai17MzxITgearIdlo374KKZjjIycu8E2xBcJ+RSWeoBvQmkw==} + hasBin: true + dependencies: + '@solidity-parser/parser': 0.15.0 + ajv: 6.12.6 + antlr4: 4.13.1 + ast-parents: 0.0.1 + chalk: 4.1.2 + commander: 10.0.1 + cosmiconfig: 8.2.0 + fast-diff: 1.3.0 + glob: 8.1.0 + ignore: 5.2.4 + js-yaml: 4.1.0 + lodash: 4.17.21 + pluralize: 8.0.0 + semver: 6.3.1 + strip-ansi: 6.0.1 + table: 6.8.1 + text-table: 0.2.0 + optionalDependencies: + prettier: 2.8.8 + dev: false + + /solidity-coverage@0.8.1(hardhat@packages+hardhat-core): + resolution: {integrity: sha512-IsXuCmgofoph8gA5x93NWYoqHD1pNJBW/OfSXQsIqHL7g3n7/zKW7k9u4t9wJspJuXu+QcW3+oc/ryw7khoLzw==} + hasBin: true + peerDependencies: + hardhat: ^2.11.0 + dependencies: + '@ethersproject/abi': 5.7.0 + '@solidity-parser/parser': 0.14.5 + chalk: 2.4.2 + death: 1.1.0 + detect-port: 1.5.1 + difflib: 0.2.4 + fs-extra: 8.1.0 + ghost-testrpc: 0.0.2 + global-modules: 2.0.0 + globby: 10.0.2 + hardhat: link:packages/hardhat-core + jsonschema: 1.4.1 + lodash: 4.17.21 + mocha: 7.1.2 + node-emoji: 1.11.0 + pify: 4.0.1 + recursive-readdir: 2.2.3 + sc-istanbul: 0.4.6 + semver: 7.5.4 + shelljs: 0.8.5 + web3-utils: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /solpp@0.11.5: + resolution: {integrity: sha512-LjzCGMrTDXtera2C4mbQGZSpBznP+o3/82L2CneAAMNbm+t4xPsvfrgJkIaY+IZ5YLrB8IXn7cYthwHMKvAWnQ==} + engines: {node: '>=8.15.1'} + hasBin: true + dependencies: + antlr4: 4.8.0 + axios: 0.21.4 + bn-str-256: 1.9.1 + commander: 2.20.3 + ethereumjs-util: 6.2.1 + lodash: 4.17.21 + mz: 2.7.0 + resolve: 1.17.0 + semver: 5.7.2 + transitivePeerDependencies: + - debug + dev: false + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: false + + /source-map@0.2.0: + resolution: {integrity: sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==} + engines: {node: '>=0.8.0'} + requiresBuild: true + dependencies: + amdefine: 1.0.1 + dev: true + optional: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + /spawn-wrap@2.0.0: + resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} + engines: {node: '>=8'} + dependencies: + foreground-child: 2.0.0 + is-windows: 1.0.2 + make-dir: 3.1.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + which: 2.0.2 + dev: true + + /spawndamnit@2.0.0: + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + dependencies: + cross-spawn: 5.1.0 + signal-exit: 3.0.7 + dev: true + + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.13 + dev: true + + /spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.13 + dev: true + + /spdx-license-ids@3.0.13: + resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + + /stacktrace-parser@0.1.10: + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} + dependencies: + type-fest: 0.7.1 + dev: false + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + /stream-transform@2.1.3: + resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + dependencies: + mixme: 0.5.9 + dev: true + + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: false + + /strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + + /string-format@2.0.0: + resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} + dev: true + + /string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + dev: true + + /string-width@3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string.prototype.trim@1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /string.prototype.trimend@1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /string.prototype.trimstart@1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + + /strip-ansi@0.1.1: + resolution: {integrity: sha512-behete+3uqxecWlDAm5lmskaSaISA+ThQ4oNNBDTBJt0x2ppR6IPqfZNuj6BLaLJ/Sji4TPZlcRyOis8wXQTLg==} + engines: {node: '>=0.8.0'} + hasBin: true + dev: true + + /strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + dependencies: + ansi-regex: 3.0.1 + + /strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + dependencies: + ansi-regex: 4.1.1 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true + + /strip-hex-prefix@1.0.0: + resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + is-hex-prefixed: 1.0.0 + + /strip-indent@2.0.0: + resolution: {integrity: sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==} + engines: {node: '>=4'} + dev: false + + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + /super-split@1.1.0: + resolution: {integrity: sha512-I4bA5mgcb6Fw5UJ+EkpzqXfiuvVGS/7MuND+oBxNFmxu3ugLNrdIatzBLfhFRMVMLxgSsRy+TjIktgkF9RFSNQ==} + dev: false + + /supports-color@3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + dependencies: + has-flag: 1.0.0 + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + + /supports-color@6.0.0: + resolution: {integrity: sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==} + engines: {node: '>=6'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + /swarm-js@0.1.42: + resolution: {integrity: sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==} + dependencies: + bluebird: 3.7.2 + buffer: 5.7.1 + eth-lib: 0.1.29 + fs-extra: 4.0.3 + got: 11.8.6 + mime-types: 2.1.35 + mkdirp-promise: 5.0.1 + mock-fs: 4.14.0 + setimmediate: 1.0.5 + tar: 4.4.19 + xhr-request: 1.1.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /sync-request@6.1.0: + resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} + engines: {node: '>=8.0.0'} + dependencies: + http-response-object: 3.0.2 + sync-rpc: 1.3.6 + then-request: 6.0.2 + dev: true + + /sync-rpc@1.3.6: + resolution: {integrity: sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==} + dependencies: + get-port: 3.2.0 + dev: true + + /table-layout@1.0.2: + resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==} + engines: {node: '>=8.0.0'} + dependencies: + array-back: 4.0.2 + deep-extend: 0.6.0 + typical: 5.2.0 + wordwrapjs: 4.0.1 + dev: true + + /table@6.8.1: + resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + engines: {node: '>=10.0.0'} + dependencies: + ajv: 8.12.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + + /tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: false + + /tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /tar@4.4.19: + resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==} + engines: {node: '>=4.5'} + dependencies: + chownr: 1.1.4 + fs-minipass: 1.2.7 + minipass: 2.9.0 + minizlib: 1.3.3 + mkdirp: 0.5.6 + safe-buffer: 5.2.1 + yallist: 3.1.1 + + /term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + dev: true + + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.0 + minimatch: 3.1.2 + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + /then-request@6.0.2: + resolution: {integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==} + engines: {node: '>=6.0.0'} + dependencies: + '@types/concat-stream': 1.6.1 + '@types/form-data': 0.0.33 + '@types/node': 8.10.66 + '@types/qs': 6.9.10 + caseless: 0.12.0 + concat-stream: 1.6.2 + form-data: 2.5.1 + http-basic: 8.1.3 + http-response-object: 3.0.2 + promise: 8.3.0 + qs: 6.11.2 + dev: true + + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: false + + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: false + + /time-require@0.1.2: + resolution: {integrity: sha512-IqcSpa1sVNleRbC9eHnN7p7vwEHNmsjsXUDqjlnvo4+2VLJ7/gIY2XACTBuRhMB4weYbDYKsR3av2ySykRhDIA==} + engines: {node: '>= 0.10.0'} + dependencies: + chalk: 0.4.0 + date-time: 0.1.1 + pretty-ms: 0.2.2 + text-table: 0.2.0 + dev: true + + /timed-out@4.0.1: + resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} + engines: {node: '>=0.10.0'} + + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-readable-stream@1.0.0: + resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} + engines: {node: '>=6'} + dev: false + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + /tough-cookie@2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + dependencies: + psl: 1.9.0 + punycode: 2.3.0 + + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + /trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + dev: true + + /truffle-blockchain-utils@0.0.5: + resolution: {integrity: sha512-eCCV8FbYOuKagRY5NiqJCZrrh9GjWX2573ahqZPvUrzxYGIvCpSsHpGCub2e00YefpMfBqwscbsDTK7WNVfwoA==} + deprecated: 'WARNING: This package has been renamed to @truffle/blockchain-utils.' + dev: false + + /truffle-contract-schema@2.0.3: + resolution: {integrity: sha512-eI5cFifbB3zpcO4RsXSnjN9JMSlJ4M50GQPdrfbrIXRTXHsyQ433SkgFjIATUwfq++TXWkCRfKMjN8eA7YQ3+Q==} + deprecated: 'WARNING: This package has been renamed to @truffle/contract-schema.' + dependencies: + ajv: 5.5.2 + crypto-js: 3.3.0 + debug: 3.2.7 + transitivePeerDependencies: + - supports-color + dev: false + + /truffle-contract@3.0.7: + resolution: {integrity: sha512-av4MTJDP29PI3oVh8TrvRzRHt+nZJH8ODSiil/TfcXrKMSes52DTA5LHj00siLvcadkxUgoEZfEZ04qqhNGoiA==} + deprecated: 'WARNING: This package has been renamed to @truffle/contract.' + dependencies: + ethjs-abi: 0.1.8 + truffle-blockchain-utils: 0.0.5 + truffle-contract-schema: 2.0.3 + truffle-error: 0.0.3 + web3: 0.20.6 + transitivePeerDependencies: + - supports-color + dev: false + + /truffle-error@0.0.3: + resolution: {integrity: sha512-9gxs1z6BUn7MqrE4NPm/jcYe8rLok3Z57aweGIh1+CoRJSttzYqwcXCqaPRSNrTFnsTeZMBukkYr/PUcADoihw==} + deprecated: 'WARNING: This package has been renamed to @truffle/error.' + dev: false + + /ts-command-line-args@2.5.1: + resolution: {integrity: sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==} + hasBin: true + dependencies: + chalk: 4.1.2 + command-line-args: 5.2.1 + command-line-usage: 6.1.3 + string-format: 2.0.0 + dev: true + + /ts-essentials@7.0.3(typescript@5.0.4): + resolution: {integrity: sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==} + peerDependencies: + typescript: '>=3.7.0' + dependencies: + typescript: 5.0.4 + dev: true + + /ts-node@10.9.1(@types/node@16.18.40)(typescript@5.0.4): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 16.18.40 + acorn: 8.10.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.0.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + /tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + + /tslib@2.6.1: + resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} + dev: true + + /tsort@0.0.1: + resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} + dev: false + + /tsutils@3.21.0(typescript@5.0.4): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 5.0.4 + + /tty-table@4.2.1: + resolution: {integrity: sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + chalk: 4.1.2 + csv: 5.5.3 + kleur: 4.1.5 + smartwrap: 2.0.2 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + yargs: 17.7.2 + dev: true + + /tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + dependencies: + safe-buffer: 5.2.1 + + /tweetnacl-util@0.15.1: + resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} + dev: false + + /tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + /tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + dev: false + + /type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + /type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: false + + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true + + /type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + dev: false + + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true + + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: true + + /type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + dev: true + + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + /type@1.2.0: + resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} + + /type@2.7.2: + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + + /typechain@8.3.1(typescript@5.0.4): + resolution: {integrity: sha512-fA7clol2IP/56yq6vkMTR+4URF1nGjV82Wx6Rf09EsqD4tkzMAvEaqYxVFCavJm/1xaRga/oD55K+4FtuXwQOQ==} + hasBin: true + peerDependencies: + typescript: '>=4.3.0' + dependencies: + '@types/prettier': 2.7.3 + debug: 4.3.4(supports-color@8.1.1) + fs-extra: 7.0.1 + glob: 7.1.7 + js-sha3: 0.8.0 + lodash: 4.17.21 + mkdirp: 1.0.4 + prettier: 2.4.1 + ts-command-line-args: 2.5.1 + ts-essentials: 7.0.3(typescript@5.0.4) + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.12 + dev: true + + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + + /typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: true + + /typescript@5.0.4: + resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} + engines: {node: '>=12.20'} + hasBin: true + + /typical@4.0.0: + resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} + engines: {node: '>=8'} + dev: true + + /typical@5.2.0: + resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} + engines: {node: '>=8'} + dev: true + + /uglify-js@3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /ultron@1.1.1: + resolution: {integrity: sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==} + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /underscore@1.12.1: + resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} + dev: false + + /underscore@1.9.1: + resolution: {integrity: sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==} + + /undici@5.23.0: + resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==} + engines: {node: '>=14.0'} + dependencies: + busboy: 1.6.0 + dev: false + + /universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + /untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + dev: false + + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.1 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + + /url-parse-lax@3.0.0: + resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} + engines: {node: '>=4'} + dependencies: + prepend-http: 2.0.0 + dev: false + + /url-set-query@1.0.0: + resolution: {integrity: sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==} + + /usb@1.9.2: + resolution: {integrity: sha512-dryNz030LWBPAf6gj8vyq0Iev3vPbCLHCT8dBw3gQRXRzVNsIdeuU+VjPp3ksmSPkeMAl1k+kQ14Ij0QHyeiAg==} + engines: {node: '>=10.16.0'} + requiresBuild: true + dependencies: + node-addon-api: 4.3.0 + node-gyp-build: 4.6.0 + dev: false + + /utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.6.0 + + /utf8@2.1.2: + resolution: {integrity: sha512-QXo+O/QkLP/x1nyi54uQiG0XrODxdysuQvE5dtVqv7F5K2Qb6FsN+qbr6KhF5wQ20tfcV3VQp0/2x1e1MRSPWg==} + + /utf8@3.0.0: + resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.12 + which-typed-array: 1.1.11 + + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + /uuid@2.0.1: + resolution: {integrity: sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + dev: false + + /uuid@3.3.2: + resolution: {integrity: sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: false + + /uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + dev: true + + /varint@5.0.2: + resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} + + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + /verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + + /viem@1.15.1(typescript@5.0.4): + resolution: {integrity: sha512-lxk8wwUK7ZivYAUZ6pH+9Y6jjrfXXjafCOoASa4lw3ULUCT2BajU4SELarlxJQimpsFd7OZD4m4iEXYLF/bt6w==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.9.4 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + '@types/ws': 8.5.9 + abitype: 0.9.8(typescript@5.0.4) + isomorphic-ws: 5.0.0(ws@8.13.0) + typescript: 5.0.4 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + dev: true + + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + dependencies: + defaults: 1.0.4 + + /web3-bzz@1.10.3: + resolution: {integrity: sha512-XDIRsTwekdBXtFytMpHBuun4cK4x0ZMIDXSoo1UVYp+oMyZj07c7gf7tNQY5qZ/sN+CJIas4ilhN25VJcjSijQ==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + '@types/node': 12.20.55 + got: 12.1.0 + swarm-js: 0.1.42 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /web3-bzz@1.3.6: + resolution: {integrity: sha512-ibHdx1wkseujFejrtY7ZyC0QxQ4ATXjzcNUpaLrvM6AEae8prUiyT/OloG9FWDgFD2CPLwzKwfSQezYQlANNlw==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + '@types/node': 12.20.55 + got: 9.6.0 + swarm-js: 0.1.42 + underscore: 1.12.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /web3-core-helpers@1.10.3: + resolution: {integrity: sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA==} + engines: {node: '>=8.0.0'} + dependencies: + web3-eth-iban: 1.10.3 + web3-utils: 1.10.3 + + /web3-core-helpers@1.3.6: + resolution: {integrity: sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA==} + engines: {node: '>=8.0.0'} + dependencies: + underscore: 1.12.1 + web3-eth-iban: 1.3.6 + web3-utils: 1.3.6 + dev: false + + /web3-core-method@1.10.3: + resolution: {integrity: sha512-VZ/Dmml4NBmb0ep5PTSg9oqKoBtG0/YoMPei/bq/tUdlhB2dMB79sbeJPwx592uaV0Vpk7VltrrrBv5hTM1y4Q==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethersproject/transactions': 5.7.0 + web3-core-helpers: 1.10.3 + web3-core-promievent: 1.10.3 + web3-core-subscriptions: 1.10.3 + web3-utils: 1.10.3 + + /web3-core-method@1.3.6: + resolution: {integrity: sha512-RyegqVGxn0cyYW5yzAwkPlsSEynkdPiegd7RxgB4ak1eKk2Cv1q2x4C7D2sZjeeCEF+q6fOkVmo2OZNqS2iQxg==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethersproject/transactions': 5.7.0 + underscore: 1.12.1 + web3-core-helpers: 1.3.6 + web3-core-promievent: 1.3.6 + web3-core-subscriptions: 1.3.6 + web3-utils: 1.3.6 + dev: false + + /web3-core-promievent@1.10.3: + resolution: {integrity: sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + + /web3-core-promievent@1.3.6: + resolution: {integrity: sha512-Z+QzfyYDTXD5wJmZO5wwnRO8bAAHEItT1XNSPVb4J1CToV/I/SbF7CuF8Uzh2jns0Cm1109o666H7StFFvzVKw==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + dev: false + + /web3-core-requestmanager@1.10.3: + resolution: {integrity: sha512-VT9sKJfgM2yBOIxOXeXiDuFMP4pxzF6FT+y8KTLqhDFHkbG3XRe42Vm97mB/IvLQCJOmokEjl3ps8yP1kbggyw==} + engines: {node: '>=8.0.0'} + dependencies: + util: 0.12.5 + web3-core-helpers: 1.10.3 + web3-providers-http: 1.10.3 + web3-providers-ipc: 1.10.3 + web3-providers-ws: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + + /web3-core-requestmanager@1.3.6: + resolution: {integrity: sha512-2rIaeuqeo7QN1Eex7aXP0ZqeteJEPWXYFS/M3r3LXMiV8R4STQBKE+//dnHJXoo2ctzEB5cgd+7NaJM8S3gPyA==} + engines: {node: '>=8.0.0'} + dependencies: + underscore: 1.12.1 + util: 0.12.5 + web3-core-helpers: 1.3.6 + web3-providers-http: 1.3.6 + web3-providers-ipc: 1.3.6 + web3-providers-ws: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-core-subscriptions@1.10.3: + resolution: {integrity: sha512-KW0Mc8sgn70WadZu7RjQ4H5sNDJ5Lx8JMI3BWos+f2rW0foegOCyWhRu33W1s6ntXnqeBUw5rRCXZRlA3z+HNA==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.10.3 + + /web3-core-subscriptions@1.3.6: + resolution: {integrity: sha512-wi9Z9X5X75OKvxAg42GGIf81ttbNR2TxzkAsp1g+nnp5K8mBwgZvXrIsDuj7Z7gx72Y45mWJADCWjk/2vqNu8g==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + underscore: 1.12.1 + web3-core-helpers: 1.3.6 + dev: false + + /web3-core@1.10.3: + resolution: {integrity: sha512-Vbk0/vUNZxJlz3RFjAhNNt7qTpX8yE3dn3uFxfX5OHbuon5u65YEOd3civ/aQNW745N0vGUlHFNxxmn+sG9DIw==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 5.1.1 + '@types/node': 12.20.55 + bignumber.js: 9.1.2 + web3-core-helpers: 1.10.3 + web3-core-method: 1.10.3 + web3-core-requestmanager: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + + /web3-core@1.3.6: + resolution: {integrity: sha512-gkLDM4T1Sc0T+HZIwxrNrwPg0IfWI0oABSglP2X5ZbBAYVUeEATA0o92LWV8BeF+okvKXLK1Fek/p6axwM/h3Q==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 4.11.6 + '@types/node': 12.20.55 + bignumber.js: 9.1.2 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-core-requestmanager: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-core@4.3.1: + resolution: {integrity: sha512-xa3w5n/ESxp5HIbrwsYBhpAPx2KI5LprjRFEtRwP0GpqqhTcCSMMYoyItRqQQ+k9YnB0PoFpWJfJI6Qn5x8YUQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-errors: 1.1.4 + web3-eth-iban: 4.0.7 + web3-providers-http: 4.1.0 + web3-providers-ws: 4.0.7 + web3-types: 1.3.1 + web3-utils: 4.0.7 + web3-validator: 2.0.3 + optionalDependencies: + web3-providers-ipc: 4.0.7 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: true + + /web3-errors@1.1.4: + resolution: {integrity: sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-types: 1.3.1 + dev: true + + /web3-eth-abi@1.10.3: + resolution: {integrity: sha512-O8EvV67uhq0OiCMekqYsDtb6FzfYzMXT7VMHowF8HV6qLZXCGTdB/NH4nJrEh2mFtEwVdS6AmLFJAQd2kVyoMQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethersproject/abi': 5.7.0 + web3-utils: 1.10.3 + + /web3-eth-abi@1.3.6: + resolution: {integrity: sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethersproject/abi': 5.0.7 + underscore: 1.12.1 + web3-utils: 1.3.6 + dev: false + + /web3-eth-abi@4.1.4(typescript@5.0.4): + resolution: {integrity: sha512-YLOBVVxxxLYKXjaiwZjEWYEnkMmmrm0nswZsvzSsINy/UgbWbzfoiZU+zn4YNWIEhORhx1p37iS3u/dP6VyC2w==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + abitype: 0.7.1(typescript@5.0.4) + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.0.7 + web3-validator: 2.0.3 + transitivePeerDependencies: + - typescript + - zod + dev: true + + /web3-eth-accounts@1.10.3: + resolution: {integrity: sha512-8MipGgwusDVgn7NwKOmpeo3gxzzd+SmwcWeBdpXknuyDiZSQy9tXe+E9LeFGrmys/8mLLYP79n3jSbiTyv+6pQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethereumjs/common': 2.6.5 + '@ethereumjs/tx': 3.5.2 + '@ethereumjs/util': 8.1.0 + eth-lib: 0.2.8 + scrypt-js: 3.0.1 + uuid: 9.0.1 + web3-core: 1.10.3 + web3-core-helpers: 1.10.3 + web3-core-method: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + + /web3-eth-accounts@1.3.6: + resolution: {integrity: sha512-Ilr0hG6ONbCdSlVKffasCmNwftD5HsNpwyQASevocIQwHdTlvlwO0tb3oGYuajbKOaDzNTwXfz25bttAEoFCGA==} + engines: {node: '>=8.0.0'} + dependencies: + crypto-browserify: 3.12.0 + eth-lib: 0.2.8 + ethereumjs-common: 1.5.2 + ethereumjs-tx: 2.1.2 + scrypt-js: 3.0.1 + underscore: 1.12.1 + uuid: 3.3.2 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-accounts@4.1.0: + resolution: {integrity: sha512-UFtAsOANsvihTQ6SSvOKguupmQkResyR9M9JNuOxYpKh7+3W+sTnbLXw2UbOSYIsKlc1mpqqW9bVr1SjqHDpUQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + '@ethereumjs/rlp': 4.0.1 + crc-32: 1.2.2 + ethereum-cryptography: 2.1.2 + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.0.7 + web3-validator: 2.0.3 + dev: true + + /web3-eth-contract@1.10.3: + resolution: {integrity: sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 5.1.1 + web3-core: 1.10.3 + web3-core-helpers: 1.10.3 + web3-core-method: 1.10.3 + web3-core-promievent: 1.10.3 + web3-core-subscriptions: 1.10.3 + web3-eth-abi: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + + /web3-eth-contract@1.3.6: + resolution: {integrity: sha512-8gDaRrLF2HCg+YEZN1ov0zN35vmtPnGf3h1DxmJQK5Wm2lRMLomz9rsWsuvig3UJMHqZAQKD7tOl3ocJocQsmA==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 4.11.6 + underscore: 1.12.1 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-core-promievent: 1.3.6 + web3-core-subscriptions: 1.3.6 + web3-eth-abi: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-contract@4.1.3(typescript@5.0.4): + resolution: {integrity: sha512-F6e3eyetUDiNOb78EDVJtNOb0H1GPz3xAZH8edSfYdhaxI9tTutP2V3p++kh2ZJ/RrdE2+xil7H/nPLgHymBvg==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.1 + web3-errors: 1.1.4 + web3-eth: 4.3.1(typescript@5.0.4) + web3-eth-abi: 4.1.4(typescript@5.0.4) + web3-types: 1.3.1 + web3-utils: 4.0.7 + web3-validator: 2.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /web3-eth-ens@1.10.3: + resolution: {integrity: sha512-hR+odRDXGqKemw1GFniKBEXpjYwLgttTES+bc7BfTeoUyUZXbyDHe5ifC+h+vpzxh4oS0TnfcIoarK0Z9tFSiQ==} + engines: {node: '>=8.0.0'} + dependencies: + content-hash: 2.5.2 + eth-ens-namehash: 2.0.8 + web3-core: 1.10.3 + web3-core-helpers: 1.10.3 + web3-core-promievent: 1.10.3 + web3-eth-abi: 1.10.3 + web3-eth-contract: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + + /web3-eth-ens@1.3.6: + resolution: {integrity: sha512-n27HNj7lpSkRxTgSx+Zo7cmKAgyg2ElFilaFlUu/X2CNH23lXfcPm2bWssivH9z0ndhg0OyR4AYFZqPaqDHkJA==} + engines: {node: '>=8.0.0'} + dependencies: + content-hash: 2.5.2 + eth-ens-namehash: 2.0.8 + underscore: 1.12.1 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-promievent: 1.3.6 + web3-eth-abi: 1.3.6 + web3-eth-contract: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-ens@4.0.8(typescript@5.0.4): + resolution: {integrity: sha512-nj0JfeD45BbzVJcVYpUJnSo8iwDcY9CQ7CZhhIVVOFjvpMAPw0zEwjTvZEIQyCW61OoDG9xcBzwxe2tZoYhMRw==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + '@adraffy/ens-normalize': 1.9.4 + web3-core: 4.3.1 + web3-errors: 1.1.4 + web3-eth: 4.3.1(typescript@5.0.4) + web3-eth-contract: 4.1.3(typescript@5.0.4) + web3-net: 4.0.7 + web3-types: 1.3.1 + web3-utils: 4.0.7 + web3-validator: 2.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /web3-eth-iban@1.10.3: + resolution: {integrity: sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 5.2.1 + web3-utils: 1.10.3 + + /web3-eth-iban@1.3.6: + resolution: {integrity: sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 4.12.0 + web3-utils: 1.3.6 + dev: false + + /web3-eth-iban@4.0.7: + resolution: {integrity: sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.0.7 + web3-validator: 2.0.3 + dev: true + + /web3-eth-personal@1.10.3: + resolution: {integrity: sha512-avrQ6yWdADIvuNQcFZXmGLCEzulQa76hUOuVywN7O3cklB4nFc/Gp3yTvD3bOAaE7DhjLQfhUTCzXL7WMxVTsw==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/node': 12.20.55 + web3-core: 1.10.3 + web3-core-helpers: 1.10.3 + web3-core-method: 1.10.3 + web3-net: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + + /web3-eth-personal@1.3.6: + resolution: {integrity: sha512-pOHU0+/h1RFRYoh1ehYBehRbcKWP4OSzd4F7mDljhHngv6W8ewMHrAN8O1ol9uysN2MuCdRE19qkRg5eNgvzFQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/node': 12.20.55 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-net: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth-personal@4.0.8(typescript@5.0.4): + resolution: {integrity: sha512-sXeyLKJ7ddQdMxz1BZkAwImjqh7OmKxhXoBNF3isDmD4QDpMIwv/t237S3q4Z0sZQamPa/pHebJRWVuvP8jZdw==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.1 + web3-eth: 4.3.1(typescript@5.0.4) + web3-rpc-methods: 1.1.3 + web3-types: 1.3.1 + web3-utils: 4.0.7 + web3-validator: 2.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /web3-eth@1.10.3: + resolution: {integrity: sha512-Uk1U2qGiif2mIG8iKu23/EQJ2ksB1BQXy3wF3RvFuyxt8Ft9OEpmGlO7wOtAyJdoKzD5vcul19bJpPcWSAYZhA==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core: 1.10.3 + web3-core-helpers: 1.10.3 + web3-core-method: 1.10.3 + web3-core-subscriptions: 1.10.3 + web3-eth-abi: 1.10.3 + web3-eth-accounts: 1.10.3 + web3-eth-contract: 1.10.3 + web3-eth-ens: 1.10.3 + web3-eth-iban: 1.10.3 + web3-eth-personal: 1.10.3 + web3-net: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + + /web3-eth@1.3.6: + resolution: {integrity: sha512-9+rnywRRpyX3C4hfsAQXPQh6vHh9XzQkgLxo3gyeXfbhbShUoq2gFVuy42vsRs//6JlsKdyZS7Z3hHPHz2wreA==} + engines: {node: '>=8.0.0'} + dependencies: + underscore: 1.12.1 + web3-core: 1.3.6 + web3-core-helpers: 1.3.6 + web3-core-method: 1.3.6 + web3-core-subscriptions: 1.3.6 + web3-eth-abi: 1.3.6 + web3-eth-accounts: 1.3.6 + web3-eth-contract: 1.3.6 + web3-eth-ens: 1.3.6 + web3-eth-iban: 1.3.6 + web3-eth-personal: 1.3.6 + web3-net: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-eth@4.3.1(typescript@5.0.4): + resolution: {integrity: sha512-zJir3GOXooHQT85JB8SrufE+Voo5TtXdjhf1D8IGXmxM8MrhI8AT+Pgt4siBTupJcu5hF17iGmTP/Nj2XnaibQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + setimmediate: 1.0.5 + web3-core: 4.3.1 + web3-errors: 1.1.4 + web3-eth-abi: 4.1.4(typescript@5.0.4) + web3-eth-accounts: 4.1.0 + web3-net: 4.0.7 + web3-providers-ws: 4.0.7 + web3-rpc-methods: 1.1.3 + web3-types: 1.3.1 + web3-utils: 4.0.7 + web3-validator: 2.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /web3-net@1.10.3: + resolution: {integrity: sha512-IoSr33235qVoI1vtKssPUigJU9Fc/Ph0T9CgRi15sx+itysmvtlmXMNoyd6Xrgm9LuM4CIhxz7yDzH93B79IFg==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core: 1.10.3 + web3-core-method: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + + /web3-net@1.3.6: + resolution: {integrity: sha512-KhzU3wMQY/YYjyMiQzbaLPt2kut88Ncx2iqjy3nw28vRux3gVX0WOCk9EL/KVJBiAA/fK7VklTXvgy9dZnnipw==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core: 1.3.6 + web3-core-method: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-net@4.0.7: + resolution: {integrity: sha512-SzEaXFrBjY25iQGk5myaOfO9ZyfTwQEa4l4Ps4HDNVMibgZji3WPzpjq8zomVHMwi8bRp6VV7YS71eEsX7zLow==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.1 + web3-rpc-methods: 1.1.3 + web3-types: 1.3.1 + web3-utils: 4.0.7 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: true + + /web3-providers-http@1.10.3: + resolution: {integrity: sha512-6dAgsHR3MxJ0Qyu3QLFlQEelTapVfWNTu5F45FYh8t7Y03T1/o+YAkVxsbY5AdmD+y5bXG/XPJ4q8tjL6MgZHw==} + engines: {node: '>=8.0.0'} + dependencies: + abortcontroller-polyfill: 1.7.5 + cross-fetch: 4.0.0 + es6-promise: 4.2.8 + web3-core-helpers: 1.10.3 + transitivePeerDependencies: + - encoding + + /web3-providers-http@1.3.6: + resolution: {integrity: sha512-OQkT32O1A06dISIdazpGLveZcOXhEo5cEX6QyiSQkiPk/cjzDrXMw4SKZOGQbbS1+0Vjizm1Hrp7O8Vp2D1M5Q==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core-helpers: 1.3.6 + xhr2-cookies: 1.1.0 + dev: false + + /web3-providers-http@4.1.0: + resolution: {integrity: sha512-6qRUGAhJfVQM41E5t+re5IHYmb5hSaLc02BE2MaRQsz2xKA6RjmHpOA5h/+ojJxEpI9NI2CrfDKOAgtJfoUJQg==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + cross-fetch: 4.0.0 + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.0.7 + transitivePeerDependencies: + - encoding + dev: true + + /web3-providers-ipc@1.10.3: + resolution: {integrity: sha512-vP5WIGT8FLnGRfswTxNs9rMfS1vCbMezj/zHbBe/zB9GauBRTYVrUo2H/hVrhLg8Ut7AbsKZ+tCJ4mAwpKi2hA==} + engines: {node: '>=8.0.0'} + dependencies: + oboe: 2.1.5 + web3-core-helpers: 1.10.3 + + /web3-providers-ipc@1.3.6: + resolution: {integrity: sha512-+TVsSd2sSVvVgHG4s6FXwwYPPT91boKKcRuEFXqEfAbUC5t52XOgmyc2LNiD9LzPhed65FbV4LqICpeYGUvSwA==} + engines: {node: '>=8.0.0'} + dependencies: + oboe: 2.1.5 + underscore: 1.12.1 + web3-core-helpers: 1.3.6 + dev: false + + /web3-providers-ipc@4.0.7: + resolution: {integrity: sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==} + engines: {node: '>=14', npm: '>=6.12.0'} + requiresBuild: true + dependencies: + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.0.7 + dev: true + optional: true + + /web3-providers-ws@1.10.3: + resolution: {integrity: sha512-/filBXRl48INxsh6AuCcsy4v5ndnTZ/p6bl67kmO9aK1wffv7CT++DrtclDtVMeDGCgB3van+hEf9xTAVXur7Q==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.10.3 + websocket: 1.0.34 + transitivePeerDependencies: + - supports-color + + /web3-providers-ws@1.3.6: + resolution: {integrity: sha512-bk7MnJf5or0Re2zKyhR3L3CjGululLCHXx4vlbc/drnaTARUVvi559OI5uLytc/1k5HKUUyENAxLvetz2G1dnQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + underscore: 1.12.1 + web3-core-helpers: 1.3.6 + websocket: 1.0.34 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-providers-ws@4.0.7: + resolution: {integrity: sha512-n4Dal9/rQWjS7d6LjyEPM2R458V8blRm0eLJupDEJOOIBhGYlxw5/4FthZZ/cqB7y/sLVi7K09DdYx2MeRtU5w==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + '@types/ws': 8.5.3 + isomorphic-ws: 5.0.0(ws@8.13.0) + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.0.7 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /web3-rpc-methods@1.1.3: + resolution: {integrity: sha512-XB6SsCZZPdZUMPIRqDxJkZFKMu0/Y+yaExAt+Z7RqmuM7xF55fJ/Qb84LQho8zarvUoYziy4jnIfs+SXImxQUw==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.1 + web3-types: 1.3.1 + web3-validator: 2.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: true + + /web3-shh@1.10.3: + resolution: {integrity: sha512-cAZ60CPvs9azdwMSQ/PSUdyV4PEtaW5edAZhu3rCXf6XxQRliBboic+AvwUvB6j3eswY50VGa5FygfVmJ1JVng==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + web3-core: 1.10.3 + web3-core-method: 1.10.3 + web3-core-subscriptions: 1.10.3 + web3-net: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + + /web3-shh@1.3.6: + resolution: {integrity: sha512-9zRo415O0iBslxBnmu9OzYjNErzLnzOsy+IOvSpIreLYbbAw0XkDWxv3SfcpKnTIWIACBR4AYMIxmmyi5iB3jw==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + web3-core: 1.3.6 + web3-core-method: 1.3.6 + web3-core-subscriptions: 1.3.6 + web3-net: 1.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /web3-types@1.3.1: + resolution: {integrity: sha512-8fXi7h/t95VKRtgU4sxprLPZpsTh3jYDfSghshIDBgUD/OoGe5S+syP24SUzBZYllZ/L+hMr2gdp/0bGJa8pYQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dev: true + + /web3-utils@1.10.3: + resolution: {integrity: sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethereumjs/util': 8.1.0 + bn.js: 5.2.1 + ethereum-bloom-filters: 1.0.10 + ethereum-cryptography: 2.1.2 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + + /web3-utils@1.2.9: + resolution: {integrity: sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 4.11.8 + eth-lib: 0.2.7 + ethereum-bloom-filters: 1.0.10 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + underscore: 1.9.1 + utf8: 3.0.0 + dev: false + + /web3-utils@1.3.0: + resolution: {integrity: sha512-2mS5axFCbkhicmoDRuJeuo0TVGQDgC2sPi/5dblfVC+PMtX0efrb8Xlttv/eGkq7X4E83Pds34FH98TP2WOUZA==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 4.12.0 + eth-lib: 0.2.8 + ethereum-bloom-filters: 1.0.10 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + underscore: 1.9.1 + utf8: 3.0.0 + dev: true + + /web3-utils@1.3.6: + resolution: {integrity: sha512-hHatFaQpkQgjGVER17gNx8u1qMyaXFZtM0y0XLGH1bzsjMPlkMPLRcYOrZ00rOPfTEuYFOdrpGOqZXVmGrMZRg==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 4.12.0 + eth-lib: 0.2.8 + ethereum-bloom-filters: 1.0.10 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + underscore: 1.12.1 + utf8: 3.0.0 + dev: false + + /web3-utils@4.0.7: + resolution: {integrity: sha512-sy8S6C2FIa5NNHc8DjND+Fx3S8KDAizuh5RbL1RX3h0PRbFgPfWzF5RfUns8gTt0mjJuOhs/IaDhrZfeTszG5A==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + ethereum-cryptography: 2.1.2 + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-validator: 2.0.3 + dev: true + + /web3-validator@2.0.3: + resolution: {integrity: sha512-fJbAQh+9LSNWy+l5Ze6HABreml8fra98o5+vS073T35jUcLbRZ0IOjF/ZPJhJNbJDt+jP1vseZsc3z3uX9mxxQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + ethereum-cryptography: 2.1.2 + util: 0.12.5 + web3-errors: 1.1.4 + web3-types: 1.3.1 + zod: 3.22.4 + dev: true + + /web3@0.20.0: + resolution: {integrity: sha512-S276pNYlSc7nmG8SQ2whmUbl+KSxIdN7akW2JYdUEpp8eR29/sq5lYM3BH4fU/8lyvc57ss62PV2wfRKRsWf5A==} + dependencies: + bignumber.js: github.com/frozeman/bignumber.js-nolookahead/57692b3ecfc98bbdd6b3a516cb2353652ea49934 + crypto-js: 3.3.0 + utf8: 2.1.2 + xhr2: 0.2.1 + xmlhttprequest: 1.8.0 + dev: true + + /web3@0.20.6: + resolution: {integrity: sha512-diON1+Y8sPQ33htuTMZfyo+qlsmCBSYwi+MVTRneS8anqZUaTrGaBkTpPkPUvfX1X+NK+Y2spLaaei3HfXeSuw==} + dependencies: + bignumber.js: github.com/frozeman/bignumber.js-nolookahead/57692b3ecfc98bbdd6b3a516cb2353652ea49934 + crypto-js: 3.3.0 + utf8: 2.1.2 + xhr2: 0.2.1 + xmlhttprequest: 1.8.0 + dev: false + + /web3@1.10.3: + resolution: {integrity: sha512-DgUdOOqC/gTqW+VQl1EdPxrVRPB66xVNtuZ5KD4adVBtko87hkgM8BTZ0lZ8IbUfnQk6DyjcDujMiH3oszllAw==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + web3-bzz: 1.10.3 + web3-core: 1.10.3 + web3-eth: 1.10.3 + web3-eth-personal: 1.10.3 + web3-net: 1.10.3 + web3-shh: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + /web3@1.3.6: + resolution: {integrity: sha512-jEpPhnL6GDteifdVh7ulzlPrtVQeA30V9vnki9liYlUvLV82ZM7BNOQJiuzlDePuE+jZETZSP/0G/JlUVt6pOA==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + web3-bzz: 1.3.6 + web3-core: 1.3.6 + web3-eth: 1.3.6 + web3-eth-personal: 1.3.6 + web3-net: 1.3.6 + web3-shh: 1.3.6 + web3-utils: 1.3.6 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /web3@4.2.2(typescript@5.0.4): + resolution: {integrity: sha512-im7weoHY7TW87nhFk10ysupZnsDJEO/xDpz985AgrTd/7KxExlzjjKd+4nue0WskUF0th0mgoMs1YaA8xUjCjw==} + engines: {node: '>=14.0.0', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.1 + web3-errors: 1.1.4 + web3-eth: 4.3.1(typescript@5.0.4) + web3-eth-abi: 4.1.4(typescript@5.0.4) + web3-eth-accounts: 4.1.0 + web3-eth-contract: 4.1.3(typescript@5.0.4) + web3-eth-ens: 4.0.8(typescript@5.0.4) + web3-eth-iban: 4.0.7 + web3-eth-personal: 4.0.8(typescript@5.0.4) + web3-net: 4.0.7 + web3-providers-http: 4.1.0 + web3-providers-ws: 4.0.7 + web3-rpc-methods: 1.1.3 + web3-types: 1.3.1 + web3-utils: 4.0.7 + web3-validator: 2.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + /websocket@1.0.34: + resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} + engines: {node: '>=4.0.0'} + dependencies: + bufferutil: 4.0.8 + debug: 2.6.9 + es5-ext: 0.10.62 + typedarray-to-buffer: 3.1.5 + utf-8-validate: 5.0.10 + yaeti: 0.0.6 + transitivePeerDependencies: + - supports-color + + /whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: true + + /which-pm@2.0.0: + resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} + engines: {node: '>=8.15'} + dependencies: + load-yaml-file: 0.2.0 + path-exists: 4.0.0 + dev: true + + /which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + + /wide-align@1.1.3: + resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} + dependencies: + string-width: 2.1.1 + dev: true + + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + dev: true + + /wordwrapjs@4.0.1: + resolution: {integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==} + engines: {node: '>=8.0.0'} + dependencies: + reduce-flatten: 2.0.0 + typical: 5.2.0 + dev: true + + /workerpool@6.2.1: + resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} + + /wrap-ansi@5.1.0: + resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} + engines: {node: '>=6'} + dependencies: + ansi-styles: 3.2.1 + string-width: 3.1.0 + strip-ansi: 5.2.0 + dev: true + + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: true + + /ws@3.3.3: + resolution: {integrity: sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + async-limiter: 1.0.1 + safe-buffer: 5.1.2 + ultron: 1.1.1 + + /ws@7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /ws@8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + /xhr-request-promise@0.1.3: + resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} + dependencies: + xhr-request: 1.1.0 + + /xhr-request@1.1.0: + resolution: {integrity: sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==} + dependencies: + buffer-to-arraybuffer: 0.0.5 + object-assign: 4.1.1 + query-string: 5.1.1 + simple-get: 2.8.2 + timed-out: 4.0.1 + url-set-query: 1.0.0 + xhr: 2.6.0 + + /xhr2-cookies@1.1.0: + resolution: {integrity: sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==} + dependencies: + cookiejar: 2.1.4 + dev: false + + /xhr2@0.2.1: + resolution: {integrity: sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==} + engines: {node: '>= 6'} + + /xhr@2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + dependencies: + global: 4.4.0 + is-function: 1.0.2 + parse-headers: 2.0.5 + xtend: 4.0.2 + + /xmlhttprequest@1.8.0: + resolution: {integrity: sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==} + engines: {node: '>=0.4.0'} + + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: true + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + /yaeti@0.0.6: + resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} + engines: {node: '>=0.10.32'} + + /yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yargs-parser@13.1.2: + resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + + /yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + + /yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + dev: true + + /yargs-unparser@1.6.0: + resolution: {integrity: sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==} + engines: {node: '>=6'} + dependencies: + flat: 4.1.1 + lodash: 4.17.21 + yargs: 13.3.2 + dev: true + + /yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + /yargs@13.3.2: + resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} + dependencies: + cliui: 5.0.0 + find-up: 3.0.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 3.1.0 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 13.1.2 + dev: true + + /yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + dev: true + + /yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: true + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: true + + github.com/frozeman/bignumber.js-nolookahead/57692b3ecfc98bbdd6b3a516cb2353652ea49934: + resolution: {tarball: https://codeload.github.com/frozeman/bignumber.js-nolookahead/tar.gz/57692b3ecfc98bbdd6b3a516cb2353652ea49934} + name: bignumber.js + version: 2.0.7 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000000..dee51e928d --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - "packages/*" diff --git a/scripts/check-dependencies.js b/scripts/check-dependencies.js index a9012784e5..a581978915 100644 --- a/scripts/check-dependencies.js +++ b/scripts/check-dependencies.js @@ -14,16 +14,8 @@ const IGNORE_SAME_VERSION_FOR_PACKAGES = { "@nomiclabs/hardhat-truffle5", ], ethers: ["@nomicfoundation/hardhat-verify"], - ["@types/node"]: ["docs"], - ["@typescript-eslint/eslint-plugin"]: ["docs"], - ["@typescript-eslint/parser"]: ["docs"], - eslint: ["docs"], - ["eslint-config-prettier"]: ["docs"], - ["eslint-plugin-prettier"]: ["docs"], - ["glob"]: ["docs"], - ["undici"]: ["docs"], - ["ts-node"]: ["docs", "hardhat"], - ["typescript"]: ["docs", "hardhat"], + ["ts-node"]: ["hardhat"], + ["typescript"]: ["hardhat"], }; const IGNORE_PEER_DEPENDENCIES_CHECK_FOR_PACKAGES = { @@ -64,10 +56,20 @@ function checkPeerDepedencies(packageJson) { continue; } - if ( - packageJson.peerDependencies[dependency] !== - packageJson.devDependencies[dependency] - ) { + const peerDep = packageJson.peerDependencies[dependency]; + if (peerDep.startsWith("workspace:")) { + console.error( + `${packageJson.name} uses the workspace protocol for ${dependency}, which is a peer dependency` + ); + + success = false; + } + + const devDep = packageJson.devDependencies[dependency].replace( + /^workspace:/, + "" + ); + if (peerDep !== devDep) { console.error( `${packageJson.name} has different versions of ${dependency} as peerDependency and devDependency` ); @@ -84,7 +86,8 @@ function addDependencies(packageName, dependenciesToAdd, allDependenciesMap) { return; } - for (const [name, spec] of Object.entries(dependenciesToAdd)) { + for (const [name, specWithWorspace] of Object.entries(dependenciesToAdd)) { + const spec = specWithWorspace.replace(/^workspace:/, ""); if (IGNORE_SAME_VERSION_FROM_ALL.includes(name)) { continue; } @@ -147,12 +150,12 @@ function mergeDependenciesMap(dependencyMaps) { function getAllPackageJsonPaths() { const packageNames = fs.readdirSync(path.join(__dirname, "..", "packages")); - const packageJsons = packageNames.map((p) => - path.join(__dirname, "..", "packages", p, "package.json") - ); + const packageJsons = packageNames + // ignore hh-etherscan and hh-waffle because they only have a readme + .filter((p) => !["hardhat-etherscan", "hardhat-waffle"].includes(p)) + .map((p) => path.join(__dirname, "..", "packages", p, "package.json")); packageJsons.push(path.join(__dirname, "..", "package.json")); - packageJsons.push(path.join(__dirname, "..", "docs", "package.json")); return packageJsons; } @@ -168,8 +171,11 @@ function main() { const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8")); - // temporarily ignore hardhat-toolbox - if (packageJson.name === "@nomicfoundation/hardhat-toolbox") { + // temporarily ignore hardhat toolboxs + if ( + packageJson.name === "@nomicfoundation/hardhat-toolbox" || + packageJson.name === "@nomicfoundation/hardhat-toolbox-viem" + ) { continue; } diff --git a/scripts/run-tests-with-custom-solc.sh b/scripts/run-tests-with-custom-solc.sh index 7497d6f093..3a1c680140 100755 --- a/scripts/run-tests-with-custom-solc.sh +++ b/scripts/run-tests-with-custom-solc.sh @@ -11,8 +11,8 @@ fi cd "$(git rev-parse --show-toplevel)" # install dependencies -yarn +pnpm install # run hardhat tests cd packages/hardhat-core -yarn test +pnpm test diff --git a/scripts/run-tests.js b/scripts/run-tests.js index ed6aa38096..c9cf5ea804 100644 --- a/scripts/run-tests.js +++ b/scripts/run-tests.js @@ -13,7 +13,7 @@ const isGithubActions = process.env.GITHUB_WORKFLOW !== undefined; const isLinux = os.type() === "Linux"; const isWindows = os.type() === "Windows_NT"; -shell.exec("yarn build"); +shell.exec("pnpm build"); // ** check for packages to be ignored ** // @@ -23,7 +23,7 @@ const shouldIgnoreSolppTests = isWindows; const ignoredPackagesList = []; if (shouldIgnoreSolppTests) { - ignoredPackagesList.push("--exclude @nomiclabs/hardhat-solpp"); + ignoredPackagesList.push("--filter=!@nomiclabs/hardhat-solpp"); } const ignoredPackages = ignoredPackagesList.join(" "); @@ -32,8 +32,8 @@ function runTests() { console.time("Total test time"); try { - const fastExit = process.env.NO_FAST_EXIT ? "" : "--fast-exit"; - const command = `yarn wsrun --serial ${fastExit} --exclude-missing ${ignoredPackages} test`; + const fastExit = process.env.NO_FAST_EXIT ? "--no-bail" : "--bail"; + const command = `pnpm run --recursive --workspace-concurrency 1 ${fastExit} ${ignoredPackages} test`; shell.exec(command); } finally { diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 8f15159e61..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,9843 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/compat-data@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" - integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== - -"@babel/core@^7.7.5": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" - integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.4" - "@babel/helper-compilation-targets" "^7.21.4" - "@babel/helper-module-transforms" "^7.21.2" - "@babel/helpers" "^7.21.0" - "@babel/parser" "^7.21.4" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.4" - "@babel/types" "^7.21.4" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.2" - semver "^6.3.0" - -"@babel/generator@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" - integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== - dependencies: - "@babel/types" "^7.21.4" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" - integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== - dependencies: - "@babel/compat-data" "^7.21.4" - "@babel/helper-validator-option" "^7.21.0" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== - -"@babel/helper-function-name@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" - integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== - dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" - -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-module-imports@^7.18.6": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" - integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== - dependencies: - "@babel/types" "^7.21.4" - -"@babel/helper-module-transforms@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" - integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.2" - "@babel/types" "^7.21.2" - -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-option@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== - -"@babel/helpers@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" - integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.20.7", "@babel/parser@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" - integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== - -"@babel/runtime@^7.20.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5": - version "7.20.13" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.13.tgz#7055ab8a7cff2b8f6058bf6ae45ff84ad2aded4b" - integrity sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA== - dependencies: - regenerator-runtime "^0.13.11" - -"@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" - integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== - dependencies: - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.4" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.21.4" - "@babel/types" "^7.21.4" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" - integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== - dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" - to-fast-properties "^2.0.0" - -"@chainsafe/as-sha256@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" - integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== - -"@chainsafe/persistent-merkle-tree@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" - integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/persistent-merkle-tree@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" - integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/ssz@^0.10.0": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" - integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.5.0" - -"@chainsafe/ssz@^0.9.2": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" - integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.4.2" - case "^1.6.3" - -"@changesets/apply-release-plan@^6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-6.1.3.tgz#3bcc0bd57ba00d50d20df7d0141f1a9b2134eaf7" - integrity sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/config" "^2.3.0" - "@changesets/get-version-range-type" "^0.3.2" - "@changesets/git" "^2.0.0" - "@changesets/types" "^5.2.1" - "@manypkg/get-packages" "^1.1.3" - detect-indent "^6.0.0" - fs-extra "^7.0.1" - lodash.startcase "^4.4.0" - outdent "^0.5.0" - prettier "^2.7.1" - resolve-from "^5.0.0" - semver "^5.4.1" - -"@changesets/assemble-release-plan@^5.2.3": - version "5.2.3" - resolved "https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.3.tgz#5ce6191c6e193d40b566a7b0e01690cfb106f4db" - integrity sha512-g7EVZCmnWz3zMBAdrcKhid4hkHT+Ft1n0mLussFMcB1dE2zCuwcvGoy9ec3yOgPGF4hoMtgHaMIk3T3TBdvU9g== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/errors" "^0.1.4" - "@changesets/get-dependents-graph" "^1.3.5" - "@changesets/types" "^5.2.1" - "@manypkg/get-packages" "^1.1.3" - semver "^5.4.1" - -"@changesets/changelog-git@^0.1.14": - version "0.1.14" - resolved "https://registry.yarnpkg.com/@changesets/changelog-git/-/changelog-git-0.1.14.tgz#852caa7727dcf91497c131d05bc2cd6248532ada" - integrity sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA== - dependencies: - "@changesets/types" "^5.2.1" - -"@changesets/cli@^2.16.0": - version "2.26.0" - resolved "https://registry.yarnpkg.com/@changesets/cli/-/cli-2.26.0.tgz#f215ddb2b41574ffd0dda9cd77fac927ba048fd3" - integrity sha512-0cbTiDms+ICTVtEwAFLNW0jBNex9f5+fFv3I771nBvdnV/mOjd1QJ4+f8KtVSOrwD9SJkk9xbDkWFb0oXd8d1Q== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/apply-release-plan" "^6.1.3" - "@changesets/assemble-release-plan" "^5.2.3" - "@changesets/changelog-git" "^0.1.14" - "@changesets/config" "^2.3.0" - "@changesets/errors" "^0.1.4" - "@changesets/get-dependents-graph" "^1.3.5" - "@changesets/get-release-plan" "^3.0.16" - "@changesets/git" "^2.0.0" - "@changesets/logger" "^0.0.5" - "@changesets/pre" "^1.0.14" - "@changesets/read" "^0.5.9" - "@changesets/types" "^5.2.1" - "@changesets/write" "^0.2.3" - "@manypkg/get-packages" "^1.1.3" - "@types/is-ci" "^3.0.0" - "@types/semver" "^6.0.0" - ansi-colors "^4.1.3" - chalk "^2.1.0" - enquirer "^2.3.0" - external-editor "^3.1.0" - fs-extra "^7.0.1" - human-id "^1.0.2" - is-ci "^3.0.1" - meow "^6.0.0" - outdent "^0.5.0" - p-limit "^2.2.0" - preferred-pm "^3.0.0" - resolve-from "^5.0.0" - semver "^5.4.1" - spawndamnit "^2.0.0" - term-size "^2.1.0" - tty-table "^4.1.5" - -"@changesets/config@^2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@changesets/config/-/config-2.3.0.tgz#bff074d6492fa772cee139f9a04efa4cd56445bb" - integrity sha512-EgP/px6mhCx8QeaMAvWtRrgyxW08k/Bx2tpGT+M84jEdX37v3VKfh4Cz1BkwrYKuMV2HZKeHOh8sHvja/HcXfQ== - dependencies: - "@changesets/errors" "^0.1.4" - "@changesets/get-dependents-graph" "^1.3.5" - "@changesets/logger" "^0.0.5" - "@changesets/types" "^5.2.1" - "@manypkg/get-packages" "^1.1.3" - fs-extra "^7.0.1" - micromatch "^4.0.2" - -"@changesets/errors@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@changesets/errors/-/errors-0.1.4.tgz#f79851746c43679a66b383fdff4c012f480f480d" - integrity sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q== - dependencies: - extendable-error "^0.1.5" - -"@changesets/get-dependents-graph@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.5.tgz#f94c6672d2f9a87aa35512eea74550585ba41c21" - integrity sha512-w1eEvnWlbVDIY8mWXqWuYE9oKhvIaBhzqzo4ITSJY9hgoqQ3RoBqwlcAzg11qHxv/b8ReDWnMrpjpKrW6m1ZTA== - dependencies: - "@changesets/types" "^5.2.1" - "@manypkg/get-packages" "^1.1.3" - chalk "^2.1.0" - fs-extra "^7.0.1" - semver "^5.4.1" - -"@changesets/get-release-plan@^3.0.16": - version "3.0.16" - resolved "https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-3.0.16.tgz#5d9cfc4ffda02c496ef0fde407210de8e3a0fb19" - integrity sha512-OpP9QILpBp1bY2YNIKFzwigKh7Qe9KizRsZomzLe6pK8IUo8onkAAVUD8+JRKSr8R7d4+JRuQrfSSNlEwKyPYg== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/assemble-release-plan" "^5.2.3" - "@changesets/config" "^2.3.0" - "@changesets/pre" "^1.0.14" - "@changesets/read" "^0.5.9" - "@changesets/types" "^5.2.1" - "@manypkg/get-packages" "^1.1.3" - -"@changesets/get-version-range-type@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@changesets/get-version-range-type/-/get-version-range-type-0.3.2.tgz#8131a99035edd11aa7a44c341cbb05e668618c67" - integrity sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg== - -"@changesets/git@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@changesets/git/-/git-2.0.0.tgz#8de57649baf13a86eb669a25fa51bcad5cea517f" - integrity sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/errors" "^0.1.4" - "@changesets/types" "^5.2.1" - "@manypkg/get-packages" "^1.1.3" - is-subdir "^1.1.1" - micromatch "^4.0.2" - spawndamnit "^2.0.0" - -"@changesets/logger@^0.0.5": - version "0.0.5" - resolved "https://registry.yarnpkg.com/@changesets/logger/-/logger-0.0.5.tgz#68305dd5a643e336be16a2369cb17cdd8ed37d4c" - integrity sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw== - dependencies: - chalk "^2.1.0" - -"@changesets/parse@^0.3.16": - version "0.3.16" - resolved "https://registry.yarnpkg.com/@changesets/parse/-/parse-0.3.16.tgz#f8337b70aeb476dc81745ab3294022909bc4a84a" - integrity sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg== - dependencies: - "@changesets/types" "^5.2.1" - js-yaml "^3.13.1" - -"@changesets/pre@^1.0.14": - version "1.0.14" - resolved "https://registry.yarnpkg.com/@changesets/pre/-/pre-1.0.14.tgz#9df73999a4d15804da7381358d77bb37b00ddf0f" - integrity sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/errors" "^0.1.4" - "@changesets/types" "^5.2.1" - "@manypkg/get-packages" "^1.1.3" - fs-extra "^7.0.1" - -"@changesets/read@^0.5.9": - version "0.5.9" - resolved "https://registry.yarnpkg.com/@changesets/read/-/read-0.5.9.tgz#a1b63a82b8e9409738d7a0f9cc39b6d7c28cbab0" - integrity sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/git" "^2.0.0" - "@changesets/logger" "^0.0.5" - "@changesets/parse" "^0.3.16" - "@changesets/types" "^5.2.1" - chalk "^2.1.0" - fs-extra "^7.0.1" - p-filter "^2.1.0" - -"@changesets/types@^4.0.1": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@changesets/types/-/types-4.1.0.tgz#fb8f7ca2324fd54954824e864f9a61a82cb78fe0" - integrity sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw== - -"@changesets/types@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@changesets/types/-/types-5.2.1.tgz#a228c48004aa8a93bce4be2d1d31527ef3bf21f6" - integrity sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg== - -"@changesets/write@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@changesets/write/-/write-0.2.3.tgz#baf6be8ada2a67b9aba608e251bfea4fdc40bc63" - integrity sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw== - dependencies: - "@babel/runtime" "^7.20.1" - "@changesets/types" "^5.2.1" - fs-extra "^7.0.1" - human-id "^1.0.2" - prettier "^2.7.1" - -"@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" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@ensdomains/address-encoder@^0.1.7": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz#f948c485443d9ef7ed2c0c4790e931c33334d02d" - integrity sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg== - dependencies: - bech32 "^1.1.3" - blakejs "^1.1.0" - bn.js "^4.11.8" - bs58 "^4.0.1" - crypto-addr-codec "^0.1.7" - nano-base32 "^1.0.1" - ripemd160 "^2.0.2" - -"@ensdomains/ens@0.4.5": - version "0.4.5" - resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.5.tgz#e0aebc005afdc066447c6e22feb4eda89a5edbfc" - integrity sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw== - dependencies: - bluebird "^3.5.2" - eth-ens-namehash "^2.0.8" - solc "^0.4.20" - testrpc "0.0.1" - web3-utils "^1.0.0-beta.31" - -"@ensdomains/ensjs@^2.0.1": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@ensdomains/ensjs/-/ensjs-2.1.0.tgz#0a7296c1f3d735ef019320d863a7846a0760c460" - integrity sha512-GRbGPT8Z/OJMDuxs75U/jUNEC0tbL0aj7/L/QQznGYKm/tiasp+ndLOaoULy9kKJFC0TBByqfFliEHDgoLhyog== - dependencies: - "@babel/runtime" "^7.4.4" - "@ensdomains/address-encoder" "^0.1.7" - "@ensdomains/ens" "0.4.5" - "@ensdomains/resolver" "0.2.4" - content-hash "^2.5.2" - eth-ens-namehash "^2.0.8" - ethers "^5.0.13" - js-sha3 "^0.8.0" - -"@ensdomains/resolver@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" - integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== - -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@ethereumjs/common@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" - integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.1" - -"@ethereumjs/common@^2.5.0": - version "2.6.5" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" - integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.5" - -"@ethereumjs/tx@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00" - integrity sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog== - dependencies: - "@ethereumjs/common" "^2.5.0" - ethereumjs-util "^7.1.2" - -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.7", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.4.7", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@fvictorio/tabtab@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@fvictorio/tabtab/-/tabtab-0.0.3.tgz#1b97981424386490fa2a5818706d2afd1f6e4659" - integrity sha512-bT/BSy8MJThrTebqTCjXRnGSgZWthHLigZ4k2AvfNtC79vPyBS1myaxw8gRU6RxIcdDD3HBtm7pOsOoyC086Zg== - dependencies: - debug "^4.1.1" - enquirer "^2.3.4" - minimist "^1.2.0" - mkdirp "^1.0.3" - untildify "^4.0.0" - -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/types@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" - integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^13.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== - dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" - -"@manypkg/find-root@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@manypkg/find-root/-/find-root-1.1.0.tgz#a62d8ed1cd7e7d4c11d9d52a8397460b5d4ad29f" - integrity sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA== - dependencies: - "@babel/runtime" "^7.5.5" - "@types/node" "^12.7.1" - find-up "^4.1.0" - fs-extra "^8.1.0" - -"@manypkg/get-packages@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@manypkg/get-packages/-/get-packages-1.1.3.tgz#e184db9bba792fa4693de4658cfb1463ac2c9c47" - integrity sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A== - dependencies: - "@babel/runtime" "^7.5.5" - "@changesets/types" "^4.0.1" - "@manypkg/find-root" "^1.1.0" - fs-extra "^8.1.0" - globby "^11.0.0" - read-yaml-file "^1.1.0" - -"@metamask/eth-sig-util@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" - integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^6.2.1" - ethjs-util "^0.1.6" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.1" - -"@morgan-stanley/ts-mocking-bird@^0.6.2": - version "0.6.4" - resolved "https://registry.yarnpkg.com/@morgan-stanley/ts-mocking-bird/-/ts-mocking-bird-0.6.4.tgz#2e4b60d42957bab3b50b67dbf14c3da2f62a39f7" - integrity sha512-57VJIflP8eR2xXa9cD1LUawh+Gh+BVQfVu0n6GALyg/AqV/Nz25kDRvws3i9kIe1PTrbsZZOYpsYp6bXPd6nVA== - dependencies: - lodash "^4.17.16" - uuid "^7.0.3" - -"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" - integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== - -"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" - integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@nomicfoundation/ethereumjs-block@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz#6f89664f55febbd723195b6d0974773d29ee133d" - integrity sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - ethereum-cryptography "0.1.3" - ethers "^5.7.1" - -"@nomicfoundation/ethereumjs-blockchain@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz#80e0bd3535bfeb9baa29836b6f25123dab06a726" - integrity sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-ethash" "3.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - abstract-level "^1.0.3" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - level "^8.0.0" - lru-cache "^5.1.1" - memory-level "^1.0.0" - -"@nomicfoundation/ethereumjs-common@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz#4702d82df35b07b5407583b54a45bf728e46a2f0" - integrity sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g== - dependencies: - "@nomicfoundation/ethereumjs-util" "9.0.1" - crc-32 "^1.2.0" - -"@nomicfoundation/ethereumjs-ethash@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz#65ca494d53e71e8415c9a49ef48bc921c538fc41" - integrity sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - abstract-level "^1.0.3" - bigint-crypto-utils "^3.0.23" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-evm@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz#f35681e203363f69ce2b3d3bf9f44d4e883ca1f1" - integrity sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ== - dependencies: - "@ethersproject/providers" "^5.7.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/ethereumjs-rlp@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz#0b30c1cf77d125d390408e391c4bb5291ef43c28" - integrity sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ== - -"@nomicfoundation/ethereumjs-statemanager@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz#8824a97938db4471911e2d2f140f79195def5935" - integrity sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - ethers "^5.7.1" - js-sdsl "^4.1.4" - -"@nomicfoundation/ethereumjs-trie@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz#662c55f6b50659fd4b22ea9f806a7401cafb7717" - integrity sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - "@types/readable-stream" "^2.3.13" - ethereum-cryptography "0.1.3" - readable-stream "^3.6.0" - -"@nomicfoundation/ethereumjs-tx@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz#7629dc2036b4a33c34e9f0a592b43227ef4f0c7d" - integrity sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w== - dependencies: - "@chainsafe/ssz" "^0.9.2" - "@ethersproject/providers" "^5.7.2" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-util@9.0.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz#530cda8bae33f8b5020a8f199ed1d0a2ce48ec89" - integrity sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA== - dependencies: - "@chainsafe/ssz" "^0.10.0" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-vm@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz#7d035e0993bcad10716c8b36e61dfb87fa3ca05f" - integrity sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-blockchain" "7.0.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-evm" "2.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-statemanager" "2.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz#83a7367342bd053a76d04bbcf4f373fef07cf760" - integrity sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw== - -"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz#1225f7da647ae1ad25a87125664704ecc0af6ccc" - integrity sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA== - -"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.0.tgz#dbc052dcdfd50ae50fd5ae1788b69b4e0fa40040" - integrity sha512-WFCZYMv86WowDA4GiJKnebMQRt3kCcFqHeIomW6NMyqiKqhK1kIZCxSLDYsxqlx396kKLPN1713Q1S8tu68GKg== - -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.0.tgz#e6b2eea633995b557e74e881d2a43eab4760903d" - integrity sha512-DTw6MNQWWlCgc71Pq7CEhEqkb7fZnS7oly13pujs4cMH1sR0JzNk90Mp1zpSCsCs4oKan2ClhMlLKtNat/XRKQ== - -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.0.tgz#af81107f5afa794f19988a368647727806e18dc4" - integrity sha512-wUpUnR/3GV5Da88MhrxXh/lhb9kxh9V3Jya2NpBEhKDIRCDmtXMSqPMXHZmOR9DfCwCvG6vLFPr/+YrPCnUN0w== - -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz#6877e1da1a06a9f08446070ab6e0a5347109f868" - integrity sha512-lR0AxK1x/MeKQ/3Pt923kPvwigmGX3OxeU5qNtQ9pj9iucgk4PzhbS3ruUeSpYhUxG50jN4RkIGwUMoev5lguw== - -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.0.tgz#bb6cd83a0c259eccef4183796b6329a66cf7ebd9" - integrity sha512-A1he/8gy/JeBD3FKvmI6WUJrGrI5uWJNr5Xb9WdV+DK0F8msuOqpEByLlnTdLkXMwW7nSl3awvLezOs9xBHJEg== - -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.0.tgz#9d4bca1cc9a1333fde985675083b0b7d165f6076" - integrity sha512-7x5SXZ9R9H4SluJZZP8XPN+ju7Mx+XeUMWZw7ZAqkdhP5mK19I4vz3x0zIWygmfE8RT7uQ5xMap0/9NPsO+ykw== - -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.0.tgz#0db5bfc6aa952bea4098d8d2c8947b4e5c4337ee" - integrity sha512-m7w3xf+hnE774YRXu+2mGV7RiF3QJtUoiYU61FascCkQhX3QMQavh7saH/vzb2jN5D24nT/jwvaHYX/MAM9zUw== - -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.0.tgz#2e0f39a2924dcd77db6b419828595e984fabcb33" - integrity sha512-xCuybjY0sLJQnJhupiFAXaek2EqF0AP0eBjgzaalPXSNvCEN6ZYHvUzdA50ENDVeSYFXcUsYf3+FsD3XKaeptA== - -"@nomicfoundation/solidity-analyzer@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz#e5ddc43ad5c0aab96e5054520d8e16212e125f50" - integrity sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg== - optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.0" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.0" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.0" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.0" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.0" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.0" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.0" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.0" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.0" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.0" - -"@nomiclabs/hardhat-etherscan@^3.0.0": - version "3.1.7" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz#72e3d5bd5d0ceb695e097a7f6f5ff6fcbf062b9a" - integrity sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ== - dependencies: - "@ethersproject/abi" "^5.1.2" - "@ethersproject/address" "^5.0.2" - cbor "^8.1.0" - chalk "^2.4.2" - debug "^4.1.1" - fs-extra "^7.0.1" - lodash "^4.17.11" - semver "^6.3.0" - table "^6.8.0" - undici "^5.14.0" - -"@nomiclabs/truffle-contract@^4.2.23": - version "4.5.10" - resolved "https://registry.yarnpkg.com/@nomiclabs/truffle-contract/-/truffle-contract-4.5.10.tgz#52adcca1068647e1c2b44bf0e6a89fc4ad7f9213" - integrity sha512-nF/6InFV+0hUvutyFgsdOMCoYlr//2fJbRER4itxYtQtc4/O1biTwZIKRu+5l2J5Sq6LU2WX7vZHtDgQdhWxIQ== - dependencies: - "@ensdomains/ensjs" "^2.0.1" - "@truffle/blockchain-utils" "^0.1.3" - "@truffle/contract-schema" "^3.4.7" - "@truffle/debug-utils" "^6.0.22" - "@truffle/error" "^0.1.0" - "@truffle/interface-adapter" "^0.5.16" - bignumber.js "^7.2.1" - ethereum-ens "^0.8.0" - ethers "^4.0.0-beta.1" - source-map-support "^0.5.19" - -"@scure/base@~1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" - integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== - -"@scure/bip32@1.1.5": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" - integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== - dependencies: - "@noble/hashes" "~1.2.0" - "@noble/secp256k1" "~1.7.0" - "@scure/base" "~1.1.0" - -"@scure/bip39@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" - integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== - dependencies: - "@noble/hashes" "~1.2.0" - "@scure/base" "~1.1.0" - -"@sentry/core@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" - integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/hub@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" - integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== - dependencies: - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/minimal@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" - integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@sentry/node@^5.18.1": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" - integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== - dependencies: - "@sentry/core" "5.30.0" - "@sentry/hub" "5.30.0" - "@sentry/tracing" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/tracing@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" - integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/types@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" - integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== - -"@sentry/utils@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" - integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== - dependencies: - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@sinonjs/commons@^1.6.0", "@sinonjs/commons@^1.7.0", "@sinonjs/commons@^1.8.1": - version "1.8.6" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" - integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^6.0.0", "@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@sinonjs/samsam@^5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-5.3.1.tgz#375a45fe6ed4e92fca2fb920e007c48232a6507f" - integrity sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg== - dependencies: - "@sinonjs/commons" "^1.6.0" - lodash.get "^4.4.2" - type-detect "^4.0.8" - -"@sinonjs/text-encoding@^0.7.1": - version "0.7.2" - resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz#5981a8db18b56ba38ef0efb7d995b12aa7b51918" - integrity sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ== - -"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.1": - version "0.14.5" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" - integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== - dependencies: - antlr4ts "^0.5.0-alpha.4" - -"@solidity-parser/parser@^0.15.0": - version "0.15.0" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.15.0.tgz#1d359be40be84f174dd616ccfadcf43346c6bf63" - integrity sha512-5UFJJTzWi1hgFk6aGCZ5rxG2DJkCJOzJ74qg7UkWSNCDSigW+CJLoYUb5bLiKrtI34Nr9rpFSUNHfkqtlL+N/w== - dependencies: - antlr4ts "^0.5.0-alpha.4" - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@szmarczak/http-timer@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" - integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== - dependencies: - defer-to-connect "^2.0.1" - -"@truffle/abi-utils@^0.3.7": - version "0.3.7" - resolved "https://registry.yarnpkg.com/@truffle/abi-utils/-/abi-utils-0.3.7.tgz#db2fa6080af712709021ffc19eb3d75baa8c146d" - integrity sha512-IhX+Hxu9fTEOxR+34r3Tt/AJS1gkqdEBZDzERG/9X43bLGzu5pLWzDgDBpNDqYM3lTICIg3UHfqLdUzSC7g4pg== - dependencies: - change-case "3.0.2" - fast-check "3.1.1" - web3-utils "1.8.2" - -"@truffle/blockchain-utils@^0.1.3": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.1.6.tgz#7ea0a16b8135e5aeb688bf3bd014fa8f6ba45adb" - integrity sha512-SldoNRIFSm3+HMBnSc2jFsu5TWDkCN4X6vL3wrd0t6DIeF7nD6EoPPjxwbFSoqCnkkRxMuZeL6sUx7UMJS/wSA== - -"@truffle/codec@^0.14.14": - version "0.14.14" - resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.14.14.tgz#c91cdb8672f11b85272aaac6e07538fe0a96f8f8" - integrity sha512-EP+iTGowElaJJgQI4Ztizmb+hYOHwOv4OiX09sjqX/v/GdmnvyWoS8RGHtERze8DoBi5cs4ZY8vlM3nVDbRv5A== - dependencies: - "@truffle/abi-utils" "^0.3.7" - "@truffle/compile-common" "^0.9.2" - big.js "^6.0.3" - bn.js "^5.1.3" - cbor "^5.2.0" - debug "^4.3.1" - lodash "^4.17.21" - semver "7.3.7" - utf8 "^3.0.0" - web3-utils "1.8.2" - -"@truffle/compile-common@^0.9.2": - version "0.9.2" - resolved "https://registry.yarnpkg.com/@truffle/compile-common/-/compile-common-0.9.2.tgz#da8aed5c9c8da119cb4b7ee5a425d2559a99bfb7" - integrity sha512-n7MF/4/dntccj44RGe3PRMD8Vk46PU8dJtzd1VLAfgokK2Y2N+SjAzDskBnmAydZVWAM315nZIUQsgnY8xoATw== - dependencies: - "@truffle/error" "^0.2.0" - colors "1.4.0" - -"@truffle/contract-schema@^3.4.7": - version "3.4.11" - resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.4.11.tgz#ac5fc8be656b786c2bd5d3a2ca6faeb2949e7ff3" - integrity sha512-wReyVZUPyU9Zy5PSCugBLG1nnruBmRAJ/gmoirQiJ9N2n+s1iGBTY49tkDqFMz3XUUE0kplfdb9YKZJlLkTWzQ== - dependencies: - ajv "^6.10.0" - debug "^4.3.1" - -"@truffle/debug-utils@^6.0.22": - version "6.0.45" - resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-6.0.45.tgz#a4df479872f82d3d314248be43114431469b8792" - integrity sha512-yrEM8znplrVzxczzsvRlFrA56S3KSLD0XZpAQ8nDRd82Omn4Y7AaJtkAoOILjkPHeuBS1bvHm7FjKhszgOe3mg== - dependencies: - "@truffle/codec" "^0.14.14" - "@trufflesuite/chromafi" "^3.0.0" - bn.js "^5.1.3" - chalk "^2.4.2" - debug "^4.3.1" - highlightjs-solidity "^2.0.6" - -"@truffle/error@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.1.1.tgz#e52026ac8ca7180d83443dca73c03e07ace2a301" - integrity sha512-sE7c9IHIGdbK4YayH4BC8i8qMjoAOeg6nUXUDZZp8wlU21/EMpaG+CLx+KqcIPyR+GSWIW3Dm0PXkr2nlggFDA== - -"@truffle/error@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.2.0.tgz#65de6f03f5c041f883cc87677eecf8231428f1ab" - integrity sha512-Fe0/z4WWb7IP2gBnv3l6zqP87Y0kSMs7oiSLakKJq17q3GUunrHSdioKuNspdggxkXIBhEQLhi8C+LJdwmHKWQ== - -"@truffle/interface-adapter@^0.5.16": - version "0.5.28" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.28.tgz#814f8090dc845015d3b43c702aa90fbae3ef72e8" - integrity sha512-xnjWXiOihApI+XLrs0xpw9s+av6Qvrc2lkXAfrBluuKgaJOQIdLVz6vi2Bt6oiTQAoWUkUGa0hne78mxFI2J1w== - dependencies: - bn.js "^5.1.3" - ethers "^4.0.32" - web3 "1.8.2" - -"@trufflesuite/chromafi@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@trufflesuite/chromafi/-/chromafi-3.0.0.tgz#f6956408c1af6a38a6ed1657783ce59504a1eb8b" - integrity sha512-oqWcOqn8nT1bwlPPfidfzS55vqcIDdpfzo3HbU9EnUmcSTX+I8z0UyUFI3tZQjByVJulbzxHxUGS3ZJPwK/GPQ== - dependencies: - camelcase "^4.1.0" - chalk "^2.3.2" - cheerio "^1.0.0-rc.2" - detect-indent "^5.0.0" - highlight.js "^10.4.1" - lodash.merge "^4.6.2" - strip-ansi "^4.0.0" - strip-indent "^2.0.0" - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" - integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== - -"@typechain/ethers-v5@^10.1.0": - version "10.2.0" - resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-10.2.0.tgz#68f5963efb5214cb2d881477228e4b5b315473e1" - integrity sha512-ikaq0N/w9fABM+G01OFmU3U3dNnyRwEahkdvi9mqy1a3XwKiPZaF/lu54OcNaEWnpvEYyhhS0N7buCtLQqC92w== - dependencies: - lodash "^4.17.15" - ts-essentials "^7.0.1" - -"@typechain/hardhat@^6.1.2": - version "6.1.5" - resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-6.1.5.tgz#caad58a1d3e9cd88061a584eb4f4fa763d5dcad1" - integrity sha512-lg7LW4qDZpxFMknp3Xool61Fg6Lays8F8TXdFGBG+MxyYcYU5795P1U2XdStuzGq9S2Dzdgh+1jGww9wvZ6r4Q== - dependencies: - fs-extra "^9.1.0" - -"@types/async-eventemitter@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz#f8e6280e87e8c60b2b938624b0a3530fb3e24712" - integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== - -"@types/bignumber.js@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/bignumber.js/-/bignumber.js-5.0.0.tgz#d9f1a378509f3010a3255e9cc822ad0eeb4ab969" - integrity sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA== - dependencies: - bignumber.js "*" - -"@types/bn.js@^4.11.3": - version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== - dependencies: - "@types/node" "*" - -"@types/bn.js@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" - integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== - dependencies: - "@types/node" "*" - -"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/chai-as-promised@^7.1.3": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz#6e016811f6c7a64f2eed823191c3a6955094e255" - integrity sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ== - dependencies: - "@types/chai" "*" - -"@types/chai@*", "@types/chai@^4.2.0": - version "4.3.4" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.4.tgz#e913e8175db8307d78b4e8fa690408ba6b65dee4" - integrity sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw== - -"@types/ci-info@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/ci-info/-/ci-info-2.0.0.tgz#51848cc0f5c30c064f4b25f7f688bf35825b3971" - integrity sha512-5R2/MHILQLDCzTuhs1j4Qqq8AaKUf7Ma4KSSkCtc12+fMs47zfa34qhto9goxpyX00tQK1zxB885VCiawZ5Qhg== - -"@types/concat-stream@^1.6.0": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" - integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== - dependencies: - "@types/node" "*" - -"@types/debug@^4.1.4": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" - integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== - dependencies: - "@types/ms" "*" - -"@types/find-up@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@types/find-up/-/find-up-2.1.1.tgz#1cd2d240f1ad1f48d32346074724dc3107248a11" - integrity sha512-60LC501bQRN9/3yfVaEEMd7IndaufffL56PBRAejPpUrY304Ps1jfnjNqPw5jmM5R8JHWiKBAe5IHzNcPV41AA== - -"@types/form-data@0.0.33": - version "0.0.33" - resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" - integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== - dependencies: - "@types/node" "*" - -"@types/fs-extra@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.1.0.tgz#2a325ef97901504a3828718c390d34b8426a10a1" - integrity sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ== - dependencies: - "@types/node" "*" - -"@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - -"@types/is-ci@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/is-ci/-/is-ci-3.0.0.tgz#7e8910af6857601315592436f030aaa3ed9783c3" - integrity sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ== - dependencies: - ci-info "^3.1.0" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - 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/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - -"@types/json-schema@^7.0.7", "@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" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/keccak@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/keccak/-/keccak-3.0.1.tgz#1dfad12395f32927cf409707534dd796d57aa84c" - integrity sha512-/MxAVmtyyeOvZ6dGf3ciLwFRuV5M8DRIyYNFGHYI6UyBW4/XqyO0LZw+JFMvaeY3cHItQAkELclBU1x5ank6mg== - dependencies: - "@types/node" "*" - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/lodash.clonedeep@^4.5.7": - version "4.5.7" - resolved "https://registry.yarnpkg.com/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.7.tgz#0e119f582ed6f9e6b373c04a644651763214f197" - integrity sha512-ccNqkPptFIXrpVqUECi60/DFxjNKsfoQxSQsgcBJCX/fuX1wgyQieojkcWH/KpE3xzLoWN/2k+ZeGqIN3paSvw== - dependencies: - "@types/lodash" "*" - -"@types/lodash@*": - version "4.14.194" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.194.tgz#b71eb6f7a0ff11bff59fc987134a093029258a76" - integrity sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g== - -"@types/lodash@^4.14.123": - version "4.14.191" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.191.tgz#09511e7f7cba275acd8b419ddac8da9a6a79e2fa" - integrity sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ== - -"@types/lru-cache@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== - -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - -"@types/mocha@>=9.1.0": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b" - integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== - -"@types/ms@*": - version "0.7.31" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" - integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== - -"@types/node@*": - version "18.13.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.13.0.tgz#0400d1e6ce87e9d3032c19eb6c58205b0d3f7850" - integrity sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg== - -"@types/node@^10.0.3": - version "10.17.60" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" - integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== - -"@types/node@^12.12.6", "@types/node@^12.7.1": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== - -"@types/node@^14.0.0": - version "14.18.36" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.36.tgz#c414052cb9d43fab67d679d5f3c641be911f5835" - integrity sha512-FXKWbsJ6a1hIrRxv+FoukuHnGTgEzKYGi7kilfMae96AL9UNkPFNWJEEYWzdRI9ooIkbr4AKldyuSTLql06vLQ== - -"@types/node@^8.0.0": - version "8.10.66" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" - integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== - dependencies: - "@types/node" "*" - -"@types/prettier@^2.1.1": - version "2.7.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" - integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== - -"@types/qs@^6.2.31", "@types/qs@^6.5.3": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== - -"@types/readable-stream@^2.3.13": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" - integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" - -"@types/resolve@^1.17.1": - version "1.20.2" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" - integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== - -"@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - -"@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== - dependencies: - "@types/node" "*" - -"@types/semver@^6.0.0", "@types/semver@^6.0.2": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.3.tgz#5798ecf1bec94eaa64db39ee52808ec0693315aa" - integrity sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A== - -"@types/semver@^7.3.12": - version "7.3.13" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" - integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== - -"@types/sinon-chai@^3.2.9": - version "3.2.9" - resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.9.tgz#71feb938574bbadcb176c68e5ff1a6014c5e69d4" - integrity sha512-/19t63pFYU0ikrdbXKBWj9PCdnKyTd0Qkz0X91Ta081cYsq90OxYdcWwK/dwEoDa6dtXgj2HJfmzgq+QZTHdmQ== - dependencies: - "@types/chai" "*" - "@types/sinon" "*" - -"@types/sinon@*": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.14.tgz#6bd18b088ea5ef1e5153fa37d0b68e91eff09e22" - integrity sha512-mn72up6cjaMyMuaPaa/AwKf6WtsSRysQC7wxFkCm1XcOKXPM1z+5Y4H5wjIVBz4gdAkjvZxVVfjA6ba1nHr5WQ== - dependencies: - "@types/sinonjs__fake-timers" "*" - -"@types/sinon@^9.0.8": - version "9.0.11" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-9.0.11.tgz#7af202dda5253a847b511c929d8b6dda170562eb" - integrity sha512-PwP4UY33SeeVKodNE37ZlOsR9cReypbMJOhZ7BVE0lB+Hix3efCOxiJWiE5Ia+yL9Cn2Ch72EjFTRze8RZsNtg== - dependencies: - "@types/sinonjs__fake-timers" "*" - -"@types/sinonjs__fake-timers@*": - version "8.1.2" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz#bf2e02a3dbd4aecaf95942ecd99b7402e03fad5e" - integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA== - -"@types/uuid@^8.3.1": - version "8.3.4" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" - integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== - -"@types/ws@^7.2.1": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^13.0.0": - version "13.0.12" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092" - integrity sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@4.29.2": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.2.tgz#f54dc0a32b8f61c6024ab8755da05363b733838d" - integrity sha512-x4EMgn4BTfVd9+Z+r+6rmWxoAzBaapt4QFqE+d8L8sUtYZYLDTK6VG/y/SMMWA5t1/BVU5Kf+20rX4PtWzUYZg== - dependencies: - "@typescript-eslint/experimental-utils" "4.29.2" - "@typescript-eslint/scope-manager" "4.29.2" - debug "^4.3.1" - functional-red-black-tree "^1.0.1" - regexpp "^3.1.0" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/eslint-plugin@5.53.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz#24b8b4a952f3c615fe070e3c461dd852b5056734" - integrity sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw== - dependencies: - "@typescript-eslint/scope-manager" "5.53.0" - "@typescript-eslint/type-utils" "5.53.0" - "@typescript-eslint/utils" "5.53.0" - debug "^4.3.4" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - regexpp "^3.2.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/experimental-utils@4.29.2": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.2.tgz#5f67fb5c5757ef2cb3be64817468ba35c9d4e3b7" - integrity sha512-P6mn4pqObhftBBPAv4GQtEK7Yos1fz/MlpT7+YjH9fTxZcALbiiPKuSIfYP/j13CeOjfq8/fr9Thr2glM9ub7A== - dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.29.2" - "@typescript-eslint/types" "4.29.2" - "@typescript-eslint/typescript-estree" "4.29.2" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/parser@4.29.2": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.29.2.tgz#1c7744f4c27aeb74610c955d3dce9250e95c370a" - integrity sha512-WQ6BPf+lNuwteUuyk1jD/aHKqMQ9jrdCn7Gxt9vvBnzbpj7aWEf+aZsJ1zvTjx5zFxGCt000lsbD9tQPEL8u6g== - dependencies: - "@typescript-eslint/scope-manager" "4.29.2" - "@typescript-eslint/types" "4.29.2" - "@typescript-eslint/typescript-estree" "4.29.2" - debug "^4.3.1" - -"@typescript-eslint/parser@5.53.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.53.0.tgz#a1f2b9ae73b83181098747e96683f1b249ecab52" - integrity sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ== - dependencies: - "@typescript-eslint/scope-manager" "5.53.0" - "@typescript-eslint/types" "5.53.0" - "@typescript-eslint/typescript-estree" "5.53.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@4.29.2": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.29.2.tgz#442b0f029d981fa402942715b1718ac7fcd5aa1b" - integrity sha512-mfHmvlQxmfkU8D55CkZO2sQOueTxLqGvzV+mG6S/6fIunDiD2ouwsAoiYCZYDDK73QCibYjIZmGhpvKwAB5BOA== - dependencies: - "@typescript-eslint/types" "4.29.2" - "@typescript-eslint/visitor-keys" "4.29.2" - -"@typescript-eslint/scope-manager@5.53.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz#42b54f280e33c82939275a42649701024f3fafef" - integrity sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w== - dependencies: - "@typescript-eslint/types" "5.53.0" - "@typescript-eslint/visitor-keys" "5.53.0" - -"@typescript-eslint/type-utils@5.53.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz#41665449935ba9b4e6a1ba6e2a3f4b2c31d6cf97" - integrity sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw== - dependencies: - "@typescript-eslint/typescript-estree" "5.53.0" - "@typescript-eslint/utils" "5.53.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@4.29.2": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.2.tgz#fc0489c6b89773f99109fb0aa0aaddff21f52fcd" - integrity sha512-K6ApnEXId+WTGxqnda8z4LhNMa/pZmbTFkDxEBLQAbhLZL50DjeY0VIDCml/0Y3FlcbqXZrABqrcKxq+n0LwzQ== - -"@typescript-eslint/types@5.53.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.53.0.tgz#f79eca62b97e518ee124086a21a24f3be267026f" - integrity sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A== - -"@typescript-eslint/typescript-estree@4.29.2": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.2.tgz#a0ea8b98b274adbb2577100ba545ddf8bf7dc219" - integrity sha512-TJ0/hEnYxapYn9SGn3dCnETO0r+MjaxtlWZ2xU+EvytF0g4CqTpZL48SqSNn2hXsPolnewF30pdzR9a5Lj3DNg== - dependencies: - "@typescript-eslint/types" "4.29.2" - "@typescript-eslint/visitor-keys" "4.29.2" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" - -"@typescript-eslint/typescript-estree@5.53.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz#bc651dc28cf18ab248ecd18a4c886c744aebd690" - integrity sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w== - dependencies: - "@typescript-eslint/types" "5.53.0" - "@typescript-eslint/visitor-keys" "5.53.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.53.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.53.0.tgz#e55eaad9d6fffa120575ffaa530c7e802f13bce8" - integrity sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g== - dependencies: - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.53.0" - "@typescript-eslint/types" "5.53.0" - "@typescript-eslint/typescript-estree" "5.53.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@4.29.2": - version "4.29.2" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.2.tgz#d2da7341f3519486f50655159f4e5ecdcb2cd1df" - integrity sha512-bDgJLQ86oWHJoZ1ai4TZdgXzJxsea3Ee9u9wsTAvjChdj2WLcVsgWYAPeY7RQMn16tKrlQaBnpKv7KBfs4EQag== - dependencies: - "@typescript-eslint/types" "4.29.2" - eslint-visitor-keys "^2.0.0" - -"@typescript-eslint/visitor-keys@5.53.0": - version "5.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz#8a5126623937cdd909c30d8fa72f79fa56cc1a9f" - integrity sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w== - dependencies: - "@typescript-eslint/types" "5.53.0" - eslint-visitor-keys "^3.3.0" - -abbrev@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== - -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -abortcontroller-polyfill@^1.7.3: - version "1.7.5" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" - integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== - -abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" - integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== - dependencies: - buffer "^6.0.3" - catering "^2.1.0" - is-buffer "^2.0.5" - level-supports "^4.0.0" - level-transcoder "^1.0.1" - module-error "^1.0.1" - queue-microtask "^1.2.3" - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.3.1: - 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: - 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@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.4.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -address@^1.0.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" - integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== - -adm-zip@^0.4.16: - version "0.4.16" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" - integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== - -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - -agent-base@6: - 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" - -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@^5.1.1: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw== - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.6: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== - -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-colors@^4.1.1, ansi-colors@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.3.0: - 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-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - -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-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.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@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" - integrity sha512-3iF4FIKdxaVYT3JqQuY3Wat/T2t7TRbbQ94Fu50ZUCbLy4TFbTzr90NOHQodQkNqmeEGCw8WbeP78WNi6SKYUA== - -antlr4@4.7.1, antlr4@^4.11.0, antlr4@~4.8.0: - version "4.7.1" - resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" - integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== - -antlr4ts@^0.5.0-alpha.4: - version "0.5.0-alpha.4" - resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" - integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.1, anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -append-transform@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" - integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== - dependencies: - default-require-extensions "^3.0.0" - -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== - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-back@^3.0.1, array-back@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" - integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== - -array-back@^4.0.1, array-back@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" - integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-includes@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" - integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - get-intrinsic "^1.1.3" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== - -array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.4: - version "1.3.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" - integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-shim-unscopables "^1.0.0" - -array.prototype.reduce@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" - integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== - -asap@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -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== - -ast-parents@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" - integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== - -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== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@1.x: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== - -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== - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== - -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2, base-x@^3.0.8: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -bech32@1.1.4, bech32@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -better-path-resolve@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/better-path-resolve/-/better-path-resolve-1.0.0.tgz#13a35a1104cdd48a7b74bf8758f96a1ee613f99d" - integrity sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g== - dependencies: - is-windows "^1.0.0" - -big-integer@1.6.36: - version "1.6.36" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" - integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== - -big.js@^6.0.3: - version "6.2.1" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.1.tgz#7205ce763efb17c2e41f26f121c420c6a7c2744f" - integrity sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ== - -bigint-crypto-utils@^3.0.23: - version "3.1.8" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.1.8.tgz#e2e0f40cf45488f9d7f0e32ff84152aa73819d5d" - integrity sha512-+VMV9Laq8pXLBKKKK49nOoq9bfR3j7NNQAtbA617a4nw9bVLo8rsqkKMBgM2AJWlNX9fEIyYaYX+d0laqYV4tw== - dependencies: - bigint-mod-arith "^3.1.0" - -bigint-mod-arith@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz#658e416bc593a463d97b59766226d0a3021a76b1" - integrity sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ== - -bignumber.js@*, bignumber.js@^9.0.0, bignumber.js@^9.0.1, bignumber.js@^9.0.2: - version "9.1.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" - integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== - -bignumber.js@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" - integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== - -"bignumber.js@git+https://github.com/frozeman/bignumber.js-nolookahead.git": - version "2.0.7" - resolved "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934" - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -blakejs@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn-str-256@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/bn-str-256/-/bn-str-256-1.9.1.tgz#898cebee70a3edc3968f97b4cebbc4771025aa82" - integrity sha512-u3muv3WO5sYv9nUQsPnDGLg731yNt/MOlKPK5pmBVqClcl7tY97tyfKxw8ed44HVrpi+7dkgJgQpbXP47a3GoQ== - dependencies: - decimal.js-light "^2.5.0" - lodash "^4.17.11" - -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.1.0, bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.1, body-parser@^1.16.0: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.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, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -breakword@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/breakword/-/breakword-1.0.5.tgz#fd420a417f55016736b5b615161cae1c8f819810" - integrity sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg== - dependencies: - wcwidth "^1.0.1" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-level@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" - integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.1" - module-error "^1.0.2" - run-parallel-limit "^1.1.0" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserslist@^4.21.3: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== - dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" - -bs58@^4.0.0, bs58@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58check@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-to-arraybuffer@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" - integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer@6.0.3, buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.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" - -bufferutil@^4.0.1: - version "4.0.7" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" - integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== - dependencies: - node-gyp-build "^4.3.0" - -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-lookup@^6.0.4: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" - integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -caching-transform@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" - integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== - dependencies: - hasha "^5.0.0" - make-dir "^3.0.0" - package-hash "^4.0.0" - write-file-atomic "^3.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w== - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg== - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001449: - version "1.0.30001480" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz#9bbd35ee44c2480a1e3a3b9f4496f5066817164a" - integrity sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ== - -case@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" - integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== - -caseless@^0.12.0, caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -catering@^2.1.0, catering@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - -cbor@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== - dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" - -cbor@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== - dependencies: - nofilter "^3.1.0" - -chai-as-promised@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" - integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== - dependencies: - check-error "^1.0.2" - -chai@^4.2.0: - 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@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" - integrity sha512-sQfYDlfv2DGVtjdoQqxS0cEZDroyG8h6TamA6rvxwlrU5BaSLDx9xhatBYl2pxZ7gmpNaPFVwBtdGdu5rQ+tYQ== - dependencies: - ansi-styles "~1.0.0" - has-color "~0.1.0" - strip-ansi "~0.1.0" - -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -change-case@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.2.tgz#fd48746cce02f03f0a672577d1d3a8dc2eceb037" - integrity sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA== - dependencies: - camel-case "^3.0.0" - constant-case "^2.0.0" - dot-case "^2.1.0" - header-case "^1.0.0" - is-lower-case "^1.1.0" - is-upper-case "^1.1.0" - lower-case "^1.1.1" - lower-case-first "^1.0.0" - no-case "^2.3.2" - param-case "^2.1.0" - pascal-case "^2.0.0" - path-case "^2.1.0" - sentence-case "^2.1.0" - snake-case "^2.1.0" - swap-case "^1.1.0" - title-case "^2.1.0" - upper-case "^1.1.1" - upper-case-first "^1.1.0" - -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== - -"charenc@>= 0.0.1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -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== - -cheerio-select@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" - integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== - dependencies: - boolbase "^1.0.0" - css-select "^5.1.0" - css-what "^6.1.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - -cheerio@^1.0.0-rc.2: - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== - dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" - parse5-htmlparser2-tree-adapter "^7.0.0" - -chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.2.0" - optionalDependencies: - fsevents "~2.1.1" - -chokidar@3.5.3, chokidar@^3.4.0: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-info@^3.1.0, ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -cids@^0.7.1: - version "0.7.5" - resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" - integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== - dependencies: - buffer "^5.5.0" - class-is "^1.1.0" - multibase "~0.6.0" - multicodec "^1.0.0" - multihashes "~0.4.15" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -class-is@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" - integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== - -classic-level@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.2.0.tgz#2d52bdec8e7a27f534e67fdeb890abef3e643c27" - integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.0" - module-error "^1.0.1" - napi-macros "~2.0.0" - node-gyp-build "^4.3.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-table3@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -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" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.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== - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colors@1.4.0, colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - 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" - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - -command-line-args@^5.1.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" - integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== - dependencies: - array-back "^3.1.0" - find-replace "^3.0.0" - lodash.camelcase "^4.3.0" - typical "^4.0.0" - -command-line-usage@^6.1.0: - version "6.1.3" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" - integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== - dependencies: - array-back "^4.0.2" - chalk "^2.4.2" - table-layout "^1.0.2" - typical "^5.2.0" - -commander@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - -commander@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.0.tgz#71797971162cd3cf65f0b9d24eb28f8d303acdf1" - integrity sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA== - -commander@^2.19.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -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== - -concat-stream@^1.6.0, concat-stream@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -constant-case@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" - integrity sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ== - dependencies: - snake-case "^2.1.0" - upper-case "^1.1.1" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-hash@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" - integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== - dependencies: - cids "^0.7.1" - multicodec "^0.5.5" - multihashes "^0.4.15" - -content-type@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -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== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -cookiejar@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" - integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -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== - -cors@^2.8.1: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -cosmiconfig@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.0.tgz#947e174c796483ccf0a48476c24e4fefb7e1aea8" - integrity sha512-0tLZ9URlPGU7JsKq0DQOQ3FoRsYX8xDZ7xMiATQfaiGMz7EHowNkbU9u1coAOmnh9p/1ySpm0RB3JNWRXM5GCg== - dependencies: - import-fresh "^3.2.1" - js-yaml "^4.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-fetch@^3.1.4: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - -cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -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== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -"crypt@>= 0.0.1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -crypto-addr-codec@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz#e16cea892730178fe25a38f6d15b680cab3124ae" - integrity sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg== - dependencies: - base-x "^3.0.8" - big-integer "1.6.36" - blakejs "^1.1.0" - bs58 "^4.0.1" - ripemd160-min "0.0.6" - safe-buffer "^5.2.0" - sha3 "^2.1.1" - -crypto-js@^3.1.4, crypto-js@^3.1.9-1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" - integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== - -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -csv-generate@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-3.4.3.tgz#bc42d943b45aea52afa896874291da4b9108ffff" - integrity sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw== - -csv-parse@^4.16.3: - version "4.16.3" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" - integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== - -csv-stringify@^5.6.5: - version "5.6.5" - resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00" - integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A== - -csv@^5.5.0: - version "5.5.3" - resolved "https://registry.yarnpkg.com/csv/-/csv-5.5.3.tgz#cd26c1e45eae00ce6a9b7b27dcb94955ec95207d" - integrity sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g== - dependencies: - csv-generate "^3.4.3" - csv-parse "^4.16.3" - csv-stringify "^5.6.5" - stream-transform "^2.1.3" - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -date-time@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/date-time/-/date-time-0.1.1.tgz#ed2f6d93d9790ce2fd66d5b5ff3edd5bbcbf3b07" - integrity sha512-p4psdkgdNA6x0600SKbfWiOomNb33ADBMRHf49GMhYVgJsPefZlMSLXXVWWUpbqSxB3DL5/cxKa6a8i3XPK5Xg== - -death@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" - integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== - -debug@2.6.9, debug@^2.2.0, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, 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" - -debug@^3.1.0, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" - integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -decimal.js-light@^2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" - integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-eql@^4.0.1, 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, 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== - -default-require-extensions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.1.tgz#bfae00feeaeada68c2ae256c62540f60b80625bd" - integrity sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw== - dependencies: - strip-bom "^4.0.0" - -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" - -defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -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== - -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== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== - -detect-indent@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" - integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== - -detect-port@^1.3.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" - integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== - dependencies: - address "^1.0.1" - debug "4" - -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -diff@^4.0.1, diff@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -difflib@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" - integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== - dependencies: - heap ">= 0.2.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== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - -domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.1" - -dot-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee" - integrity sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug== - dependencies: - no-case "^2.2.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.284: - version "1.4.367" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.367.tgz#d9ddc529ba2315fc852b722c359e4a40e86aa742" - integrity sha512-mNuDxb+HpLhPGUKrg0hSxbTjHWw8EziwkwlJNkFUj3W60ypigLDRVz04vU+VRsJPi8Gub+FDhYUpuTm9xiEwRQ== - -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.0, enquirer@^2.3.4, enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" - integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== - -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== - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" - integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.4" - is-array-buffer "^3.0.1" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== - dependencies: - has "^1.0.3" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-error@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^4.2.8: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -eslint-config-prettier@8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== - -eslint-import-resolver-node@^0.3.6: - version "0.3.7" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" - integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== - dependencies: - debug "^3.2.7" - is-core-module "^2.11.0" - resolve "^1.22.1" - -eslint-module-utils@^2.6.2: - version "2.7.4" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" - integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== - dependencies: - debug "^3.2.7" - -eslint-plugin-import@2.24.1: - version "2.24.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.24.1.tgz#64aba8b567a1ba9921d5465586e86c491b8e2135" - integrity sha512-KSFWhNxPH8OGJwpRJJs+Z7I0a13E2iFQZJIvSnCu6KUs4qmgAm3xN9GYBCSoiGWmwA7gERZPXqYQjcoCROnYhQ== - dependencies: - array-includes "^3.1.3" - array.prototype.flat "^1.2.4" - debug "^2.6.9" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.6.2" - find-up "^2.0.0" - has "^1.0.3" - is-core-module "^2.6.0" - minimatch "^3.0.4" - object.values "^1.1.4" - pkg-up "^2.0.0" - read-pkg-up "^3.0.0" - resolve "^1.20.0" - tsconfig-paths "^3.10.1" - -eslint-plugin-no-only-tests@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.0.0.tgz#026cbc8cb069c8da6b7e19d03654be7ad49893f6" - integrity sha512-I0PeXMs1vu21ap45hey4HQCJRqpcoIvGcNTPJe+UhUm8TwjQ6//mCrDqF8q0WS6LgmRDwQ4ovQej0AQsAHb5yg== - -eslint-plugin-prettier@3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" - integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" - integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== - -eslint@^7.29.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@2.7.x, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== - -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.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.0, eth-ens-namehash@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" - integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== - dependencies: - idna-uts46-hx "^2.3.1" - js-sha3 "^0.5.7" - -eth-gas-reporter@^0.2.25: - version "0.2.25" - resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz#546dfa946c1acee93cb1a94c2a1162292d6ff566" - integrity sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ== - dependencies: - "@ethersproject/abi" "^5.0.0-beta.146" - "@solidity-parser/parser" "^0.14.0" - cli-table3 "^0.5.0" - colors "1.4.0" - ethereum-cryptography "^1.0.3" - ethers "^4.0.40" - fs-readdir-recursive "^1.1.0" - lodash "^4.17.14" - markdown-table "^1.1.3" - mocha "^7.1.1" - req-cwd "^2.0.0" - request "^2.88.0" - request-promise-native "^1.0.5" - sha1 "^1.1.1" - sync-request "^6.0.0" - -eth-lib@0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" - integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - -eth-lib@^0.1.26: - version "0.1.29" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" - integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - nano-json-stream-parser "^0.1.2" - servify "^0.1.12" - ws "^3.0.0" - xhr-request-promise "^0.1.2" - -ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== - dependencies: - js-sha3 "^0.8.0" - -ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" - integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== - dependencies: - "@types/pbkdf2" "^3.0.0" - "@types/secp256k1" "^4.0.1" - blakejs "^1.1.0" - browserify-aes "^1.2.0" - bs58check "^2.1.2" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - -ethereum-cryptography@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" - integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== - dependencies: - "@noble/hashes" "1.2.0" - "@noble/secp256k1" "1.7.1" - "@scure/bip32" "1.1.5" - "@scure/bip39" "1.1.1" - -ethereum-ens@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/ethereum-ens/-/ethereum-ens-0.8.0.tgz#6d0f79acaa61fdbc87d2821779c4e550243d4c57" - integrity sha512-a8cBTF4AWw1Q1Y37V1LSCS9pRY4Mh3f8vCg5cbXCCEJ3eno1hbI/+Ccv9SZLISYpqQhaglP3Bxb/34lS4Qf7Bg== - dependencies: - bluebird "^3.4.7" - eth-ens-namehash "^2.0.0" - js-sha3 "^0.5.7" - pako "^1.0.4" - underscore "^1.8.3" - web3 "^1.0.0-beta.34" - -ethereumjs-abi@^0.6.8: - version "0.6.8" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" - integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== - dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" - -ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - -ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: - version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethers@^4.0.0-beta.1, ethers@^4.0.32, ethers@^4.0.40: - version "4.0.49" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" - integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== - dependencies: - aes-js "3.0.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.4" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - -ethers@^5.0.0, ethers@^5.0.13, ethers@^5.4.7, ethers@^5.7.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - -ethjs-abi@0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/ethjs-abi/-/ethjs-abi-0.1.8.tgz#cd288583ed628cdfadaf8adefa3ba1dbcbca6c18" - integrity sha512-3SIJpF+LCVJrNht9OjSJ7+3B9ABZf6dEATMj1PaslL0BW547Cz6/kGyuDvvrcEBlSsbGpCWYrJX5B8OjhcAMFQ== - dependencies: - bn.js "4.11.6" - js-sha3 "0.5.5" - number-to-bn "1.7.0" - -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - -ethjs-util@0.1.6, ethjs-util@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" - integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== - dependencies: - is-hex-prefixed "1.0.0" - strip-hex-prefix "1.0.0" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - -evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -express@^4.14.0: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extendable-error@^0.1.5: - version "0.1.7" - resolved "https://registry.yarnpkg.com/extendable-error/-/extendable-error-0.1.7.tgz#60b9adf206264ac920058a7395685ae4670c2b96" - integrity sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg== - -external-editor@^3.1.0: - 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" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-check@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-3.1.1.tgz#72c5ae7022a4e86504762e773adfb8a5b0b01252" - integrity sha512-3vtXinVyuUKCKFKYcwXhGE6NtGWkqF8Yh3rvMZNzmwz8EPrgoc/v4pDdLHyLnCyCI5MZpZZkDEwFyXyEONOxpA== - dependencies: - pure-rand "^5.0.1" - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw== - -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" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2, fast-diff@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.0.3, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -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" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-cache-dir@^3.2.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-replace@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" - integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== - dependencies: - array-back "^3.0.1" - -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@5.0.0, find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.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.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" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-yarn-workspace-root2@1.2.16: - version "1.2.16" - resolved "https://registry.yarnpkg.com/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz#60287009dd2f324f59646bdb4b7610a6b301c2a9" - integrity sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA== - dependencies: - micromatch "^4.0.2" - pkg-dir "^4.2.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flat@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== - dependencies: - is-buffer "~2.0.3" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -follow-redirects@^1.12.1, follow-redirects@^1.14.0: - version "1.15.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -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" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data-encoder@1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" - integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== - -form-data@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fp-ts@1.19.3: - version "1.19.3" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" - integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== - -fp-ts@^1.0.0: - version "1.19.5" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" - integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fromentries@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" - integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== - -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.0, fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -ganache-cli@^6.12.2: - version "6.12.2" - resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" - integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== - dependencies: - ethereumjs-util "6.2.1" - source-map-support "0.5.12" - yargs "13.2.4" - -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" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - 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-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-port@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" - integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== - -get-port@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -ghost-testrpc@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" - integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== - dependencies: - chalk "^2.4.2" - node-emoji "^1.10.0" - -glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.1.7: - version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.3: - 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-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -global@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.6.0, globals@^13.9.0: - version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" - integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -globby@^11.0.0, globby@^11.0.3, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4" - integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== - dependencies: - "@sindresorhus/is" "^4.6.0" - "@szmarczak/http-timer" "^5.0.1" - "@types/cacheable-request" "^6.0.2" - "@types/responselike" "^1.0.0" - cacheable-lookup "^6.0.4" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - form-data-encoder "1.7.1" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^2.0.0" - -got@^11.8.5: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.15: - 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== - -graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -handlebars@^4.0.1: - 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" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - -hardhat-gas-reporter@^1.0.8: - version "1.0.9" - resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz#9a2afb354bc3b6346aab55b1c02ca556d0e16450" - integrity sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg== - dependencies: - array-uniq "1.0.3" - eth-gas-reporter "^0.2.25" - sha1 "^1.1.1" - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-color@~0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - integrity sha512-kaNz5OTAYYmt646Hkqw50/qyxP2vFnTVu5AQ1Zmk22Kk5+4Qx6BpO8+u7IKsML5fOsFk0ZT0AcCJNYwcvaLBvw== - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasha@^5.0.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" - integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== - dependencies: - is-stream "^2.0.0" - type-fest "^0.8.0" - -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -header-case@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d" - integrity sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ== - dependencies: - no-case "^2.2.0" - upper-case "^1.1.3" - -"heap@>= 0.2.0": - version "0.2.7" - resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" - integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== - -highlight.js@^10.4.1: - version "10.7.3" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - -highlightjs-solidity@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-2.0.6.tgz#e7a702a2b05e0a97f185e6ba39fd4846ad23a990" - integrity sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -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== - -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== - -htmlparser2@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" - integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - domutils "^3.0.1" - entities "^4.3.0" - -http-basic@^8.1.1: - version "8.1.3" - resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" - integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== - dependencies: - caseless "^0.12.0" - concat-stream "^1.6.2" - http-response-object "^3.0.1" - parse-cache-control "^1.0.1" - -http-cache-semantics@^4.0.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-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-https@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" - integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== - -http-response-object@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" - integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== - dependencies: - "@types/node" "^10.0.3" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -http2-wrapper@^2.1.10: - version "2.2.0" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.0.tgz#b80ad199d216b7d3680195077bd7b9060fa9d7f3" - integrity sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.0" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -human-id@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/human-id/-/human-id-1.0.2.tgz#e654d4b2b0d8b07e45da9f6020d8af17ec0a5df3" - integrity sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw== - -iconv-lite@0.4.24, 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" - -idna-uts46-hx@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" - integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== - dependencies: - punycode "2.1.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@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -immutable@^4.0.0-rc.12: - version "4.2.4" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.2.4.tgz#83260d50889526b4b531a5e293709a77f7c55a2a" - integrity sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, 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: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -internal-slot@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -io-ts@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" - integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== - dependencies: - fp-ts "^1.0.0" - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" - integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-typed-array "^1.1.10" - -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-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^2.0.5, is-buffer@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -is-core-module@^2.11.0, is-core-module@^2.6.0, 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== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-function@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" - integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== - -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - -is-lower-case@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" - integrity sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA== - dependencies: - lower-case "^1.1.0" - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -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-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -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-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-subdir@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-subdir/-/is-subdir-1.2.0.tgz#b791cd28fab5202e91a08280d51d9d7254fd20d4" - integrity sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw== - dependencies: - better-path-resolve "1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -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-upper-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" - integrity sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw== - dependencies: - upper-case "^1.1.0" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-windows@^1.0.0, is-windows@^1.0.2: - 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@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -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== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -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-hook@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" - integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== - dependencies: - append-transform "^2.0.0" - -istanbul-lib-instrument@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-processinfo@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz#366d454cd0dcb7eb6e0e419378e60072c8626169" - integrity sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg== - dependencies: - archy "^1.0.0" - cross-spawn "^7.0.3" - istanbul-lib-coverage "^3.2.0" - p-map "^3.0.0" - rimraf "^3.0.0" - uuid "^8.3.2" - -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-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.2: - 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" - -jest-changed-files@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" - integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== - dependencies: - "@jest/types" "^24.9.0" - execa "^1.0.0" - throat "^4.0.0" - -js-sdsl@^4.1.4: - version "4.3.0" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" - integrity sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ== - -js-sha3@0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.5.tgz#baf0c0e8c54ad5903447df96ade7a4a1bca79a4a" - integrity sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA== - -js-sha3@0.5.7, js-sha3@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== - -js-sha3@0.8.0, js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@3.x, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.6.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@4.1.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -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: - 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== - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -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@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -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== - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -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" - -jsonschema@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" - integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -just-extend@^4.0.2: - version "4.2.1" - resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.2.1.tgz#ef5e589afb61e5d66b24eca749409a8939a8c744" - integrity sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg== - -keccak@^3.0.0, keccak@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" - integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - -keyv@^4.0.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" - integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== - dependencies: - json-buffer "3.0.1" - -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" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== - optionalDependencies: - graceful-fs "^4.1.9" - -kleur@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" - integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== - dependencies: - invert-kv "^1.0.0" - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -level-supports@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" - integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== - -level-transcoder@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" - integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== - dependencies: - buffer "^6.0.3" - module-error "^1.0.1" - -level@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" - integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== - dependencies: - browser-level "^1.0.1" - classic-level "^1.2.0" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -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" - -load-yaml-file@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d" - integrity sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw== - dependencies: - graceful-fs "^4.1.5" - js-yaml "^3.13.0" - pify "^4.0.1" - strip-bom "^3.0.0" - -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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.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" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.assign@^4.0.3, lodash.assign@^4.0.6: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - integrity sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw== - -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== - -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.startcase@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" - integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== - -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.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.16, lodash@^4.17.19, 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@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -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" - -loupe@^2.3.1: - 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" - -lower-case-first@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" - integrity sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA== - dependencies: - lower-case "^1.1.2" - -lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - -make-dir@^3.0.0, make-dir@^3.0.2: - 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== - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.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" - integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - -markdown-table@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" - integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== - -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memory-level@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" - integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== - dependencies: - abstract-level "^1.0.0" - functional-red-black-tree "^1.0.1" - module-error "^1.0.1" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -meow@^6.0.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467" - integrity sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "^4.0.2" - normalize-package-data "^2.5.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.13.1" - yargs-parser "^18.1.3" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge2@^1.2.3, 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== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - 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, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: - 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@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - -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== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: - 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@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^5.0.1: - 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.0.2: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - -mixme@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.5.tgz#bf8f67d8caf10fdb49fd23198fd1fa6d8e406627" - integrity sha512-/6IupbRx32s7jjEwHcycXikJwFD5UujbVNuJFkeKLYje+92OvtuPniF6JhnFm5JCTDUhS+kYK3W/4BWYQYXz7w== - -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== - dependencies: - mkdirp "*" - -mkdirp@*: - version "2.1.3" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.3.tgz#b083ff37be046fd3d6552468c1f0ff44c1545d1f" - integrity sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw== - -mkdirp@0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -mkdirp@0.5.x, mkdirp@^0.5.5: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -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== - -mnemonist@^0.38.0: - version "0.38.5" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" - integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== - dependencies: - obliterator "^2.0.0" - -mocha@7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.1.2.tgz#8e40d198acf91a52ace122cd7599c9ab857b29e6" - integrity sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - -mocha@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -mocha@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" - integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - -mock-fs@^4.1.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" - integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== - -module-error@^1.0.1, module-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" - integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -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.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multibase@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" - integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multibase@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" - integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multicodec@^0.5.5: - version "0.5.7" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" - integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== - dependencies: - varint "^5.0.0" - -multicodec@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" - integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== - dependencies: - buffer "^5.6.0" - varint "^5.0.0" - -multihashes@^0.4.15, multihashes@~0.4.15: - version "0.4.21" - resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" - integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== - dependencies: - buffer "^5.5.0" - multibase "^0.7.0" - varint "^5.0.0" - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nano-base32@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/nano-base32/-/nano-base32-1.0.1.tgz#ba548c879efcfb90da1c4d9e097db4a46c9255ef" - integrity sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw== - -nano-json-stream-parser@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" - integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== - -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - 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== - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -nise@^4.0.4: - version "4.1.0" - resolved "https://registry.yarnpkg.com/nise/-/nise-4.1.0.tgz#8fb75a26e90b99202fa1e63f448f58efbcdedaf6" - integrity sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA== - dependencies: - "@sinonjs/commons" "^1.7.0" - "@sinonjs/fake-timers" "^6.0.0" - "@sinonjs/text-encoding" "^0.7.1" - just-extend "^4.0.2" - path-to-regexp "^1.7.0" - -no-case@^2.2.0, no-case@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - -node-emoji@^1.10.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-environment-flags@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" - integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== - -node-preload@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" - integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== - dependencies: - process-on-spawn "^1.0.0" - -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== - -nofilter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" - integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== - -nofilter@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" - integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== - -nopt@3.x: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, 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" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - -number-to-bn@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - -nyc@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" - integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== - dependencies: - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - caching-transform "^4.0.0" - convert-source-map "^1.7.0" - decamelize "^1.2.0" - find-cache-dir "^3.2.0" - find-up "^4.1.0" - foreground-child "^2.0.0" - get-package-type "^0.1.0" - glob "^7.1.6" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-hook "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-processinfo "^2.0.2" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - make-dir "^3.0.0" - node-preload "^0.2.1" - p-map "^3.0.0" - process-on-spawn "^1.0.0" - resolve-from "^5.0.0" - rimraf "^3.0.0" - signal-exit "^3.0.2" - spawn-wrap "^2.0.0" - test-exclude "^6.0.0" - yargs "^15.0.2" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-keys@^1.0.11, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.getownpropertydescriptors@^2.0.3: - version "2.1.5" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz#db5a9002489b64eef903df81d6623c07e5b4b4d3" - integrity sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw== - dependencies: - array.prototype.reduce "^1.0.5" - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.values@^1.1.4: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -obliterator@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" - integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== - -oboe@2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" - integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== - dependencies: - http-https "^1.0.0" - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@1.x, once@^1.3.0, once@^1.3.1, 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" - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ordinal@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ordinal/-/ordinal-1.0.3.tgz#1a3c7726a61728112f50944ad7c35c06ae3a0d4d" - integrity sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ== - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== - dependencies: - lcid "^1.0.0" - -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -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== - -outdent@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff" - integrity sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q== - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== - -p-filter@^2.1.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-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -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.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" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - 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@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -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== - -package-hash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" - integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== - dependencies: - graceful-fs "^4.1.15" - hasha "^5.0.0" - lodash.flattendeep "^4.4.0" - release-zalgo "^1.0.0" - -pako@^1.0.4: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -param-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w== - dependencies: - no-case "^2.2.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-cache-control@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" - integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== - -parse-headers@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" - integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== - dependencies: - error-ex "^1.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" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-ms@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-0.1.2.tgz#dd3fa25ed6c2efc7bdde12ad9b46c163aa29224e" - integrity sha512-VwMglE9412ifMHcRFEVJePEpreQh90wjIiOdP0UQQGKV4l+QprdKI+p5noXTkmGjznBMb40s+VymcclATAVvYA== - -parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== - dependencies: - domhandler "^5.0.2" - parse5 "^7.0.0" - -parse5@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== - dependencies: - entities "^4.4.0" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e" - integrity sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ== - dependencies: - camel-case "^3.0.0" - upper-case-first "^1.1.0" - -path-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5" - integrity sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q== - dependencies: - no-case "^2.2.0" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== - dependencies: - pinkie-promise "^2.0.0" - -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" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -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== - -path-parse@^1.0.6, path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -pbkdf2@^3.0.17: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -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== - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha512-fjAPuiws93rm7mPUu21RdBnkeZNrbfCFCwfAhPWY+rR3zG0ubpe5cEReHOw5fIbfmsxEV/g2kSxGTATY3Bpnwg== - dependencies: - find-up "^2.1.0" - -pluralize@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" - integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== - -preferred-pm@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.0.3.tgz#1b6338000371e3edbce52ef2e4f65eb2e73586d6" - integrity sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ== - dependencies: - find-up "^5.0.0" - find-yarn-workspace-root2 "1.2.16" - path-exists "^4.0.0" - which-pm "2.0.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" - integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== - -prettier@^2.3.1, prettier@^2.7.1, prettier@^2.8.3: - version "2.8.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3" - integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw== - -pretty-ms@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-0.2.2.tgz#da879a682ff33a37011046f13d627f67c73b84f6" - integrity sha512-ah/vWDJAT0arxQwVcSGp6etaLTZr4IsrXTy/khfjimzdYgSxYWzTMByrtpJUWinAnVY8szDg+qQhsE5MUMz3lQ== - dependencies: - parse-ms "^0.1.0" - -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== - -process-on-spawn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" - integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== - dependencies: - fromentries "^1.2.0" - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise@^8.0.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" - integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== - dependencies: - asap "~2.0.6" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== - -psl@^1.1.28: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -pure-rand@^5.0.1: - version "5.0.5" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-5.0.5.tgz#bda2a7f6a1fc0f284d78d78ca5902f26f2ad35cf" - integrity sha512-BwQpbqxSCBJVpamI6ydzcKqyFmnd5msMWUGvzXLm1aXvusbbgkbOto/EUPM00hjveJEaJtdbhUjKSzWRhQVkaw== - -qs@6.11.0, qs@^6.4.0, qs@^6.7.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -queue-microtask@^1.2.2, queue-microtask@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1, raw-body@^2.4.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw== - dependencies: - find-up "^2.0.0" - read-pkg "^3.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== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.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== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -read-yaml-file@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-yaml-file/-/read-yaml-file-1.1.0.tgz#9362bbcbdc77007cc8ea4519fe1c0b821a7ce0d8" - integrity sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA== - dependencies: - graceful-fs "^4.1.5" - js-yaml "^3.6.1" - pify "^4.0.1" - strip-bom "^3.0.0" - -readable-stream@^2.2.2: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== - dependencies: - picomatch "^2.0.4" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - -recursive-readdir@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" - integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== - dependencies: - minimatch "^3.0.5" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -reduce-flatten@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" - integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== - -regenerator-runtime@^0.13.11: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -regexpp@^3.1.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== - -release-zalgo@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" - integrity sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA== - dependencies: - es6-error "^4.0.1" - -req-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" - integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== - dependencies: - req-from "^2.0.0" - -req-from@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" - integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== - dependencies: - resolve-from "^3.0.0" - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.5: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.79.0, request@^2.88.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - integrity sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q== - -require-from-string@^2.0.0, require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@1.1.x: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== - -resolve@1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.1: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== - dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -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@^2.2.8: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -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== - dependencies: - glob "^7.1.3" - -ripemd160-min@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/ripemd160-min/-/ripemd160-min-0.0.6.tgz#a904b77658114474d02503e819dcc55853b67e62" - integrity sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A== - -ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rlp@^2.2.3, rlp@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - -run-parallel-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" - integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== - dependencies: - queue-microtask "^1.2.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, 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== - -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-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sc-istanbul@^0.4.5: - version "0.4.6" - resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" - integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - -scrypt-js@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" - integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== - -scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.3.7: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.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.2.1, 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" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -sentence-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4" - integrity sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ== - dependencies: - no-case "^2.2.0" - upper-case-first "^1.1.2" - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -servify@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" - integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== - dependencies: - body-parser "^1.16.0" - cors "^2.8.1" - express "^4.14.0" - request "^2.79.0" - xhr "^2.3.3" - -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== - -setimmediate@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" - integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -sha1@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" - integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== - dependencies: - charenc ">= 0.0.1" - crypt ">= 0.0.1" - -sha3@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/sha3/-/sha3-2.1.4.tgz#000fac0fe7c2feac1f48a25e7a31b52a6492cc8f" - integrity sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg== - dependencies: - buffer "6.0.3" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shelljs@^0.8.3, shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - 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== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^2.7.0: - version "2.8.2" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" - integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - -sinon-chai@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.7.0.tgz#cfb7dec1c50990ed18c153f1840721cf13139783" - integrity sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g== - -sinon@^9.0.0: - version "9.2.4" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-9.2.4.tgz#e55af4d3b174a4443a8762fa8421c2976683752b" - integrity sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg== - dependencies: - "@sinonjs/commons" "^1.8.1" - "@sinonjs/fake-timers" "^6.0.1" - "@sinonjs/samsam" "^5.3.1" - diff "^4.0.2" - nise "^4.0.4" - supports-color "^7.1.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -smartwrap@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/smartwrap/-/smartwrap-2.0.2.tgz#7e25d3dd58b51c6ca4aba3a9e391650ea62698a4" - integrity sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA== - dependencies: - array.prototype.flat "^1.2.3" - breakword "^1.0.5" - grapheme-splitter "^1.0.4" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - yargs "^15.1.0" - -snake-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" - integrity sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q== - dependencies: - no-case "^2.2.0" - -solc@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - follow-redirects "^1.12.1" - fs-extra "^0.30.0" - js-sha3 "0.8.0" - memorystream "^0.3.1" - require-from-string "^2.0.0" - semver "^5.5.0" - tmp "0.0.33" - -solc@^0.4.20: - version "0.4.26" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.26.tgz#5390a62a99f40806b86258c737c1cf653cc35cb5" - integrity sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA== - dependencies: - fs-extra "^0.30.0" - memorystream "^0.3.1" - require-from-string "^1.1.0" - semver "^5.3.0" - yargs "^4.7.1" - -solhint@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.4.0.tgz#a7e4f2d73e679cb197a1ca5279aa7534bd323e4d" - integrity sha512-FYEs/LoTxMsWFP/OGsEqR1CBDn3Bn7hrTWsgtjai17MzxITgearIdlo374KKZjjIycu8E2xBcJ+RSWeoBvQmkw== - dependencies: - "@solidity-parser/parser" "^0.15.0" - ajv "^6.12.6" - antlr4 "^4.11.0" - ast-parents "^0.0.1" - chalk "^4.1.2" - commander "^10.0.0" - cosmiconfig "^8.0.0" - fast-diff "^1.2.0" - glob "^8.0.3" - ignore "^5.2.4" - js-yaml "^4.1.0" - lodash "^4.17.21" - pluralize "^8.0.0" - semver "^6.3.0" - strip-ansi "^6.0.1" - table "^6.8.1" - text-table "^0.2.0" - optionalDependencies: - prettier "^2.8.3" - -solidity-coverage@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.2.tgz#bc39604ab7ce0a3fa7767b126b44191830c07813" - integrity sha512-cv2bWb7lOXPE9/SSleDO6czkFiMHgP4NXPj+iW9W7iEKLBk7Cj0AGBiNmGX3V1totl9wjPrT0gHmABZKZt65rQ== - dependencies: - "@ethersproject/abi" "^5.0.9" - "@solidity-parser/parser" "^0.14.1" - chalk "^2.4.2" - death "^1.1.0" - detect-port "^1.3.0" - difflib "^0.2.4" - fs-extra "^8.1.0" - ghost-testrpc "^0.0.2" - global-modules "^2.0.0" - globby "^10.0.1" - jsonschema "^1.2.4" - lodash "^4.17.15" - mocha "7.1.2" - node-emoji "^1.10.0" - pify "^4.0.1" - recursive-readdir "^2.2.2" - sc-istanbul "^0.4.5" - semver "^7.3.4" - shelljs "^0.8.3" - web3-utils "^1.3.6" - -solpp@^0.11.5: - version "0.11.5" - resolved "https://registry.yarnpkg.com/solpp/-/solpp-0.11.5.tgz#e5f38b5acc952e1cc2e3871d490fdbed910938dd" - integrity sha512-LjzCGMrTDXtera2C4mbQGZSpBznP+o3/82L2CneAAMNbm+t4xPsvfrgJkIaY+IZ5YLrB8IXn7cYthwHMKvAWnQ== - dependencies: - antlr4 "~4.8.0" - axios "^0.21.1" - bn-str-256 "^1.9.1" - commander "^2.19.0" - ethereumjs-util "^6.0.0" - lodash "^4.17.11" - mz "^2.7.0" - resolve "^1.10.0" - semver "^5.6.0" - -source-map-support@0.5.12: - version "0.5.12" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.5.13, source-map-support@^0.5.19: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, 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== - -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== - dependencies: - amdefine ">=0.0.4" - -spawn-wrap@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" - integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== - dependencies: - foreground-child "^2.0.0" - is-windows "^1.0.2" - make-dir "^3.0.0" - rimraf "^3.0.0" - signal-exit "^3.0.2" - which "^2.0.1" - -spawndamnit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/spawndamnit/-/spawndamnit-2.0.0.tgz#9f762ac5c3476abb994b42ad592b5ad22bb4b0ad" - integrity sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA== - dependencies: - cross-spawn "^5.1.0" - signal-exit "^3.0.2" - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== - -split@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stacktrace-parser@^0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" - integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== - dependencies: - type-fest "^0.7.1" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== - -stream-transform@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-2.1.3.tgz#a1c3ecd72ddbf500aa8d342b0b9df38f5aa598e3" - integrity sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ== - dependencies: - mixme "^0.5.1" - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== - -string-format@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" - integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -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== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -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@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.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" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" - integrity sha512-behete+3uqxecWlDAm5lmskaSaISA+ThQ4oNNBDTBJt0x2ppR6IPqfZNuj6BLaLJ/Sji4TPZlcRyOis8wXQTLg== - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== - dependencies: - is-utf8 "^0.2.0" - -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-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-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -strip-hex-prefix@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -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-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== - -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -swap-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" - integrity sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ== - dependencies: - lower-case "^1.1.1" - upper-case "^1.1.1" - -swarm-js@^0.1.40: - version "0.1.42" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" - integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== - dependencies: - bluebird "^3.5.0" - buffer "^5.0.5" - eth-lib "^0.1.26" - fs-extra "^4.0.2" - got "^11.8.5" - mime-types "^2.1.16" - mkdirp-promise "^5.0.1" - mock-fs "^4.1.0" - setimmediate "^1.0.5" - tar "^4.0.2" - xhr-request "^1.0.1" - -sync-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" - integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== - dependencies: - http-response-object "^3.0.1" - sync-rpc "^1.2.1" - then-request "^6.0.0" - -sync-rpc@^1.2.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" - integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== - dependencies: - get-port "^3.1.0" - -table-layout@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" - integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== - dependencies: - array-back "^4.0.1" - deep-extend "~0.6.0" - typical "^5.2.0" - wordwrapjs "^4.0.0" - -table@^6.0.9, table@^6.8.0, table@^6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tar@^4.0.2: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - -term-size@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - -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" - -testrpc@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" - integrity sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA== - -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== - -then-request@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" - integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== - dependencies: - "@types/concat-stream" "^1.6.0" - "@types/form-data" "0.0.33" - "@types/node" "^8.0.0" - "@types/qs" "^6.2.31" - caseless "~0.12.0" - concat-stream "^1.6.0" - form-data "^2.2.0" - http-basic "^8.1.1" - http-response-object "^3.0.1" - promise "^8.0.0" - qs "^6.4.0" - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -throat@^4.0.0, throat@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA== - -through@2: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -time-require@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/time-require/-/time-require-0.1.2.tgz#f9e12cb370fc2605e11404582ba54ef5ca2b2d98" - integrity sha512-IqcSpa1sVNleRbC9eHnN7p7vwEHNmsjsXUDqjlnvo4+2VLJ7/gIY2XACTBuRhMB4weYbDYKsR3av2ySykRhDIA== - dependencies: - chalk "^0.4.0" - date-time "^0.1.1" - pretty-ms "^0.2.1" - text-table "^0.2.0" - -timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== - -title-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" - integrity sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q== - dependencies: - no-case "^2.2.0" - upper-case "^1.0.3" - -tmp@0.0.33, 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" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -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== - -truffle-blockchain-utils@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.5.tgz#a4e5c064dadd69f782a137f3d276d21095da7a47" - integrity sha512-eCCV8FbYOuKagRY5NiqJCZrrh9GjWX2573ahqZPvUrzxYGIvCpSsHpGCub2e00YefpMfBqwscbsDTK7WNVfwoA== - -truffle-contract-schema@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/truffle-contract-schema/-/truffle-contract-schema-2.0.3.tgz#0af8e19a39c630730bc19dd41b48f5b4137a6977" - integrity sha512-eI5cFifbB3zpcO4RsXSnjN9JMSlJ4M50GQPdrfbrIXRTXHsyQ433SkgFjIATUwfq++TXWkCRfKMjN8eA7YQ3+Q== - dependencies: - ajv "^5.1.1" - crypto-js "^3.1.9-1" - debug "^3.1.0" - -truffle-contract@^3.0.7: - version "3.0.8" - resolved "https://registry.yarnpkg.com/truffle-contract/-/truffle-contract-3.0.8.tgz#6588b1b816060f6ac6876d77948934b929574067" - integrity sha512-uhXb/G4dORU4RjFlwZZbFT0n5BS8akify+MaRsnWWs4SA/bo6x4/bQs1xtdO3b5Cl9nXiOX88wdQzRj3xtPVUg== - dependencies: - ethjs-abi "0.1.8" - truffle-blockchain-utils "^0.0.5" - truffle-contract-schema "^2.0.3" - truffle-error "^0.0.3" - web3 "0.20.6" - -truffle-error@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/truffle-error/-/truffle-error-0.0.3.tgz#4bf55242e14deee1c7194932709182deff2c97ca" - integrity sha512-9gxs1z6BUn7MqrE4NPm/jcYe8rLok3Z57aweGIh1+CoRJSttzYqwcXCqaPRSNrTFnsTeZMBukkYr/PUcADoihw== - -ts-command-line-args@^2.2.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.4.2.tgz#b4815b23c35f8a0159d4e69e01012d95690bc448" - integrity sha512-mJLQQBOdyD4XI/ZWQY44PIdYde47JhV2xl380O7twPkTQ+Y5vFDHsk8LOeXKuz7dVY5aDCfAzRarNfSqtKOkQQ== - dependencies: - "@morgan-stanley/ts-mocking-bird" "^0.6.2" - chalk "^4.1.0" - command-line-args "^5.1.1" - command-line-usage "^6.1.0" - string-format "^2.0.0" - -ts-essentials@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" - integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== - -ts-node@^10.8.0: - version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tsconfig-paths@^3.10.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" - integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsort@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" - integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tty-table@^4.1.5: - version "4.1.6" - resolved "https://registry.yarnpkg.com/tty-table/-/tty-table-4.1.6.tgz#6bd58338f36c94cce478c3337934d8a65ab40a73" - integrity sha512-kRj5CBzOrakV4VRRY5kUWbNYvo/FpOsz65DzI5op9P+cHov3+IqPbo1JE1ZnQGkHdZgNFDsrEjrfqqy/Ply9fw== - dependencies: - chalk "^4.1.2" - csv "^5.5.0" - kleur "^4.1.4" - smartwrap "^2.0.2" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - yargs "^17.1.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl-util@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" - integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - dependencies: - prelude-ls "~1.1.2" - -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5, type-detect@^4.0.8: - 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.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - -type-fest@^0.20.2: - version "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" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" - integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== - -type-fest@^0.8.0, type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typechain@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.1.1.tgz#9c2e8012c2c4c586536fc18402dcd7034c4ff0bd" - integrity sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ== - dependencies: - "@types/prettier" "^2.1.1" - debug "^4.3.1" - fs-extra "^7.0.0" - glob "7.1.7" - js-sha3 "^0.8.0" - lodash "^4.17.15" - mkdirp "^1.0.4" - prettier "^2.3.1" - ts-command-line-args "^2.2.0" - ts-essentials "^7.0.1" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typescript@~4.7.4: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== - -typical@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" - integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== - -typical@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" - integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== - -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== - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -underscore@^1.8.3: - version "1.13.6" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" - integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== - -undici@^5.14.0: - version "5.18.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.18.0.tgz#e88a77a74d991a30701e9a6751e4193a26fabda9" - integrity sha512-1iVwbhonhFytNdg0P4PqyIAXbdlVZVebtPDvuM36m66mRw4OGrCm2MYynJv/UENFLdP13J1nPVQzVE2zTs1OeA== - dependencies: - busboy "^1.6.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - -update-browserslist-db@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -upper-case-first@^1.1.0, upper-case-first@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" - integrity sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ== - dependencies: - upper-case "^1.1.1" - -upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-set-query@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" - integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== - -utf-8-validate@^5.0.2: - version "5.0.10" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" - integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== - dependencies: - node-gyp-build "^4.3.0" - -utf8@3.0.0, utf8@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - -utf8@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96" - integrity sha512-QXo+O/QkLP/x1nyi54uQiG0XrODxdysuQvE5dtVqv7F5K2Qb6FsN+qbr6KhF5wQ20tfcV3VQp0/2x1e1MRSPWg== - -util-deprecate@^1.0.1, 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== - -util@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" - integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b" - integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -v8-compile-cache@^2.0.3: - version "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: - 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== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -varint@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" - integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== - -vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.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" - -web3-bzz@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.8.2.tgz#67ea1c775874056250eece551ded22905ed08784" - integrity sha512-1EEnxjPnFnvNWw3XeeKuTR8PBxYd0+XWzvaLK7OJC/Go9O8llLGxrxICbKV+8cgIE0sDRBxiYx02X+6OhoAQ9w== - dependencies: - "@types/node" "^12.12.6" - got "12.1.0" - swarm-js "^0.1.40" - -web3-core-helpers@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.8.2.tgz#82066560f8085e6c7b93bcc8e88b441289ea9f9f" - integrity sha512-6B1eLlq9JFrfealZBomd1fmlq1o4A09vrCVQSa51ANoib/jllT3atZrRDr0zt1rfI7TSZTZBXdN/aTdeN99DWw== - dependencies: - web3-eth-iban "1.8.2" - web3-utils "1.8.2" - -web3-core-method@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.8.2.tgz#ba5ec68084e903f0516415010477618be017eac2" - integrity sha512-1qnr5mw5wVyULzLOrk4B+ryO3gfGjGd/fx8NR+J2xCGLf1e6OSjxT9vbfuQ3fErk/NjSTWWreieYWLMhaogcRA== - dependencies: - "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.8.2" - web3-core-promievent "1.8.2" - web3-core-subscriptions "1.8.2" - web3-utils "1.8.2" - -web3-core-promievent@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.8.2.tgz#e670d6b4453632e6ecfd9ad82da44f77ac1585c9" - integrity sha512-nvkJWDVgoOSsolJldN33tKW6bKKRJX3MCPDYMwP5SUFOA/mCzDEoI88N0JFofDTXkh1k7gOqp1pvwi9heuaxGg== - dependencies: - eventemitter3 "4.0.4" - -web3-core-requestmanager@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.8.2.tgz#dda95e83ca4808949612a41e54ecea557f78ef26" - integrity sha512-p1d090RYs5Mu7DK1yyc3GCBVZB/03rBtFhYFoS2EruGzOWs/5Q0grgtpwS/DScdRAm8wB8mYEBhY/RKJWF6B2g== - dependencies: - util "^0.12.5" - web3-core-helpers "1.8.2" - web3-providers-http "1.8.2" - web3-providers-ipc "1.8.2" - web3-providers-ws "1.8.2" - -web3-core-subscriptions@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.8.2.tgz#0c8bd49439d83c6f0a03c70f00b24a915a70a5ed" - integrity sha512-vXQogHDmAIQcKpXvGiMddBUeP9lnKgYF64+yQJhPNE5PnWr1sAibXuIPV7mIPihpFr/n/DORRj6Wh1pUv9zaTw== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.8.2" - -web3-core@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.8.2.tgz#333e93d7872b1a36efe758ed8b89a7acbdd962c2" - integrity sha512-DJTVEAYcNqxkqruJE+Rxp3CIv0y5AZMwPHQmOkz/cz+MM75SIzMTc0AUdXzGyTS8xMF8h3YWMQGgGEy8SBf1PQ== - dependencies: - "@types/bn.js" "^5.1.0" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.8.2" - web3-core-method "1.8.2" - web3-core-requestmanager "1.8.2" - web3-utils "1.8.2" - -web3-eth-abi@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.8.2.tgz#16e1e9be40e2527404f041a4745111211488f31a" - integrity sha512-Om9g3kaRNjqiNPAgKwGT16y+ZwtBzRe4ZJFGjLiSs6v5I7TPNF+rRMWuKnR6jq0azQZDj6rblvKFMA49/k48Og== - dependencies: - "@ethersproject/abi" "^5.6.3" - web3-utils "1.8.2" - -web3-eth-accounts@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.8.2.tgz#b894f5d5158fcae429da42de75d96520d0712971" - integrity sha512-c367Ij63VCz9YdyjiHHWLFtN85l6QghgwMQH2B1eM/p9Y5lTlTX7t/Eg/8+f1yoIStXbk2w/PYM2lk+IkbqdLA== - dependencies: - "@ethereumjs/common" "2.5.0" - "@ethereumjs/tx" "3.3.2" - eth-lib "0.2.8" - ethereumjs-util "^7.1.5" - scrypt-js "^3.0.1" - uuid "^9.0.0" - web3-core "1.8.2" - web3-core-helpers "1.8.2" - web3-core-method "1.8.2" - web3-utils "1.8.2" - -web3-eth-contract@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.8.2.tgz#5388b7130923d2b790c09a420391a81312a867fb" - integrity sha512-ID5A25tHTSBNwOPjiXSVzxruz006ULRIDbzWTYIFTp7NJ7vXu/kynKK2ag/ObuTqBpMbobP8nXcA9b5EDkIdQA== - dependencies: - "@types/bn.js" "^5.1.0" - web3-core "1.8.2" - web3-core-helpers "1.8.2" - web3-core-method "1.8.2" - web3-core-promievent "1.8.2" - web3-core-subscriptions "1.8.2" - web3-eth-abi "1.8.2" - web3-utils "1.8.2" - -web3-eth-ens@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.8.2.tgz#0a086ad4d919102e28b9fd3036df246add9df22a" - integrity sha512-PWph7C/CnqdWuu1+SH4U4zdrK4t2HNt0I4XzPYFdv9ugE8EuojselioPQXsVGvjql+Nt3jDLvQvggPqlMbvwRw== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - web3-core "1.8.2" - web3-core-helpers "1.8.2" - web3-core-promievent "1.8.2" - web3-eth-abi "1.8.2" - web3-eth-contract "1.8.2" - web3-utils "1.8.2" - -web3-eth-iban@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.8.2.tgz#5cb3022234b13986f086353b53f0379a881feeaf" - integrity sha512-h3vNblDWkWMuYx93Q27TAJz6lhzpP93EiC3+45D6xoz983p6si773vntoQ+H+5aZhwglBtoiBzdh7PSSOnP/xQ== - dependencies: - bn.js "^5.2.1" - web3-utils "1.8.2" - -web3-eth-personal@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.8.2.tgz#3526c1ebaa4e7bf3a0a8ec77e34f067cc9a750b2" - integrity sha512-Vg4HfwCr7doiUF/RC+Jz0wT4+cYaXcOWMAW2AHIjHX6Z7Xwa8nrURIeQgeEE62qcEHAzajyAdB1u6bJyTfuCXw== - dependencies: - "@types/node" "^12.12.6" - web3-core "1.8.2" - web3-core-helpers "1.8.2" - web3-core-method "1.8.2" - web3-net "1.8.2" - web3-utils "1.8.2" - -web3-eth@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.8.2.tgz#8562287ae1803c30eb54dc7d832092e5739ce06a" - integrity sha512-JoTiWWc4F4TInpbvDUGb0WgDYJsFhuIjJlinc5ByjWD88Gvh+GKLsRjjFdbqe5YtwIGT4NymwoC5LQd1K6u/QQ== - dependencies: - web3-core "1.8.2" - web3-core-helpers "1.8.2" - web3-core-method "1.8.2" - web3-core-subscriptions "1.8.2" - web3-eth-abi "1.8.2" - web3-eth-accounts "1.8.2" - web3-eth-contract "1.8.2" - web3-eth-ens "1.8.2" - web3-eth-iban "1.8.2" - web3-eth-personal "1.8.2" - web3-net "1.8.2" - web3-utils "1.8.2" - -web3-net@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.8.2.tgz#97e1e0015fabc4cda31017813e98d0b5468dd04f" - integrity sha512-1itkDMGmbgb83Dg9nporFes9/fxsU7smJ3oRXlFkg4ZHn8YJyP1MSQFPJWWwSc+GrcCFt4O5IrUTvEkHqE3xag== - dependencies: - web3-core "1.8.2" - web3-core-method "1.8.2" - web3-utils "1.8.2" - -web3-providers-http@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.8.2.tgz#fbda3a3bbc8db004af36e91bec35f80273b37885" - integrity sha512-2xY94IIEQd16+b+vIBF4IC1p7GVaz9q4EUFscvMUjtEq4ru4Atdzjs9GP+jmcoo49p70II0UV3bqQcz0TQfVyQ== - dependencies: - abortcontroller-polyfill "^1.7.3" - cross-fetch "^3.1.4" - es6-promise "^4.2.8" - web3-core-helpers "1.8.2" - -web3-providers-ipc@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.8.2.tgz#e52a7250f40c83b99a2482ec5b4cf2728377ae5c" - integrity sha512-p6fqKVGFg+WiXGHWnB1hu43PbvPkDHTz4RgoEzbXugv5rtv5zfYLqm8Ba6lrJOS5ks9kGKR21a0y3NzE3u7V4w== - dependencies: - oboe "2.1.5" - web3-core-helpers "1.8.2" - -web3-providers-ws@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.8.2.tgz#56a2b701387011aca9154ca4bc06ea4b5f27e4ef" - integrity sha512-3s/4K+wHgbiN+Zrp9YjMq2eqAF6QGABw7wFftPdx+m5hWImV27/MoIx57c6HffNRqZXmCHnfWWFCNHHsi7wXnA== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.8.2" - websocket "^1.0.32" - -web3-shh@1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.8.2.tgz#217a417f0d6e243dd4d441848ffc2bd164cea8a0" - integrity sha512-uZ+3MAoNcaJsXXNCDnizKJ5viBNeHOFYsCbFhV755Uu52FswzTOw6DtE7yK9nYXMtIhiSgi7nwl1RYzP8pystw== - dependencies: - web3-core "1.8.2" - web3-core-method "1.8.2" - web3-core-subscriptions "1.8.2" - web3-net "1.8.2" - -web3-utils@1.8.2, web3-utils@^1.0.0-beta.31, web3-utils@^1.3.6: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.8.2.tgz#c32dec5e9b955acbab220eefd7715bc540b75cc9" - integrity sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA== - dependencies: - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -web3@0.20.6: - version "0.20.6" - resolved "https://registry.yarnpkg.com/web3/-/web3-0.20.6.tgz#3e97306ae024fb24e10a3d75c884302562215120" - integrity sha512-diON1+Y8sPQ33htuTMZfyo+qlsmCBSYwi+MVTRneS8anqZUaTrGaBkTpPkPUvfX1X+NK+Y2spLaaei3HfXeSuw== - dependencies: - bignumber.js "git+https://github.com/frozeman/bignumber.js-nolookahead.git" - crypto-js "^3.1.4" - utf8 "^2.1.1" - xhr2 "*" - xmlhttprequest "*" - -web3@1.8.2, web3@^1.0.0-beta.34, web3@^1.0.0-beta.36: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.8.2.tgz#95a4e5398fd0f01325264bf8e5e8cdc69a7afe86" - integrity sha512-92h0GdEHW9wqDICQQKyG4foZBYi0OQkyg4CRml2F7XBl/NG+fu9o6J19kzfFXzSBoA4DnJXbyRgj/RHZv5LRiw== - dependencies: - web3-bzz "1.8.2" - web3-core "1.8.2" - web3-eth "1.8.2" - web3-eth-personal "1.8.2" - web3-net "1.8.2" - web3-shh "1.8.2" - web3-utils "1.8.2" - -web3@^0.20.0: - version "0.20.7" - resolved "https://registry.yarnpkg.com/web3/-/web3-0.20.7.tgz#1605e6d81399ed6f85a471a4f3da0c8be57df2f7" - integrity sha512-VU6/DSUX93d1fCzBz7WP/SGCQizO1rKZi4Px9j/3yRyfssHyFcZamMw2/sj4E8TlfMXONvZLoforR8B4bRoyTQ== - dependencies: - bignumber.js "git+https://github.com/frozeman/bignumber.js-nolookahead.git" - crypto-js "^3.1.4" - utf8 "^2.1.1" - xhr2-cookies "^1.1.0" - xmlhttprequest "*" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -websocket@^1.0.32: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q== - -which-pm@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-pm/-/which-pm-2.0.0.tgz#8245609ecfe64bf751d0eef2f376d83bf1ddb7ae" - integrity sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w== - dependencies: - load-yaml-file "^0.2.0" - path-exists "^4.0.0" - -which-typed-array@^1.1.2, which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - -which@1.3.1, which@^1.1.1, which@^1.2.9, 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: - 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" - -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - integrity sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw== - -word-wrap@^1.2.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== - -wordwrapjs@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" - integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== - dependencies: - reduce-flatten "^2.0.0" - typical "^5.2.0" - -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@^3.0.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -wsrun@^5.2.2: - version "5.2.4" - resolved "https://registry.yarnpkg.com/wsrun/-/wsrun-5.2.4.tgz#6eb6c3ccd3327721a8df073a5e3578fb0dea494e" - integrity sha512-akv3WtKBohdHsD/5uqhYRHw6GXeCXe87FsSg28Szq+2cpoqRW2SY4yPfm1D0za1cS6MgNy5hPgzS5SqYJaGUxg== - dependencies: - bluebird "^3.5.1" - chalk "^2.3.0" - glob "^7.1.2" - jest-changed-files "^24.9.0" - lodash "^4.17.4" - minimatch "^3.0.4" - split "^1.0.1" - throat "^4.1.0" - yargs "^13.0.0" - -xhr-request-promise@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" - integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== - dependencies: - xhr-request "^1.1.0" - -xhr-request@^1.0.1, xhr-request@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" - integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== - dependencies: - buffer-to-arraybuffer "^0.0.5" - object-assign "^4.1.1" - query-string "^5.0.1" - simple-get "^2.7.0" - timed-out "^4.0.1" - url-set-query "^1.0.0" - xhr "^2.0.4" - -xhr2-cookies@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" - integrity sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g== - dependencies: - cookiejar "^2.1.1" - -xhr2@*: - version "0.2.1" - resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.2.1.tgz#4e73adc4f9cfec9cbd2157f73efdce3a5f108a93" - integrity sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw== - -xhr@^2.0.4, xhr@^2.3.3: - version "2.6.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" - integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== - dependencies: - global "~4.4.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - -xmlhttprequest@*, xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" - integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^18.1.2, yargs-parser@^18.1.3: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" - integrity sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA== - dependencies: - camelcase "^3.0.0" - lodash.assign "^4.0.6" - -yargs-parser@^20.2.2: - 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== - -yargs-parser@^21.1.1: - version "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-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.0" - -yargs@13.3.2, yargs@^13.0.0, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -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@^15.0.2, yargs@^15.1.0: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^17.1.1: - version "17.6.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" - integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yargs@^4.7.1: - version "4.8.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - integrity sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA== - dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.0.3" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.1" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^2.4.1" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==